🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. 先把目标说清楚:让 Codex Agent 修好 monorepo 的依赖地狱
TypeScript monorepo 最烦人的不是写业务代码,而是某天pnpm install突然报一堆ERR_PNPM_PEER_DEP_ISSUES,pnpm test直接挂掉。我这次拿一个真实结构的 pnpm workspace 做实验:apps/web、apps/api、packages/ui、packages/shared四个包,packages/ui依赖react@18,apps/web里某个第三方组件库却把react@17写进了 peerDependencies,于是整棵树开始互相拉扯。
目标很明确:让 Codex Agent 读仓库、定位冲突、给出可执行的修复方案,最后pnpm test全绿。TaoToken 在这里扮演两个角色——提供模型调用的 Key,以及作为 Codex Agent 的默认供应商 Base URL。你不需要改一堆环境变量,只要把https://taotoken.net/api填进去,Agent 就能开始干活。
适合谁看:手上有多包仓库、被 peer dependency 折磨过、想用 Agent 自动化处理依赖问题的前端或全栈同学。下面按「准备仓库 → 写 AGENTS.md → 接入 TaoToken → 跑修复 → 看日志」的顺序走一遍。
2. 准备一个可复现的 monorepo 现场
先确认你的仓库是 pnpm workspace。根目录应该有pnpm-workspace.yaml:
packages: - "apps/*" - "packages/*"根package.json里加上:
{ "name": "monorepo-demo", "private": true, "scripts": { "test": "pnpm -r run test" }, "devDependencies": { "typescript": "^5.4.0" } }packages/ui/package.json故意制造冲突:
{ "name": "@demo/ui", "version": "1.0.0", "peerDependencies": { "react": "^18.0.0" }, "devDependencies": { "react": "^18.2.0" } }apps/web/package.json引入一个 peer 要求为 17 的库:
{ "name": "@demo/web", "version": "1.0.0", "dependencies": { "@demo/ui": "workspace:*", "some-legacy-widget": "^2.1.0" } }此时执行pnpm install,大概率看到:
ERR_PNPM_PEER_DEP_ISSUES Unmet peer dependencies └─┬ some-legacy-widget 2.1.0 └── ✕ unmet peer react@^17.0.0: found 18.2.0这就是我们要交给 Codex Agent 的原始现场。别急着手动改,先让它自己读。
3. 写一份给 Agent 看的 AGENTS.md
Codex Agent 会优先读仓库根目录的AGENTS.md,这相当于给它的工作说明书。内容不用长,但要把边界、命令、验收标准写清楚。我用的片段如下:
# AGENTS.md ## 项目结构 - pnpm workspace,包位于 apps/* 和 packages/* - 统一使用 pnpm,禁止 npm / yarn ## 依赖规则 - 所有 peerDependencies 冲突优先通过 pnpm.overrides 解决 - 不允许删除 packages/ui 的 react peer 约束 - 修改后必须运行 `pnpm install` 和 `pnpm test` ## 验收标准 - `pnpm install` 无 ERR_PNPM_PEER_DEP_ISSUES - `pnpm test` 退出码为 0 - 变更只允许出现在根 package.json 和 pnpm-workspace.yaml ## 输出要求 - 每次修改前列出计划 - 修改后贴出关键命令与结果摘要这份文件的价值在于:Agent 不会乱删依赖,也不会把react降到 17 去迎合老库。它被约束在「用 overrides 收敛版本」这条路上。
4. 接入 TaoToken:拿 Key 并设为默认供应商
打开官网创建 Key:https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_content=codex_monorepo ,登录后进控制台。Key 管理页在 https://taotoken.net/console/api-keys ,新建一个 Key 并复制。
Codex Agent 的配置通常走环境变量或配置文件。把 Base URL 指向https://taotoken.net/api,Key 填进去:
export OPENAI_API_KEY="sk-你的TaoTokenKey" export OPENAI_BASE_URL="https://taotoken.net/api"如果你用的是 Codex 的配置文件形式,在~/.codex/config.toml里写:
model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "OPENAI_API_KEY"模型选择上,依赖修复这种需要读多文件、做推理的任务,建议用带长上下文和工具调用能力的模型。具体可用型号和计费以官网为准:https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_content=codex_monorepo 。配置完成后,在仓库根目录启动 Codex Agent:
codex它会自动加载AGENTS.md,然后你输入任务:
修复本仓库的 peer dependency 冲突,让 pnpm install 和 pnpm test 通过。5. 从失败到通过:日志摘要与修复命令
Agent 第一轮先跑诊断:
pnpm install --reporter=append-only输出摘要:
ERR_PNPM_PEER_DEP_ISSUES Unmet peer dependencies some-legacy-widget 2.1.0 -> react@^17.0.0 (found 18.2.0)它给出的计划是:在根package.json加pnpm.overrides,把some-legacy-widget的 react peer 强制对齐到 18。修改如下:
{ "pnpm": { "overrides": { "some-legacy-widget>react": "18.2.0" } } }然后重新安装:
pnpm install这次输出:
Packages: +1 Progress: resolved 312, reused 298, downloaded 1, added 1, done Done in 6.4s没有 peer 报错。接着跑测试:
pnpm test第一次仍然失败,摘要:
FAIL packages/ui test/render.test.ts TypeError: Cannot read properties of undefined (reading 'createElement')Agent 判断是packages/ui的测试环境缺少 react 运行时,检查发现packages/ui的devDependencies里 react 被 overrides 影响后没被正确提升。它在packages/ui/package.json补上显式依赖:
{ "devDependencies": { "react": "18.2.0", "react-dom": "18.2.0" } }再跑:
pnpm install && pnpm test最终摘要:
Test Files 4 passed (4) Tests 18 passed (18) Done in 9.1s退出码 0。整个过程 Agent 只改了根package.json、packages/ui/package.json,符合AGENTS.md的边界。
失败分支也要说清楚:如果pnpm.overrides写错包名,会报ERR_PNPM_NO_MATCHING_VERSION,此时检查some-legacy-widget的实际版本号;如果测试仍报 react 相关错误,优先确认packages/ui是否把 react 放进了devDependencies而非peerDependencies。另外,若你的仓库用了pnpm dedupe,可以在 overrides 后补一条pnpm dedupe收敛重复版本。
6. 限制、成本与模型选择
这套流程不是万能的。Codex Agent 能读文件、跑命令,但它对私有 registry 的鉴权、公司内部镜像的配置一无所知,遇到ERR_PNPM_FETCH_401这类问题还是得你手动补.npmrc。另外,overrides 是「强制对齐」,如果老库真的依赖 react 17 的某个 API,强行升到 18 可能在运行时才炸,测试覆盖不到的地方要自己补。
成本方面,依赖修复任务通常要读 10 到 30 个文件,加上多轮命令执行,token 消耗比单文件问答高。TaoToken 的计费按实际用量走,具体价格和可用模型以官网为准:https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_content=codex_monorepo 。模型选择上,长上下文模型适合一次读完整棵依赖树,推理型模型适合判断 overrides 的写法,你可以根据仓库规模切换。
最后留一个实用技巧:把AGENTS.md里的验收标准写成可执行的命令,Agent 每轮改完都会自己跑一遍,你只需要看最后的退出码。我试过在AGENTS.md里加一句「如果pnpm test失败,先输出失败用例名再修改」,Agent 的定位效率会明显提升。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度