Merge pull request #586 from clawdbot/temp/landpr-492

fix(commands): wire /usage alias to /status
This commit is contained in:
Peter Steinberger
2026-01-09 16:14:11 +00:00
committed by GitHub
10 changed files with 34 additions and 5 deletions

View File

@@ -44,6 +44,8 @@ describe("control command parsing", () => {
expect(hasControlCommand("help")).toBe(false);
expect(hasControlCommand("/status")).toBe(true);
expect(hasControlCommand("/status:")).toBe(true);
expect(hasControlCommand("/usage")).toBe(true);
expect(hasControlCommand("/usage:")).toBe(true);
expect(hasControlCommand("status")).toBe(false);
});

View File

@@ -24,6 +24,8 @@ describe("commands registry", () => {
expect(detection.exact.has("/help")).toBe(true);
expect(detection.regex.test("/status")).toBe(true);
expect(detection.regex.test("/status:")).toBe(true);
expect(detection.regex.test("/usage")).toBe(true);
expect(detection.regex.test("/usage:")).toBe(true);
expect(detection.regex.test("/stop")).toBe(true);
expect(detection.regex.test("/send:")).toBe(true);
expect(detection.regex.test("/debug set foo=bar")).toBe(true);

View File

@@ -25,7 +25,7 @@ const CHAT_COMMANDS: ChatCommandDefinition[] = [
key: "status",
nativeName: "status",
description: "Show current status.",
textAliases: ["/status"],
textAliases: ["/status", "/usage"],
},
{
key: "debug",

View File

@@ -144,6 +144,12 @@ describe("directive parsing", () => {
expect(res.cleaned).toBe("thats not /tmp/hello");
});
it("preserves spacing when stripping usage directives before paths", () => {
const res = extractStatusDirective("thats not /usage:/tmp/hello");
expect(res.hasDirective).toBe(true);
expect(res.cleaned).toBe("thats not /tmp/hello");
});
it("parses queue options and modes", () => {
const res = extractQueueDirective(
"please /queue steer+backlog debounce:2s cap:5 drop:summarize now",

View File

@@ -242,6 +242,23 @@ describe("trigger handling", () => {
});
});
it("reports status via /usage without invoking the agent", async () => {
await withTempHome(async (home) => {
const res = await getReplyFromConfig(
{
Body: "/usage",
From: "+1002",
To: "+2000",
},
{},
makeCfg(home),
);
const text = Array.isArray(res) ? res[0]?.text : res?.text;
expect(text).toContain("ClawdBot");
expect(runEmbeddedPiAgent).not.toHaveBeenCalled();
});
});
it("reports active auth profile and key snippet in status", async () => {
await withTempHome(async (home) => {
const cfg = makeCfg(home);

View File

@@ -594,7 +594,8 @@ export async function handleCommands(params: {
const statusRequested =
directives.hasStatusDirective ||
command.commandBodyNormalized === "/status";
command.commandBodyNormalized === "/status" ||
command.commandBodyNormalized === "/usage";
if (allowTextCommands && statusRequested) {
const reply = await buildStatusReply({
cfg,

View File

@@ -170,7 +170,7 @@ export function extractStatusDirective(body?: string): {
hasDirective: boolean;
} {
if (!body) return { cleaned: "", hasDirective: false };
return extractSimpleDirective(body, ["status"]);
return extractSimpleDirective(body, ["status", "usage"]);
}
export type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel };