




























@@ -9,6 +9,7 @@ vi.mock("./slash-commands.runtime.js", () => {
99const reportLongCommand = { key: "reportlong", nativeName: "reportlong" };
1010const reportLongButtonCommand = { key: "reportlongbutton", nativeName: "reportlongbutton" };
1111const unsafeConfirmCommand = { key: "unsafeconfirm", nativeName: "unsafeconfirm" };
12+const longConfirmCommand = { key: "longconfirm", nativeName: "longconfirm" };
1213const statusAliasCommand = { key: "status", nativeName: "status" };
1314const periodArg = { name: "period", description: "period" };
1415const baseReportPeriodChoices = [
@@ -78,6 +79,9 @@ vi.mock("./slash-commands.runtime.js", () => {
7879if (normalized === "unsafeconfirm") {
7980return unsafeConfirmCommand;
8081}
82+if (normalized === "longconfirm") {
83+return longConfirmCommand;
84+}
8185if (normalized === "agentstatus") {
8286return statusAliasCommand;
8387}
@@ -126,6 +130,12 @@ vi.mock("./slash-commands.runtime.js", () => {
126130acceptsArgs: true,
127131args: [],
128132},
133+{
134+name: "longconfirm",
135+description: "LongConfirm",
136+acceptsArgs: true,
137+args: [],
138+},
129139{
130140name: "agentstatus",
131141description: "Status",
@@ -179,6 +189,15 @@ vi.mock("./slash-commands.runtime.js", () => {
179189],
180190};
181191}
192+if (params.command?.key === "longconfirm") {
193+return {
194+arg: { name: `mode_${"x".repeat(320)}`, description: "mode" },
195+choices: [
196+{ value: "on", label: "on" },
197+{ value: "off", label: "off" },
198+],
199+};
200+}
182201if (params.command?.key !== "usage") {
183202return null;
184203}
@@ -428,6 +447,7 @@ describe("Slack native command argument menus", () => {
428447let reportLongHandler: (args: unknown) => Promise<void>;
429448let reportLongButtonHandler: (args: unknown) => Promise<void>;
430449let unsafeConfirmHandler: (args: unknown) => Promise<void>;
450+let longConfirmHandler: (args: unknown) => Promise<void>;
431451let agentStatusHandler: (args: unknown) => Promise<void>;
432452let argMenuHandler: (args: unknown) => Promise<void>;
433453let argMenuOptionsHandler: (args: unknown) => Promise<void>;
@@ -446,6 +466,7 @@ describe("Slack native command argument menus", () => {
446466"/reportlongbutton",
447467);
448468unsafeConfirmHandler = requireHandler(harness.commands, "/unsafeconfirm", "/unsafeconfirm");
469+longConfirmHandler = requireHandler(harness.commands, "/longconfirm", "/longconfirm");
449470agentStatusHandler = requireHandler(harness.commands, "/agentstatus", "/agentstatus");
450471argMenuHandler = requireHandler(harness.actions, /^openclaw_cmdarg/, "arg-menu action");
451472argMenuOptionsHandler = requireHandler(harness.options, "openclaw_cmdarg", "arg-menu options");
@@ -596,6 +617,16 @@ describe("Slack native command argument menus", () => {
596617);
597618});
598619620+it("truncates confirm dialog text when long args force button fallback", async () => {
621+const element = (await getFirstActionElementFromCommand(longConfirmHandler)) as
622+| { type?: string; confirm?: { text?: { text?: string } } }
623+| undefined;
624+const confirmText = element?.confirm?.text?.text;
625+expect(element?.type).toBe("button");
626+expect(confirmText).toHaveLength(300);
627+expect(confirmText?.endsWith("…")).toBe(true);
628+});
629+599630it("dispatches the command when a menu button is clicked", async () => {
600631await runArgMenuAction(argMenuHandler, {
601632action: {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。