diff --git a/apps/desktop/src/renderer/features/todo-agent/ClaudeRuntimePicker/claudeRuntimeOptions.ts b/apps/desktop/src/renderer/features/todo-agent/ClaudeRuntimePicker/claudeRuntimeOptions.ts index 36dd7e975fd..dde60d3089c 100644 --- a/apps/desktop/src/renderer/features/todo-agent/ClaudeRuntimePicker/claudeRuntimeOptions.ts +++ b/apps/desktop/src/renderer/features/todo-agent/ClaudeRuntimePicker/claudeRuntimeOptions.ts @@ -161,3 +161,44 @@ export function fromPersistedEffort( ); return DEFAULT_SENTINEL; } + +/** + * Resolve a DB-persisted model/effort value to the human-readable label + * the picker shows. Used by read-only views (session detail, schedule + * list) so the label matches what the user originally selected. + * + * null/undefined → "デフォルト" (matches the sentinel's label). + * Unknown values (persisted from an older build with a wider allowed set) + * surface the raw string so detail views don't silently lie about what is + * actually configured — we fall back to `fromPersisted*` only for the + * `DEFAULT_SENTINEL` case. + */ +export function getClaudeModelLabel( + persisted: string | null | undefined, +): string { + if (persisted == null) { + return ( + CLAUDE_MODEL_SELECT_OPTIONS.find((o) => o.value === DEFAULT_SENTINEL) + ?.label ?? "デフォルト" + ); + } + return ( + CLAUDE_MODEL_SELECT_OPTIONS.find((o) => o.value === persisted)?.label ?? + persisted + ); +} + +export function getClaudeEffortLabel( + persisted: string | null | undefined, +): string { + if (persisted == null) { + return ( + CLAUDE_EFFORT_SELECT_OPTIONS.find((o) => o.value === DEFAULT_SENTINEL) + ?.label ?? "デフォルト" + ); + } + return ( + CLAUDE_EFFORT_SELECT_OPTIONS.find((o) => o.value === persisted)?.label ?? + persisted + ); +} diff --git a/apps/desktop/src/renderer/features/todo-agent/ClaudeRuntimePicker/index.ts b/apps/desktop/src/renderer/features/todo-agent/ClaudeRuntimePicker/index.ts index b6ca323e93b..9ad5c2da787 100644 --- a/apps/desktop/src/renderer/features/todo-agent/ClaudeRuntimePicker/index.ts +++ b/apps/desktop/src/renderer/features/todo-agent/ClaudeRuntimePicker/index.ts @@ -7,6 +7,8 @@ export { DEFAULT_SENTINEL, fromPersistedEffort, fromPersistedModel, + getClaudeEffortLabel, + getClaudeModelLabel, toPersistedEffort, toPersistedModel, } from "./claudeRuntimeOptions"; diff --git a/apps/desktop/src/renderer/features/todo-agent/TodoManager/SchedulesSection/components/ScheduleListRow/ScheduleListRow.tsx b/apps/desktop/src/renderer/features/todo-agent/TodoManager/SchedulesSection/components/ScheduleListRow/ScheduleListRow.tsx index 765337d9cd9..272da70e729 100644 --- a/apps/desktop/src/renderer/features/todo-agent/TodoManager/SchedulesSection/components/ScheduleListRow/ScheduleListRow.tsx +++ b/apps/desktop/src/renderer/features/todo-agent/TodoManager/SchedulesSection/components/ScheduleListRow/ScheduleListRow.tsx @@ -14,6 +14,10 @@ import { HiMiniPencil, HiMiniTrash, } from "react-icons/hi2"; +import { + getClaudeEffortLabel, + getClaudeModelLabel, +} from "renderer/features/todo-agent/ClaudeRuntimePicker"; import { electronTrpc } from "renderer/lib/electron-trpc"; import { describeSchedule } from "../../utils/describeSchedule"; import { formatNextRun } from "../../utils/formatNextRun"; @@ -87,6 +91,10 @@ export function ScheduleListRow({ {workspaceName ? ` / ${workspaceName}` : " / main"} +
+ モデル: {getClaudeModelLabel(schedule.claudeModel)} + effort: {getClaudeEffortLabel(schedule.claudeEffort)} +
{schedule.lastRunAt && (
最終: {new Date(schedule.lastRunAt).toLocaleString("ja-JP")} diff --git a/apps/desktop/src/renderer/features/todo-agent/TodoManager/TodoManager.tsx b/apps/desktop/src/renderer/features/todo-agent/TodoManager/TodoManager.tsx index 3e4871a7d59..3b3313b83ec 100644 --- a/apps/desktop/src/renderer/features/todo-agent/TodoManager/TodoManager.tsx +++ b/apps/desktop/src/renderer/features/todo-agent/TodoManager/TodoManager.tsx @@ -75,6 +75,8 @@ import { DEFAULT_SENTINEL, fromPersistedEffort, fromPersistedModel, + getClaudeEffortLabel, + getClaudeModelLabel, toPersistedEffort, toPersistedModel, } from "../ClaudeRuntimePicker"; @@ -1523,6 +1525,19 @@ function SessionDetail({ session, onDeleted }: SessionDetailProps) {
+
+ +
+ {getClaudeModelLabel(session.claudeModel)} +
+
+ +
+ {getClaudeEffortLabel(session.claudeEffort)} +
+
+
+ {(session.totalCostUsd != null || session.totalNumTurns != null) && (