




















@@ -33,6 +33,8 @@ type EnvSnapshot = {
3333OPENCLAW_HOME?: string;
3434OPENCLAW_STATE_DIR?: string;
3535OPENCLAW_OAUTH_DIR?: string;
36+OPENCLAW_AGENT_DIR?: string;
37+PI_CODING_AGENT_DIR?: string;
3638};
37393840function captureEnv(): EnvSnapshot {
@@ -41,6 +43,8 @@ function captureEnv(): EnvSnapshot {
4143OPENCLAW_HOME: process.env.OPENCLAW_HOME,
4244OPENCLAW_STATE_DIR: process.env.OPENCLAW_STATE_DIR,
4345OPENCLAW_OAUTH_DIR: process.env.OPENCLAW_OAUTH_DIR,
46+OPENCLAW_AGENT_DIR: process.env.OPENCLAW_AGENT_DIR,
47+PI_CODING_AGENT_DIR: process.env.PI_CODING_AGENT_DIR,
4448};
4549}
4650@@ -156,6 +160,8 @@ describe("doctor state integrity oauth dir checks", () => {
156160process.env.OPENCLAW_HOME = tempHome;
157161process.env.OPENCLAW_STATE_DIR = path.join(tempHome, ".openclaw");
158162delete process.env.OPENCLAW_OAUTH_DIR;
163+delete process.env.OPENCLAW_AGENT_DIR;
164+delete process.env.PI_CODING_AGENT_DIR;
159165fs.mkdirSync(process.env.OPENCLAW_STATE_DIR, { recursive: true, mode: 0o700 });
160166noteMock.mockClear();
161167});
@@ -249,6 +255,40 @@ describe("doctor state integrity oauth dir checks", () => {
249255expect(text).not.toContain("Examples:");
250256});
251257258+it("does not warn when the live compatibility main agent dir is missing from agents.list", async () => {
259+createAgentDir("main");
260+261+const text = await runStateIntegrityText({
262+agents: {
263+list: [{ id: "jeremiah", default: true }],
264+},
265+});
266+267+expect(text).not.toContain("without a matching agents.list entry");
268+expect(text).not.toContain("Examples:");
269+});
270+271+it("does not warn when OPENCLAW_AGENT_DIR points at the live compatibility agent dir", async () => {
272+createAgentDir("legacy");
273+const legacyAgentDir = path.join(
274+process.env.OPENCLAW_STATE_DIR ?? "",
275+"agents",
276+"legacy",
277+"agent",
278+);
279+process.env.OPENCLAW_AGENT_DIR = legacyAgentDir;
280+process.env.PI_CODING_AGENT_DIR = legacyAgentDir;
281+282+const text = await runStateIntegrityText({
283+agents: {
284+list: [{ id: "main", default: true }],
285+},
286+});
287+288+expect(text).not.toContain("without a matching agents.list entry");
289+expect(text).not.toContain("Examples:");
290+});
291+252292it("warns about tombstoned subagent restart recovery sessions", async () => {
253293const cfg: OpenClawConfig = {};
254294writeSessionStore(cfg, {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。