P3-C: badges de session live sur le dashboard (résolus depuis le store sessions)
Les badges busy/waiting/idle des sessions affichées dans les cartes worktree sont désormais résolus depuis le store des sessions (mis à jour en temps réel), au lieu de l'instantané embarqué dans le worktree — pour que « quelle session attend une réponse » reste live sans attendre un worktree_update. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
:to="{ name: 'session', params: { id: s.id } }"
|
||||
class="flex items-center gap-1 rounded bg-zinc-800/60 px-1.5 py-0.5 transition-colors hover:bg-zinc-800"
|
||||
>
|
||||
<SessionStateBadge :session="s" />
|
||||
<SessionStateBadge :session="liveSession(s)" />
|
||||
<span class="font-mono text-[11px] text-zinc-400">{{ s.command }}</span>
|
||||
</RouterLink>
|
||||
<span v-if="worktree.sessions.length === 0" class="text-xs text-zinc-600">{{ t('worktrees.noSession') }}</span>
|
||||
@@ -43,14 +43,22 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import type { WorktreeSummary } from '@arboretum/shared';
|
||||
import type { SessionSummary, WorktreeSummary } from '@arboretum/shared';
|
||||
import { useWorktreesStore } from '../stores/worktrees';
|
||||
import { useSessionsStore } from '../stores/sessions';
|
||||
import { ApiError } from '../lib/api';
|
||||
import SessionStateBadge from './SessionStateBadge.vue';
|
||||
|
||||
const props = defineProps<{ worktree: WorktreeSummary }>();
|
||||
const { t } = useI18n();
|
||||
const store = useWorktreesStore();
|
||||
const sessions = useSessionsStore();
|
||||
|
||||
// L'état embarqué dans le worktree est un instantané ; on privilégie la version live du store
|
||||
// des sessions (mise à jour en continu) pour que busy/waiting/idle reste temps réel.
|
||||
function liveSession(s: SessionSummary): SessionSummary {
|
||||
return sessions.sessions.find((x) => x.id === s.id) ?? s;
|
||||
}
|
||||
|
||||
const confirming = ref(false);
|
||||
const forceNeeded = ref(false);
|
||||
|
||||
@@ -55,8 +55,9 @@ const addError = ref<string | null>(null);
|
||||
onMounted(() => {
|
||||
void store.fetchAll();
|
||||
store.startRealtime();
|
||||
// les sessions alimentent la corrélation worktree↔session (cwd) côté serveur ; on suit aussi
|
||||
// leurs mises à jour temps réel pour que les badges d'état se rafraîchissent.
|
||||
// les sessions alimentent la corrélation worktree↔session (cwd) côté serveur ; on charge et on
|
||||
// suit leurs mises à jour temps réel pour que les badges d'état (busy/waiting/idle) restent live.
|
||||
void sessions.fetchSessions();
|
||||
sessions.startRealtime();
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user