diff --git a/apps/dashboard/src/App.tsx b/apps/dashboard/src/App.tsx
index 1380aeb..a8cc36a 100644
--- a/apps/dashboard/src/App.tsx
+++ b/apps/dashboard/src/App.tsx
@@ -1315,103 +1315,138 @@ function RoomActivityPanel({
const task = activity.pairedTask;
const turn = task?.currentTurn ?? null;
const outputs = task?.outputs ?? [];
+ const latestOutput = outputs.at(-1) ?? null;
+ const progressText = turn
+ ? `${turn.role} · ${turn.intentKind} · ${t.rooms.attempt} ${turn.attemptNo}`
+ : t.rooms.noTurn;
return (
-
-
- {t.rooms.task}
- {task?.title || task?.id || t.rooms.noTask}
-
-
- {t.rooms.currentTurn}
-
- {turn
- ? `${turn.role} · ${t.rooms.attempt} ${turn.attemptNo}`
- : t.rooms.noTurn}
-
-
-
- {t.rooms.round}
- {task ? task.roundTripCount : '-'}
-
-
- {t.rooms.updated}
-
- {formatDate(turn?.updatedAt ?? task?.updatedAt, locale)}
-
-
-
-
- {turn ? (
-
+
+ {turn ? (
{statusLabel(turn.state, t)}
- {turn.intentKind}
- {turn.executorServiceId ? (
- {turn.executorServiceId}
- ) : null}
- {turn.activeRunId ? (
- {turn.activeRunId}
- ) : null}
-
- ) : null}
-
- {turn?.lastError ? (
-
{turn.lastError}
- ) : null}
-
-
-
- {t.rooms.output}
- {outputs.length === 0 ? (
- {t.rooms.noOutput}
- ) : (
-
- {[...outputs].reverse().map((output) => (
-
-
-
- #{output.turnNumber} · {output.role}
- {output.verdict ? ` · ${output.verdict}` : ''}
-
-
-
- {output.outputText}
-
- ))}
-
- )}
-
-
- {t.rooms.recentMessages}
- {activity.messages.length === 0 ? (
- {t.rooms.noMessages}
- ) : (
-
- {activity.messages.map((message) => (
-
-
- {message.senderName}
-
-
- {message.content}
-
- ))}
-
- )}
-
+ ) : (
+
{t.rooms.noTurn}
+ )}
+
{progressText}
+
{task ? `${t.rooms.round} ${task.roundTripCount}` : '-'}
+ {turn?.executorServiceId ?
{turn.executorServiceId} : null}
+
+
+
+
+ {t.rooms.latestOutput}
+ {latestOutput ? (
+
+ #{latestOutput.turnNumber} · {latestOutput.role}
+ {latestOutput.verdict ? ` · ${latestOutput.verdict}` : ''}
+
+ ) : null}
+
+ {latestOutput ? (
+ {latestOutput.outputText}
+ ) : (
+ {t.rooms.noOutput}
+ )}
+
+
+
+ {t.rooms.details}
+
+
+ {t.rooms.task}
+
+ {task?.title || task?.id || t.rooms.noTask}
+
+
+ {turn?.activeRunId ? (
+ {turn.activeRunId}
+ ) : null}
+ {turn?.lastError ? (
+ {turn.lastError}
+ ) : null}
+
+
+
+ {t.rooms.outputHistory}
+ {outputs.length === 0 ? (
+ {t.rooms.noOutput}
+ ) : (
+
+ {[...outputs].reverse().map((output) => (
+
+
+
+ #{output.turnNumber} · {output.role}
+ {output.verdict ? ` · ${output.verdict}` : ''}
+
+
+
+ {output.outputText}
+
+ ))}
+
+ )}
+
+
+ {t.rooms.messageHistory}
+ {activity.messages.length === 0 ? (
+ {t.rooms.noMessages}
+ ) : (
+
+ {activity.messages.map((message) => (
+
+
+ {message.senderName}
+
+
+ {message.content}
+
+ ))}
+
+ )}
+
+
+
);
}
+function RoomComposeDetails({
+ busy,
+ onChange,
+ onSubmit,
+ t,
+ value,
+}: {
+ busy: boolean;
+ onChange: (value: string) => void;
+ onSubmit: () => void;
+ t: Messages;
+ value: string;
+}) {
+ return (
+
+ {t.rooms.message}
+
+
+ );
+}
+
function RoomPanel({
onSendRoomMessage,
roomActivity,
@@ -1502,8 +1537,8 @@ function RoomPanel({
t={t}
/>
-
-
+ setDraft(entry.jid, value)}
onSubmit={() => void submitRoomMessage(entry.jid)}
@@ -1550,7 +1585,7 @@ function RoomPanel({
locale={locale}
t={t}
/>
- setDraft(entry.jid, value)}
onSubmit={() => void submitRoomMessage(entry.jid)}
diff --git a/apps/dashboard/src/i18n.ts b/apps/dashboard/src/i18n.ts
index b1c8df4..0c9fab8 100644
--- a/apps/dashboard/src/i18n.ts
+++ b/apps/dashboard/src/i18n.ts
@@ -158,8 +158,11 @@ export interface Messages {
attempt: string;
updated: string;
output: string;
+ latestOutput: string;
+ outputHistory: string;
noOutput: string;
recentMessages: string;
+ messageHistory: string;
noMessages: string;
details: string;
message: string;
@@ -446,8 +449,11 @@ export const messages = {
attempt: '시도',
updated: '갱신',
output: '출력',
+ latestOutput: '마지막 출력',
+ outputHistory: '출력 기록',
noOutput: '출력 없음',
- recentMessages: '최근 메시지',
+ recentMessages: '메시지 기록',
+ messageHistory: '메시지 기록',
noMessages: '메시지 없음',
details: '세부',
message: 'Message',
@@ -718,8 +724,11 @@ export const messages = {
attempt: 'attempt',
updated: 'updated',
output: 'output',
+ latestOutput: 'latest output',
+ outputHistory: 'output log',
noOutput: 'No output',
- recentMessages: 'Recent messages',
+ recentMessages: 'Message log',
+ messageHistory: 'Message log',
noMessages: 'No messages',
details: 'details',
message: 'message',
@@ -990,8 +999,11 @@ export const messages = {
attempt: '尝试',
updated: '更新',
output: '输出',
+ latestOutput: '最新输出',
+ outputHistory: '输出记录',
noOutput: '暂无输出',
- recentMessages: '最近消息',
+ recentMessages: '消息记录',
+ messageHistory: '消息记录',
noMessages: '暂无消息',
details: '详情',
message: 'Message',
@@ -1262,8 +1274,11 @@ export const messages = {
attempt: '試行',
updated: '更新',
output: '出力',
+ latestOutput: '最新出力',
+ outputHistory: '出力履歴',
noOutput: '出力なし',
- recentMessages: '最近のメッセージ',
+ recentMessages: 'メッセージ履歴',
+ messageHistory: 'メッセージ履歴',
noMessages: 'メッセージなし',
details: '詳細',
message: 'Message',
diff --git a/apps/dashboard/src/styles.css b/apps/dashboard/src/styles.css
index d4f8e82..53ab875 100644
--- a/apps/dashboard/src/styles.css
+++ b/apps/dashboard/src/styles.css
@@ -1328,16 +1328,16 @@ progress::-moz-progress-bar {
}
.room-activity-cell {
- min-width: 360px;
+ min-width: 300px;
}
.room-activity {
display: grid;
- min-width: min(360px, 100%);
- gap: 9px;
- padding: 10px;
+ min-width: min(300px, 100%);
+ gap: 7px;
+ padding: 8px;
border: 1px solid rgba(43, 55, 38, 0.1);
- border-radius: 18px;
+ border-radius: 15px;
background: rgba(255, 250, 240, 0.58);
}
@@ -1348,38 +1348,28 @@ progress::-moz-progress-bar {
font-weight: 800;
}
-.room-activity-grid {
+.room-progress-strip {
display: grid;
- grid-template-columns: repeat(4, minmax(0, 1fr));
- gap: 7px;
-}
-
-.room-activity-grid > span {
+ grid-template-columns: auto minmax(96px, 1fr) auto auto auto;
+ gap: 6px;
+ align-items: center;
min-width: 0;
- padding: 8px;
- border-radius: 13px;
- background: rgba(43, 55, 38, 0.045);
+ color: var(--muted);
+ font-size: 11px;
+ font-weight: 850;
}
-.room-activity-grid small,
-.room-activity-grid strong {
- display: block;
+.room-progress-strip strong,
+.room-progress-strip span,
+.room-progress-strip time {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
-.room-activity-grid small {
- color: var(--muted);
- font-size: 10px;
- font-weight: 850;
- letter-spacing: 0.04em;
- text-transform: uppercase;
-}
-
-.room-activity-grid strong {
- margin-top: 3px;
+.room-progress-strip strong {
+ color: var(--ink);
font-size: 12px;
}
@@ -1398,33 +1388,85 @@ progress::-moz-progress-bar {
}
.room-activity-error {
- margin: 0;
color: #7c2518;
font-size: 12px;
font-weight: 850;
overflow-wrap: anywhere;
}
-.room-activity-columns {
- display: grid;
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
- gap: 9px;
-}
-
-.room-activity-columns > section {
+.room-latest-output {
display: grid;
+ gap: 4px;
min-width: 0;
- align-content: start;
- gap: 7px;
+ padding: 8px;
+ border-radius: 12px;
+ background: rgba(43, 55, 38, 0.045);
}
-.room-activity-columns > section > strong {
+.room-latest-output header {
+ display: flex;
+ gap: 8px;
+ align-items: baseline;
+ justify-content: space-between;
+ color: var(--muted);
+ font-size: 11px;
+ font-weight: 850;
+}
+
+.room-latest-output strong,
+.room-detail-grid > section > strong {
color: var(--bg-ink);
font-size: 12px;
letter-spacing: 0.06em;
text-transform: uppercase;
}
+.room-latest-output header span,
+.room-latest-output p {
+ min-width: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.room-latest-output p {
+ display: -webkit-box;
+ margin: 0;
+ color: var(--ink);
+ font-size: 12px;
+ line-height: 1.32;
+ overflow-wrap: anywhere;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+}
+
+.room-activity-details,
+.room-compose-details {
+ min-width: 0;
+}
+
+.room-activity-details > summary,
+.room-compose-details > summary {
+ min-height: 32px;
+ color: var(--accent);
+ font-size: 12px;
+ font-weight: 900;
+ cursor: pointer;
+}
+
+.room-detail-grid {
+ display: grid;
+ gap: 8px;
+ min-width: 0;
+ padding-top: 6px;
+}
+
+.room-detail-grid > section {
+ display: grid;
+ min-width: 0;
+ align-content: start;
+ gap: 7px;
+}
+
.room-output-list,
.room-message-list {
display: grid;
@@ -1486,6 +1528,14 @@ progress::-moz-progress-bar {
-webkit-line-clamp: 4;
}
+.room-message-cell {
+ width: 150px;
+}
+
+.room-compose-details .room-compose {
+ margin-top: 6px;
+}
+
.task-board {
display: grid;
gap: 12px;
@@ -2165,9 +2215,13 @@ progress::-moz-progress-bar {
min-width: 0;
}
- .room-activity-grid,
- .room-activity-columns {
- grid-template-columns: 1fr;
+ .room-progress-strip {
+ grid-template-columns: auto minmax(0, 1fr) auto;
+ }
+
+ .room-progress-strip span:nth-of-type(n + 3),
+ .room-progress-strip time {
+ display: none;
}
.inbox-summary,
|