mirror of
https://github.com/harivansh-afk/clanker-agent.git
synced 2026-04-19 20:00:44 +00:00
teams tmux
This commit is contained in:
parent
9057c30726
commit
fb88f43573
2 changed files with 138 additions and 11 deletions
75
packages/pi-teams/src/adapters/tmux-adapter.test.ts
Normal file
75
packages/pi-teams/src/adapters/tmux-adapter.test.ts
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import * as terminalAdapter from "../utils/terminal-adapter";
|
||||
import { TmuxAdapter } from "./tmux-adapter";
|
||||
|
||||
describe("TmuxAdapter", () => {
|
||||
let adapter: TmuxAdapter;
|
||||
let mockExecCommand: ReturnType<typeof vi.spyOn>;
|
||||
|
||||
beforeEach(() => {
|
||||
adapter = new TmuxAdapter();
|
||||
mockExecCommand = vi.spyOn(terminalAdapter, "execCommand");
|
||||
delete process.env.TMUX;
|
||||
delete process.env.ZELLIJ;
|
||||
delete process.env.WEZTERM_PANE;
|
||||
delete process.env.TERM_PROGRAM;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
it("detects tmux in headless runtimes when the binary is available", () => {
|
||||
mockExecCommand.mockReturnValue({
|
||||
stdout: "tmux 3.4",
|
||||
stderr: "",
|
||||
status: 0,
|
||||
});
|
||||
|
||||
expect(adapter.detect()).toBe(true);
|
||||
expect(mockExecCommand).toHaveBeenCalledWith("tmux", ["-V"]);
|
||||
});
|
||||
|
||||
it("creates a detached team session when not already inside tmux", () => {
|
||||
mockExecCommand.mockImplementation((_bin: string, args: string[]) => {
|
||||
if (args[0] === "has-session") {
|
||||
return { stdout: "", stderr: "missing", status: 1 };
|
||||
}
|
||||
if (args[0] === "new-session") {
|
||||
return { stdout: "%1\n", stderr: "", status: 0 };
|
||||
}
|
||||
return { stdout: "", stderr: "", status: 0 };
|
||||
});
|
||||
|
||||
expect(
|
||||
adapter.spawn({
|
||||
name: "worker",
|
||||
cwd: "/tmp/project",
|
||||
command: "pi",
|
||||
env: { PI_TEAM_NAME: "demo", PI_AGENT_NAME: "worker" },
|
||||
}),
|
||||
).toBe("%1");
|
||||
|
||||
expect(mockExecCommand).toHaveBeenCalledWith(
|
||||
"tmux",
|
||||
expect.arrayContaining(["new-session", "-d", "-s", "pi-teams-demo"]),
|
||||
);
|
||||
});
|
||||
|
||||
it("checks pane liveness by pane id", () => {
|
||||
mockExecCommand.mockReturnValue({
|
||||
stdout: "%7\n",
|
||||
stderr: "",
|
||||
status: 0,
|
||||
});
|
||||
|
||||
expect(adapter.isAlive("%7")).toBe(true);
|
||||
expect(mockExecCommand).toHaveBeenCalledWith("tmux", [
|
||||
"display-message",
|
||||
"-p",
|
||||
"-t",
|
||||
"%7",
|
||||
"#{pane_id}",
|
||||
]);
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue