6.0 KiB
6.0 KiB
Project Documentation
Goal
构建一个本机 Codex 智能体管理台,用中文管理 agent 配置、项目运行状态、动态工作流和安全写回流程。
Target Architecture
计划架构为:Go 后端提供 localhost HTTP API,Vue 3 + Vite 前端提供中文工作台界面。当前后端已提供健康检查、.codex/agents/*.toml 读取、项目配置只读读取、运行线程只读模型、动态工作流事件模型,以及单个智能体 TOML 的草稿校验和确认写回;前端已通过集中 API client 接入这些端点并显示加载中、连接失败、空数据和写回状态。
Configuration
CODEX_HOME: 默认/Users/yoilun/.codex- 后端监听地址:默认
127.0.0.1:18083 - 前端开发地址:默认
127.0.0.1:13083 WorkspaceRoot: 默认当前进程工作目录,用于读取task_plan.md等计划文件证据。- Go module 目标:
go 1.22 - SQLite 驱动:
modernc.org/sqlite v1.35.0
Runbook
启动后端:
go run ./cmd/codex-agent-manager
健康检查:
curl http://127.0.0.1:18083/api/health
读取智能体定义:
curl http://127.0.0.1:18083/api/agents
校验智能体草稿,不写文件:
curl -X POST http://127.0.0.1:18083/api/agents/backend/validate \
-H 'Content-Type: application/json' \
-d '{"content":"name = \"后端架构师\"\n"}'
创建备份并写回单个智能体文件:
curl -X POST http://127.0.0.1:18083/api/agents/backend/write \
-H 'Content-Type: application/json' \
-d '{"content":"name = \"后端架构师\"\n","expectedHash":"<validate 返回的 currentHash>"}'
读取项目配置:
curl http://127.0.0.1:18083/api/projects
读取运行线程:
curl http://127.0.0.1:18083/api/runtime/threads
读取动态工作流事件:
curl http://127.0.0.1:18083/api/workflow/events
安装并构建前端:
cd web
pnpm install
pnpm test
pnpm build
启动 Phase 4 只读前端工作台:
cd web
pnpm dev
前端开发地址为 http://127.0.0.1:13083/。前端按视图调用 API:项目视图读取 /api/projects 和 /api/runtime/threads,工作流视图读取 /api/workflow/events,智能体视图读取 /api/agents,并仅对当前选中的智能体调用 /api/agents/{id}/validate 和 /api/agents/{id}/write。静态示例数据仅在接口连接失败时作为 fallback 展示,并必须明确标注“示例/等待连接”;真实接口返回空列表时展示空状态和来源证据,不回退到示例数据。前端可保留 local_sample、api_missing 等内部 source kind,但用户界面必须显示中文来源和 高 / 中 / 低 置信度。
Security Boundaries
- 不读取
.codex/auth.json。 - 不写入 Codex SQLite。
- 不读取或写入
.codex/config.toml以外的项目只读解析;写回目标仅限CODEX_HOME/agents/{id}.toml直属文件。 - SQLite 通过纯 Go
modernc.org/sqlite v1.35.0和mode=ro&immutable=1打开;缺失 SQLite 返回空列表和低置信度来源说明。 - 运行线程 API 返回聚合
source和分数据源sources;仅state_5.sqlite或仅goals_1.sqlite缺失时,聚合来源为sqlite_partial/medium,缺失的一侧为sqlite_missing/low。 - 运行线程读取使用
PRAGMA table_info适配 schema drift;缺关键列时对应表返回空列表和sqlite_schema_drift/low证据,可选列缺失、NULL 和数值字段按空字符串或文本值处理。 .codex/agents/*.toml写回必须先备份。- 当前
/api/agents只读列出.codex/agents直属.toml文件,读取前通过 Codex home 边界和 agent TOML 专用 resolver;坏 TOML 以单条invalid状态返回,不导致服务崩溃。 POST /api/agents/{id}/validate只校验请求体中的 TOML 草稿、生成 diff、返回目标路径、当前 sha256 hash 和字段变更;该端点不写文件。POST /api/agents/{id}/write会重新校验 TOML,重新读取目标文件并比较expectedHash,先创建*.bak-<timestamp>备份,备份成功后通过同目录临时文件和 rename 原子写回。- 写回 id 只允许安全 bare file stem:字母、数字、下划线、连字符,且不能包含路径分隔符、绝对路径、
.toml扩展名或子目录。agents目录 symlink、目标叶子 symlink、非普通文件和路径穿越都会被拒绝。 - 无效 TOML、hash 冲突、备份失败或临时文件写入失败都不会替换原文件;临时文件会尽量清理。
- 当前
/api/projects只读解析.codex/config.toml中的[projects."..."],展示路径、显示名、信任等级和目录存在性。 - 当前
/api/workflow/events从运行线程、spawn edges、goals 和计划文件证据生成事件流/交接边/阶段状态,不写死固定流程。 - Phase 4 前端不调用真实 API、不保存草稿、不写回
.codex/agents/*.toml;所有写回相关控件仅作为只读步骤展示。 - Phase 6 前端仅在智能体视图提供单文件草稿入口,按钮为“校验 TOML”“查看差异”“创建备份并写回”;只有校验成功且存在 currentHash 时才允许写回,写回前使用浏览器确认。
- Phase 5 前端 normalizer 负责把 source kind、confidence、状态和 parseStatus 转成中文显示,并过滤工作流中非阶段表格行。
Known Risks
- Codex 内部 SQLite schema 可能变化。
- 运行状态由多来源推断,必须显示置信度。
- Phase 3 真实 SQLite 读取已覆盖临时测试库;如果真实 Codex schema 新增字段或缺少可选字段,应继续走 schema-aware 查询和来源证据,而不是让 API 500。
- Phase 4 只读工作台是静态壳;如果用户误以为它展示真实状态,应优先检查界面是否仍清楚显示来源、置信度和“等待连接 API”提示。
- Phase 5 agent 接口当前不返回原始 TOML 文本;智能体只读编辑区展示的是接口返回的已解析字段,并在代码区说明“接口未返回原始 TOML”。