feat(p10): archivage automatique des sessions terminées (rétention configurable)
- DB: migration #10 (sessions.archived_at + index), helpers archive/unarchive/archiveExpired (soft-archive, jamais de DELETE) - core/retention-settings.ts: session_retention_days (défaut 30, 0=jamais, 1-3650) + session_purge_days (off) - core/session-archive.ts: scheduler start/stop/sweep (calqué DiscoveryService), câblé dans runDaemon - pty-manager.list({includeArchived}) + SessionSummary.archived + emitHistoricalUpdate - routes: GET /sessions?includeArchived, POST/DELETE /sessions/:id/archive, POST /sessions/archive-now - protocole additif: message WS session_archived (relayé par la gateway, abonnés 'sessions') - settings: retentionDays/purgeDays exposés et validés dans PATCH /settings - web: store sessions (showArchived + archive/unarchive), SessionsListView (toggle/badge/actions), SettingsView (slider rétention), i18n EN+FR - tests: retention-settings + session-archive (vitest) + settings-routes étendu ; acceptance-p10.mjs (sweep, event WS, resume d'une session archivée → 201, rétention=0)
This commit is contained in:
@@ -49,6 +49,11 @@ const fr: typeof en = {
|
||||
hideDiscovered: 'Masquer l’historique externe',
|
||||
showHidden: 'Afficher les masquées',
|
||||
hideHidden: 'Masquer les masquées',
|
||||
archive: 'Archiver',
|
||||
unarchive: 'Désarchiver',
|
||||
archivedBadge: 'archivée',
|
||||
showArchived: 'Afficher les archivées',
|
||||
hideArchived: 'Masquer les archivées',
|
||||
clients: 'aucun client | 1 client | {n} clients',
|
||||
exitCode: 'code de sortie {code}',
|
||||
statusLabel: {
|
||||
@@ -345,6 +350,8 @@ const fr: typeof en = {
|
||||
sessionHidden: 'Session masquée',
|
||||
sessionUnhidden: 'Session réaffichée',
|
||||
sessionsHidden: 'aucune session masquée | 1 session masquée | {n} sessions masquées',
|
||||
sessionArchived: 'Session archivée',
|
||||
sessionUnarchived: 'Session désarchivée',
|
||||
repoAdded: 'Dépôt ajouté',
|
||||
repoRemoved: 'Dépôt retiré',
|
||||
worktreeCreated: 'Worktree créé',
|
||||
@@ -416,6 +423,11 @@ const fr: typeof en = {
|
||||
removeRoot: 'Retirer',
|
||||
scanInterval: 'Intervalle de re-scan (minutes)',
|
||||
scanIntervalHint: '0 désactive le scan périodique. Les changements prennent effet au prochain redémarrage du daemon.',
|
||||
// Sessions (rétention / archivage auto)
|
||||
sessions: 'Sessions',
|
||||
sessionsHint: 'Les sessions terminées plus anciennes que la fenêtre de rétention sont archivées automatiquement (masquées de la liste par défaut). Rien n’est supprimé — une session archivée reste reprenable et forkable.',
|
||||
retentionDays: 'Auto-archiver après (jours)',
|
||||
retentionDaysHint: '0 n’archive jamais. Les sessions archivées sont masquées par défaut ; activez « Afficher les archivées » dans la liste pour les voir.',
|
||||
// Claude CLI
|
||||
claudeCli: 'CLI Claude',
|
||||
claudeCliHint: 'Où Arboretum trouve le binaire `claude` et ses données. Utile quand le daemon tourne en service avec un PATH minimal qui n’inclut pas ~/.local/bin.',
|
||||
|
||||
Reference in New Issue
Block a user