P2: découverte & reprise des sessions Claude
Arboretum découvre désormais toutes les sessions Claude de la machine (scan ~/.claude/projects + registre ~/.claude/sessions), distingue vivantes/mortes par pid+procStart, et permet de reprendre une morte (--resume dans son cwd d'origine) ou forker une vivante sans la corrompre. - shared: SessionSummary enrichi (source, claudeSessionId, pid, resumable, attachable, registryStatus) — additif, PROTOCOL_VERSION inchangé ; types REST resume/fork. - db: migration id:2 (claude_session_id, resumed_from). - core: jsonl-discovery (parseur tolérant, scan asynchrone non bloquant), session-registry (vivacité pid+procStart), discovery-service (cache + refresh périodique + diff/broadcast), pty-manager (resume/fork + capture du claudeSessionId via le registre). - routes: /sessions/:id/resume (garde-fou 409 anti-corruption sur session vivante) et /fork ; GET fusionné managées + découvertes ; relais WS. - web: badges managed/discovered + busy/idle/waiting, actions conditionnelles (Open/Observe/Kill vs Fork/View vs Resume/Fork), vue read-only des sessions externes, i18n EN/FR. - tests: jsonl-discovery, session-registry, discovery-service + resume/fork (130 verts) ; acceptation E2E acceptance-p2.mjs (sans quota) ALL GREEN. Conforme aux verdicts S1 (resume dans cwd d'origine, vivacité pid+procStart) et S4 (munge cwd, parseur tête+queue, priorité de titre).
This commit is contained in:
@@ -72,5 +72,30 @@ export const useSessionsStore = defineStore('sessions', () => {
|
||||
await api.delete<{ ok: true }>(`/api/v1/sessions/${id}`);
|
||||
}
|
||||
|
||||
return { sessions, loading, loadError, fetchSessions, startRealtime, stopRealtime, createSession, killSession };
|
||||
// Reprise d'une session morte (nouveau PTY managé dans son cwd d'origine, côté serveur).
|
||||
async function resumeSession(id: string): Promise<SessionSummary> {
|
||||
const res = await api.post<SessionResponse>(`/api/v1/sessions/${id}/resume`);
|
||||
upsert(res.session);
|
||||
return res.session;
|
||||
}
|
||||
|
||||
// Fork d'une session (vivante ou morte) — ne corrompt jamais l'originale.
|
||||
async function forkSession(id: string): Promise<SessionSummary> {
|
||||
const res = await api.post<SessionResponse>(`/api/v1/sessions/${id}/fork`);
|
||||
upsert(res.session);
|
||||
return res.session;
|
||||
}
|
||||
|
||||
return {
|
||||
sessions,
|
||||
loading,
|
||||
loadError,
|
||||
fetchSessions,
|
||||
startRealtime,
|
||||
stopRealtime,
|
||||
createSession,
|
||||
killSession,
|
||||
resumeSession,
|
||||
forkSession,
|
||||
};
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user