const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:subagent:parent", "kill", "agent:main:subagent:sibling",
);
expect(result.content).toBe( "No matching sub-agent sessions found for `agent:main:subagent:sibling`.",
);
expect(request).toHaveBeenCalledTimes(1);
expect(request).toHaveBeenNthCalledWith(1, "sessions.list", {});
});
it("returns a no-op summary when matching sessions have no active runs", async () => { const request = vi.fn(async (method: string, _payload?: unknown) => { if (method === "sessions.list") { return {
sessions: [
row("agent:main:subagent:one", { spawnedBy: "agent:main:main" }),
row("agent:main:subagent:two", { spawnedBy: "agent:main:main" }),
],
};
} if (method === "chat.abort") { return { ok: true, aborted: false };
} thrownew Error(`unexpected method: ${method}`);
});
const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:main", "kill", "all",
);
describe("executeSlashCommand /steer (soft inject)", () => {
it("injects into the current session via chat.send with deliver: false", async () => { const request = vi.fn(async (method: string, _payload?: unknown) => { if (method === "sessions.list") { return { sessions: [row("agent:main:main", { status: "running" })] };
} if (method === "chat.send") { return { status: "started", runId: "run-1", messageSeq: 2 };
} thrownew Error(`unexpected method: ${method}`);
});
const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:main", "steer", "try a different approach",
);
expect(result.content).toBe("Steered.");
expect(request).toHaveBeenCalledWith( "chat.send",
expect.objectContaining({
sessionKey: "agent:main:main",
message: "try a different approach",
deliver: false,
}),
);
});
it("injects into a matching subagent when the first word resolves to one", async () => { const request = vi.fn(async (method: string, _payload?: unknown) => { if (method === "sessions.list") { return {
sessions: [
row("agent:main:main"),
row("agent:main:subagent:researcher", {
spawnedBy: "agent:main:main",
status: "running",
}),
],
};
} if (method === "chat.send") { return { status: "started", runId: "run-2", messageSeq: 1 };
} thrownew Error(`unexpected method: ${method}`);
});
const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:main", "steer", "researcher try a different approach",
);
expect(result.content).toBe("Steered `researcher`.");
expect(request).toHaveBeenCalledWith( "chat.send",
expect.objectContaining({
sessionKey: "agent:main:subagent:researcher",
message: "try a different approach",
deliver: false,
}),
);
});
const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:main", "steer", "agent:main:subagent:researcher try a different approach",
);
expect(result.content).toBe("Steered `agent:main:subagent:researcher`.");
expect(request).toHaveBeenCalledWith( "chat.send",
expect.objectContaining({
sessionKey: "agent:main:subagent:researcher",
message: "try a different approach",
deliver: false,
}),
);
});
it("keeps ended subagent targets so steer does not fall back to the current session", async () => { const request = vi.fn(async (method: string, _payload?: unknown) => { if (method === "sessions.list") { return {
sessions: [
row("agent:main:main", { status: "running" }),
row("agent:main:subagent:researcher", {
spawnedBy: "agent:main:main",
endedAt: Date.now() - 60_000,
}),
],
};
} if (method === "chat.send") { return { status: "started", runId: "run-5", messageSeq: 1 };
} thrownew Error(`unexpected method: ${method}`);
});
const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:main", "steer", "researcher try again",
);
expect(result.content).toBe("No active run matched `researcher`. Use `/redirect` instead.");
expect(request).toHaveBeenCalledWith("sessions.list", {});
expect(request).not.toHaveBeenCalledWith("chat.send", expect.anything());
});
it("returns a no-op summary when the current session has no active run", async () => { const request = vi.fn(async (method: string, _payload?: unknown) => { if (method === "sessions.list") { return { sessions: [row("agent:main:main", { status: "done", endedAt: Date.now() })] };
} thrownew Error(`unexpected method: ${method}`);
});
const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:main", "steer", "try again",
);
expect(result.content).toBe("No active run. Use the chat input or `/redirect` instead.");
expect(request).toHaveBeenCalledWith("sessions.list", {});
expect(request).not.toHaveBeenCalledWith("chat.send", expect.anything());
});
it("returns usage when no message is provided", async () => { const request = vi.fn();
const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:main", "steer", "",
);
const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:main", "redirect", "start over with a new plan",
);
expect(result.content).toBe("Redirected.");
expect(result.trackRunId).toBe("run-1");
expect(request).toHaveBeenCalledWith("sessions.steer", {
key: "agent:main:main",
message: "start over with a new plan",
});
});
it("redirects a matching subagent when the first word resolves to one", async () => { const request = vi.fn(async (method: string, _payload?: unknown) => { if (method === "sessions.list") { return {
sessions: [
row("agent:main:main"),
row("agent:main:subagent:researcher", { spawnedBy: "agent:main:main" }),
],
};
} if (method === "sessions.steer") { return { status: "started", runId: "run-2", messageSeq: 1 };
} thrownew Error(`unexpected method: ${method}`);
});
const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:main", "redirect", "researcher start over completely",
);
expect(result.content).toBe("Redirected `researcher`."); // Subagent redirect must NOT set trackRunId — the run belongs to a // different session so chat events would never clear chatRunId.
expect(result.trackRunId).toBeUndefined();
expect(request).toHaveBeenCalledWith("sessions.steer", {
key: "agent:main:subagent:researcher",
message: "start over completely",
});
});
it("redirects an ended subagent instead of falling back to the current session", async () => { const request = vi.fn(async (method: string, _payload?: unknown) => { if (method === "sessions.list") { return {
sessions: [
row("agent:main:main"),
row("agent:main:subagent:researcher", {
spawnedBy: "agent:main:main",
endedAt: Date.now() - 60_000,
}),
],
};
} if (method === "sessions.steer") { return { status: "started", runId: "run-3", messageSeq: 1 };
} thrownew Error(`unexpected method: ${method}`);
});
const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:main", "redirect", "researcher start over completely",
);
const result = await executeSlashCommand(
{ request } as unknown as GatewayBrowserClient, "agent:main:main", "redirect", "try again",
);
expect(result.content).toBe("Failed to redirect: Error: connection lost");
});
});
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.23Bemerkung:
(vorverarbeitet am 2026-06-06)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.