Catch up on replies missed while the app was in the background

The reply catch-up read the page's stale face, so after an interim
message it stopped while the thinking row stayed up. It now reads the
live face, checks at once when the page comes back into view or online,
and replays the bot's face and task too, so a reply that ended silently
can't leave the bot working on screen.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-28 04:14:13 +01:00
co-authored by Claude Opus 5.5
parent 4061a317bc
commit e51f2aa9a4
5 changed files with 74 additions and 25 deletions
+10 -1
View File
@@ -28,7 +28,7 @@ import type { WebsocketRooms } from "../dict/websocket-rooms";
import type { LucideIcon } from "lucide-react";
import type { ServerQueryParam } from "@moduletrace/bun-sqlite";
import type { MediaParadigms, MediaTypes } from "../dict/media-dict";
import type { BunextPageModuleServerReturnURLObject } from "@moduletrace/bunext/types";
import type { APIResponseObject, BunextPageModuleServerReturnURLObject } from "@moduletrace/bunext/types";
import type { BUN_SQLITE_COBBLE_USERS_JOIN } from "./sql-joins";
import type { ImageInputToBase64FunctionReturn } from "@moduletrace/twui/utils/form/imageInputToBase64";
import type { HarnessKind } from "../dict/harness-dict";
@@ -477,6 +477,15 @@ export type BotUpdatedData = {
admin_workspace_ids?: number[];
};
/**
* `api/admin/bots/session-messages`: the session's latest messages, and
* the bot as the session's user sees it now (face, status line, active
* task), so a conversation that missed pushes catches up on both.
*/
export type SessionMessagesResponse = APIResponseObject<BotMessageWithAttachments> & {
bot?: BotUpdatedData | null;
};
/**
* `server:workspace-updated` data: a workspace's picture changed, so the
* rail and its header show the new one.