refactor(agent): dedupe harness and command workflows

This commit is contained in:
Peter Steinberger
2026-02-16 14:52:09 +00:00
parent 04892ee230
commit f717a13039
204 changed files with 7366 additions and 11540 deletions

View File

@@ -43,94 +43,86 @@ function mockConfig(storePath: string, overrides?: Partial<OpenClawConfig>) {
});
}
async function withTempStore(
fn: (ctx: { dir: string; store: string }) => Promise<void>,
overrides?: Partial<OpenClawConfig>,
) {
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-agent-cli-"));
const store = path.join(dir, "sessions.json");
mockConfig(store, overrides);
try {
await fn({ dir, store });
} finally {
fs.rmSync(dir, { recursive: true, force: true });
}
}
beforeEach(() => {
vi.clearAllMocks();
});
describe("agentCliCommand", () => {
it("uses a timer-safe max gateway timeout when --timeout is 0", async () => {
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-agent-cli-"));
const store = path.join(dir, "sessions.json");
mockConfig(store);
await withTempStore(async () => {
vi.mocked(callGateway).mockResolvedValue({
runId: "idem-1",
status: "ok",
result: {
payloads: [{ text: "hello" }],
meta: { stub: true },
},
});
vi.mocked(callGateway).mockResolvedValue({
runId: "idem-1",
status: "ok",
result: {
payloads: [{ text: "hello" }],
meta: { stub: true },
},
});
try {
await agentCliCommand({ message: "hi", to: "+1555", timeout: "0" }, runtime);
expect(callGateway).toHaveBeenCalledTimes(1);
const request = vi.mocked(callGateway).mock.calls[0]?.[0] as { timeoutMs?: number };
expect(request.timeoutMs).toBe(2_147_000_000);
} finally {
fs.rmSync(dir, { recursive: true, force: true });
}
});
});
it("uses gateway by default", async () => {
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-agent-cli-"));
const store = path.join(dir, "sessions.json");
mockConfig(store);
await withTempStore(async () => {
vi.mocked(callGateway).mockResolvedValue({
runId: "idem-1",
status: "ok",
result: {
payloads: [{ text: "hello" }],
meta: { stub: true },
},
});
vi.mocked(callGateway).mockResolvedValue({
runId: "idem-1",
status: "ok",
result: {
payloads: [{ text: "hello" }],
meta: { stub: true },
},
});
try {
await agentCliCommand({ message: "hi", to: "+1555" }, runtime);
expect(callGateway).toHaveBeenCalledTimes(1);
expect(agentCommand).not.toHaveBeenCalled();
expect(runtime.log).toHaveBeenCalledWith("hello");
} finally {
fs.rmSync(dir, { recursive: true, force: true });
}
});
});
it("falls back to embedded agent when gateway fails", async () => {
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-agent-cli-"));
const store = path.join(dir, "sessions.json");
mockConfig(store);
await withTempStore(async () => {
vi.mocked(callGateway).mockRejectedValue(new Error("gateway not connected"));
vi.mocked(agentCommand).mockImplementationOnce(async (_opts, rt) => {
rt.log?.("local");
return { payloads: [{ text: "local" }], meta: { stub: true } };
});
vi.mocked(callGateway).mockRejectedValue(new Error("gateway not connected"));
vi.mocked(agentCommand).mockImplementationOnce(async (_opts, rt) => {
rt.log?.("local");
return { payloads: [{ text: "local" }], meta: { stub: true } };
});
try {
await agentCliCommand({ message: "hi", to: "+1555" }, runtime);
expect(callGateway).toHaveBeenCalledTimes(1);
expect(agentCommand).toHaveBeenCalledTimes(1);
expect(runtime.log).toHaveBeenCalledWith("local");
} finally {
fs.rmSync(dir, { recursive: true, force: true });
}
});
});
it("skips gateway when --local is set", async () => {
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-agent-cli-"));
const store = path.join(dir, "sessions.json");
mockConfig(store);
await withTempStore(async () => {
vi.mocked(agentCommand).mockImplementationOnce(async (_opts, rt) => {
rt.log?.("local");
return { payloads: [{ text: "local" }], meta: { stub: true } };
});
vi.mocked(agentCommand).mockImplementationOnce(async (_opts, rt) => {
rt.log?.("local");
return { payloads: [{ text: "local" }], meta: { stub: true } };
});
try {
await agentCliCommand(
{
message: "hi",
@@ -143,8 +135,6 @@ describe("agentCliCommand", () => {
expect(callGateway).not.toHaveBeenCalled();
expect(agentCommand).toHaveBeenCalledTimes(1);
expect(runtime.log).toHaveBeenCalledWith("local");
} finally {
fs.rmSync(dir, { recursive: true, force: true });
}
});
});
});