Files
clawdbot/src/agents/bash-process-registry.test.ts
2025-12-25 00:25:11 +00:00

77 lines
1.8 KiB
TypeScript

import { beforeEach, describe, expect, it } from "vitest";
import {
addSession,
appendOutput,
listFinishedSessions,
markBackgrounded,
markExited,
resetProcessRegistryForTests,
} from "./bash-process-registry.js";
type DummyChild = {
pid?: number;
};
describe("bash process registry", () => {
beforeEach(() => {
resetProcessRegistryForTests();
});
it("captures output and truncates", () => {
const session = {
id: "sess",
command: "echo test",
child: { pid: 123 } as DummyChild,
startedAt: Date.now(),
cwd: "/tmp",
maxOutputChars: 10,
totalOutputChars: 0,
pendingStdout: [],
pendingStderr: [],
aggregated: "",
tail: "",
exited: false,
exitCode: undefined,
exitSignal: undefined,
truncated: false,
backgrounded: false,
};
addSession(session as any);
appendOutput(session as any, "stdout", "0123456789");
appendOutput(session as any, "stdout", "abcdef");
expect(session.aggregated).toBe("6789abcdef");
expect(session.truncated).toBe(true);
});
it("only persists finished sessions when backgrounded", () => {
const session = {
id: "sess",
command: "echo test",
child: { pid: 123 } as DummyChild,
startedAt: Date.now(),
cwd: "/tmp",
maxOutputChars: 100,
totalOutputChars: 0,
pendingStdout: [],
pendingStderr: [],
aggregated: "",
tail: "",
exited: false,
exitCode: undefined,
exitSignal: undefined,
truncated: false,
backgrounded: false,
};
addSession(session as any);
markExited(session as any, 0, null, "completed");
expect(listFinishedSessions()).toHaveLength(0);
markBackgrounded(session as any);
markExited(session as any, 0, null, "completed");
expect(listFinishedSessions()).toHaveLength(1);
});
});