Reuse status dashboard message and simplify settings actions

This commit is contained in:
Eyejoker
2026-05-02 02:06:20 +09:00
committed by GitHub
parent 7576bcd3ff
commit 490ae7d324
8 changed files with 230 additions and 103 deletions

View File

@@ -52,7 +52,9 @@ import type { GroupQueue } from './group-queue.js';
import { logger } from './logger.js';
import { isWatchCiTask } from './task-watch-status.js';
import {
readDashboardStatusMessageId,
readStatusSnapshots,
writeDashboardStatusMessageId,
writeStatusSnapshot,
} from './status-dashboard.js';
import type {
@@ -169,6 +171,13 @@ export async function purgeDashboardChannel(
}
}
export function shouldPurgeDashboardChannelOnStart(args: {
purgeOnStart?: boolean;
storedMessageId: string | null;
}): boolean {
return args.purgeOnStart === true && !args.storedMessageId;
}
async function refreshChannelMeta(
opts: UnifiedDashboardOptions,
): Promise<void> {
@@ -708,8 +717,17 @@ export async function startUnifiedDashboard(
const isRenderer = opts.serviceAgentType === 'claude-code';
const statusJid = `dc:${opts.statusChannelId}`;
if (isRenderer) {
statusMessageId = readDashboardStatusMessageId(opts.statusChannelId);
}
if (isRenderer && opts.purgeOnStart) {
if (
isRenderer &&
shouldPurgeDashboardChannelOnStart({
purgeOnStart: opts.purgeOnStart,
storedMessageId: statusMessageId,
})
) {
await purgeDashboardChannel(opts);
}
@@ -746,15 +764,28 @@ export async function startUnifiedDashboard(
},
'Dashboard content empty, skipping render',
);
statusMessageId = null;
return;
}
if (statusMessageId && channel.editMessage) {
await channel.editMessage(statusJid, statusMessageId, content);
} else if (channel.sendAndTrack) {
try {
await channel.editMessage(statusJid, statusMessageId, content);
writeDashboardStatusMessageId(opts.statusChannelId, statusMessageId);
} catch (err) {
logger.warn(
{ err, messageId: statusMessageId },
'Dashboard status message edit failed; sending a fresh tracked message',
);
statusMessageId = null;
}
}
if (!statusMessageId && channel.sendAndTrack) {
const id = await channel.sendAndTrack(statusJid, content);
if (id) statusMessageId = id;
if (id) {
statusMessageId = id;
writeDashboardStatusMessageId(opts.statusChannelId, id);
}
}
if (!dashboardUpdateLogged) {
logger.info(