feat(qa): recreate qa lab docker stack

This commit is contained in:
Peter Steinberger
2026-04-05 21:21:44 +01:00
parent 17a324b0de
commit 8e1c81e707
28 changed files with 2088 additions and 890 deletions

View File

@@ -23,6 +23,13 @@ const { nodesAction, registerNodesCli } = vi.hoisted(() => {
return { nodesAction: action, registerNodesCli: register };
});
const { registerQaCli } = vi.hoisted(() => ({
registerQaCli: vi.fn((program: Command) => {
const qa = program.command("qa");
qa.command("run").action(() => undefined);
}),
}));
const configModule = vi.hoisted(() => ({
loadConfig: vi.fn(),
readConfigFileSnapshot: vi.fn(),
@@ -30,6 +37,7 @@ const configModule = vi.hoisted(() => ({
vi.mock("../acp-cli.js", () => ({ registerAcpCli }));
vi.mock("../nodes-cli.js", () => ({ registerNodesCli }));
vi.mock("../qa-cli.js", () => ({ registerQaCli }));
vi.mock("../../config/config.js", () => configModule);
describe("registerSubCliCommands", () => {
@@ -87,6 +95,7 @@ describe("registerSubCliCommands", () => {
expect(names).toContain("acp");
expect(names).toContain("gateway");
expect(names).toContain("clawbot");
expect(names).toContain("qa");
expect(registerAcpCli).not.toHaveBeenCalled();
});

View File

@@ -181,6 +181,15 @@ const entries: SubCliEntry[] = [
mod.registerDocsCli(program);
},
},
{
name: "qa",
description: "Run QA scenarios and launch the private QA debugger UI",
hasSubcommands: true,
register: async (program) => {
const mod = await import("../qa-cli.js");
mod.registerQaCli(program);
},
},
{
name: "hooks",
description: "Manage internal agent hooks",

View File

@@ -68,6 +68,11 @@ export const SUB_CLI_DESCRIPTORS = [
description: "Search the live OpenClaw docs",
hasSubcommands: false,
},
{
name: "qa",
description: "Run QA scenarios and launch the private QA debugger UI",
hasSubcommands: true,
},
{
name: "hooks",
description: "Manage internal agent hooks",