diff --git a/apps/api/src/thread-target.test.ts b/apps/api/src/thread-target.test.ts index c7d6b7c..326848a 100644 --- a/apps/api/src/thread-target.test.ts +++ b/apps/api/src/thread-target.test.ts @@ -2144,9 +2144,7 @@ describe("stopThreadRuns", () => { updateMany: vi.fn().mockResolvedValue({ count: 1 }), }, run: { - updateManyAndReturn: vi - .fn() - .mockResolvedValue([{ id: "run-old", taskId: "task-old" }]), + updateManyAndReturn: vi.fn().mockResolvedValue([{ id: "run-old", taskId: "task-old" }]), create: vi.fn().mockResolvedValue({ id: "run-new", status: "queued" }), }, task: { @@ -2230,4 +2228,3 @@ describe("stopThreadRuns", () => { expect(events.notify).toHaveBeenCalledWith("thread-1", 42); }); }); - diff --git a/apps/api/src/thread-target.ts b/apps/api/src/thread-target.ts index 326fa1d..1efc9d4 100644 --- a/apps/api/src/thread-target.ts +++ b/apps/api/src/thread-target.ts @@ -1424,9 +1424,7 @@ export async function sendQueuedThreadMessagesNow( status: "queued", }, }); - const runCreatedAt = new Date( - Math.max(Date.now(), last.message.createdAt.getTime() + 1), - ); + const runCreatedAt = new Date(Math.max(Date.now(), last.message.createdAt.getTime() + 1)); const run = await tx.run.create({ data: { spaceId: actor.spaceId, diff --git a/apps/mobile/app/thread.tsx b/apps/mobile/app/thread.tsx index 511c88d..c4e2f5a 100644 --- a/apps/mobile/app/thread.tsx +++ b/apps/mobile/app/thread.tsx @@ -1660,9 +1660,7 @@ function Thread() { marginTop: 4, }} > - - {t("Queued")} - + {t("Queued")} (await calls()).at(-1)?.[0]).toBe("show"); - await browser.getByRole("button", { name: "Close panel" }).click(); + await page.getByTestId("side-panel").getByRole("button", { name: "Close panel" }).click(); await expect.poll(async () => (await calls()).at(-1)?.[0]).toBe("hide"); }); diff --git a/apps/web/e2e/unterhaltungen-sidebar.spec.ts b/apps/web/e2e/unterhaltungen-sidebar.spec.ts index a4154d0..e9e7a59 100644 --- a/apps/web/e2e/unterhaltungen-sidebar.spec.ts +++ b/apps/web/e2e/unterhaltungen-sidebar.spec.ts @@ -47,14 +47,14 @@ test("conversations and projects stay separate; + opens bot picker", async ({ pa await expect(projekte.getByText("Side project", { exact: true })).toBeVisible(); await expect(unterhaltungenOnly(page).getByText("Side project", { exact: true })).toHaveCount(0); - // The main agent leads the picker, even after other bots exist. + // The new project's main agent leads the picker, even after other bots exist. await unterhaltungen.getByTestId("conversation-picker-trigger").click(); await expect( page .getByTestId("conversation-bot-picker") .locator("[data-testid^='conversation-picker-bot-']") .first(), - ).toHaveText("Chief"); + ).toHaveText("Projektmanager"); await page.keyboard.press("Escape"); // Creating a project that already exists opens it instead of listing it twice. diff --git a/apps/web/src/pages/shell/project-overview.tsx b/apps/web/src/pages/shell/project-overview.tsx index 611c81f..2683491 100644 --- a/apps/web/src/pages/shell/project-overview.tsx +++ b/apps/web/src/pages/shell/project-overview.tsx @@ -466,7 +466,7 @@ export function AgentOverview({ onClick={onAddRoutine} className="gap-1 text-ui-label" > - + Routine ) : null} diff --git a/packages/contracts/src/rpc.ts b/packages/contracts/src/rpc.ts index 34302e1..e9cd17b 100644 --- a/packages/contracts/src/rpc.ts +++ b/packages/contracts/src/rpc.ts @@ -509,14 +509,12 @@ export const appContract = { ) .output(z.object({ ok: z.literal(true) })), stop: oc.input(threadTarget).output(z.object({ ok: z.literal(true) })), - sendNow: oc - .input(threadTarget.safeExtend({ messageId: Id.optional() })) - .output( - z.object({ - ok: z.literal(true), - runIds: z.array(Id), - }), - ), + sendNow: oc.input(threadTarget.safeExtend({ messageId: Id.optional() })).output( + z.object({ + ok: z.literal(true), + runIds: z.array(Id), + }), + ), followUp: oc .input(threadTarget.safeExtend({ text: z.string().min(1) })) .output(z.object({ ok: z.literal(true) })),