






















@@ -469,67 +469,96 @@ describe("handleSendChat", () => {
469469expect(host.refreshSessionsAfterChat.size).toBe(0);
470470});
471471472-it("sends button-triggered /new resets after confirmation", async () => {
472+it("runs the fresh-session action for confirmed /new overrides", async () => {
473473const confirm = vi.fn(() => true);
474474vi.stubGlobal("confirm", confirm);
475475const request = vi.fn(async (method: string) => {
476-if (method === "chat.send") {
477-return { status: "started" };
478-}
479476throw new Error(`Unexpected request: ${method}`);
480477});
478+const onSlashAction = vi.fn();
481479const host = makeHost({
482480client: { request } as unknown as ChatHost["client"],
483481chatMessage: "restore me",
484482sessionKey: "agent:main",
483+ onSlashAction,
485484});
486485487486await handleSendChat(host, "/new", { confirmReset: true, restoreDraft: true });
488487489488expect(confirm).toHaveBeenCalledTimes(1);
489+expect(request).not.toHaveBeenCalled();
490+expect(onSlashAction).toHaveBeenCalledWith("new-session");
491+expect(host.chatMessage).toBe("restore me");
492+expect(host.refreshSessionsAfterChat.size).toBe(0);
493+});
494+495+it("routes typed /new through the fresh-session action without confirmation", async () => {
496+const confirm = vi.fn(() => false);
497+vi.stubGlobal("confirm", confirm);
498+const request = vi.fn(async (method: string) => {
499+throw new Error(`Unexpected request: ${method}`);
500+});
501+const onSlashAction = vi.fn();
502+const host = makeHost({
503+client: { request } as unknown as ChatHost["client"],
504+chatMessage: "/new",
505+sessionKey: "agent:main",
506+ onSlashAction,
507+});
508+509+await handleSendChat(host);
510+511+expect(confirm).not.toHaveBeenCalled();
512+expect(request).not.toHaveBeenCalled();
513+expect(onSlashAction).toHaveBeenCalledWith("new-session");
514+expect(host.chatMessage).toBe("");
515+});
516+517+it("does not queue typed /new behind an active run", async () => {
518+const onSlashAction = vi.fn();
519+const host = makeHost({
520+chatMessage: "/new",
521+chatRunId: "run-main",
522+chatStream: "Working...",
523+ onSlashAction,
524+});
525+526+await handleSendChat(host);
527+528+expect(onSlashAction).toHaveBeenCalledWith("new-session");
529+expect(host.chatQueue).toEqual([]);
530+expect(host.chatRunId).toBe("run-main");
531+expect(host.chatStream).toBe("Working...");
532+expect(host.chatMessage).toBe("");
533+});
534+535+it("preserves typed /reset command dispatch without confirmation", async () => {
536+const confirm = vi.fn(() => false);
537+vi.stubGlobal("confirm", confirm);
538+const request = vi.fn(async (method: string) => {
539+if (method === "chat.send") {
540+return { status: "started" };
541+}
542+throw new Error(`Unexpected request: ${method}`);
543+});
544+const host = makeHost({
545+client: { request } as unknown as ChatHost["client"],
546+chatMessage: "/reset",
547+sessionKey: "agent:main",
548+});
549+550+await handleSendChat(host);
551+552+expect(confirm).not.toHaveBeenCalled();
490553expect(request).toHaveBeenCalledWith(
491554"chat.send",
492555expect.objectContaining({
493556sessionKey: "agent:main",
494-message: "/new",
495-deliver: false,
496-idempotencyKey: expect.any(String),
557+message: "/reset",
497558}),
498559);
499-expect(host.chatMessage).toBe("restore me");
500-expect(host.refreshSessionsAfterChat).toContain(host.chatRunId);
501-});
502-503-it.each(["/new", "/reset"])(
504-"preserves typed %s command dispatch without confirmation",
505-async (command) => {
506-const confirm = vi.fn(() => false);
507-vi.stubGlobal("confirm", confirm);
508-const request = vi.fn(async (method: string) => {
509-if (method === "chat.send") {
510-return { status: "started" };
511-}
512-throw new Error(`Unexpected request: ${method}`);
513-});
514-const host = makeHost({
515-client: { request } as unknown as ChatHost["client"],
516-chatMessage: command,
517-sessionKey: "agent:main",
518-});
519-520-await handleSendChat(host);
521-522-expect(confirm).not.toHaveBeenCalled();
523-expect(request).toHaveBeenCalledWith(
524-"chat.send",
525-expect.objectContaining({
526-sessionKey: "agent:main",
527-message: command,
528-}),
529-);
530-expect(host.chatMessage).toBe("");
531-},
532-);
560+expect(host.chatMessage).toBe("");
561+});
533562534563it("keeps slash-command model changes in sync with the chat header cache", async () => {
535564vi.stubGlobal(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。