feat(worktrees): démarrer une session sur la branche principale ou tout worktree
Ajoute le choix « créer un worktree OU bosser sur la branche principale » au moment de démarrer le travail, sur deux surfaces : - bouton « Démarrer » (claude/bash) sur chaque WorktreeCard, y compris le checkout principal (badge « principal ») — comblait un manque : impossible jusqu'ici de lancer une session sur un worktree existant depuis le dashboard ; - toggle de mode (Worktree / Branche principale) dans le formulaire d'entête de RepoSection. Option git « créer & basculer » : nouvel endpoint POST /api/v1/repos/:id/session qui lance UNE session dans le checkout principal (repo.path), avec création ou bascule de branche optionnelle (git switch[-c]) — refusée en 409 si l'arbre est sale. Pas de hooks ni de pré-trust (c'est le dépôt réel de l'utilisateur). - shared : type additif StartRepoSessionRequest. - server : git.switchBranch + WorktreeManager.startMainSession + route. - web : store worktrees.startMainSession, UI WorktreeCard/RepoSection, i18n fr/en. - tests : +5 unitaires (switchBranch, startMainSession) ; acceptance-p3 étendue.
This commit is contained in:
@@ -7,6 +7,9 @@ import type {
|
||||
RepoResponse,
|
||||
ReposListResponse,
|
||||
RepoSummary,
|
||||
SessionResponse,
|
||||
SessionSummary,
|
||||
StartRepoSessionRequest,
|
||||
WorktreeSummary,
|
||||
WorktreesListResponse,
|
||||
} from '@arboretum/shared';
|
||||
@@ -104,6 +107,16 @@ export const useWorktreesStore = defineStore('worktrees', () => {
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lance une session sur le checkout principal du repo (« bosser sur la branche principale » sans
|
||||
* worktree). Avec `branch`, le serveur crée/bascule la branche d'abord. La session et le worktree
|
||||
* mis à jour arrivent aussi par WS ; on retourne la session pour permettre la navigation immédiate.
|
||||
*/
|
||||
async function startMainSession(repoId: string, req: StartRepoSessionRequest = {}): Promise<SessionSummary> {
|
||||
const res = await api.post<SessionResponse>(`/api/v1/repos/${repoId}/session`, req);
|
||||
return res.session;
|
||||
}
|
||||
|
||||
async function deleteWorktree(repoId: string, path: string, force: boolean): Promise<void> {
|
||||
await api.delete<{ ok: true }>(`/api/v1/repos/${repoId}/worktrees?path=${encodeURIComponent(path)}&force=${force}`);
|
||||
removeWorktreeLocal(path);
|
||||
@@ -135,6 +148,7 @@ export const useWorktreesStore = defineStore('worktrees', () => {
|
||||
discover,
|
||||
refreshRepoWorktrees,
|
||||
createWorktree,
|
||||
startMainSession,
|
||||
deleteWorktree,
|
||||
prune,
|
||||
startRealtime,
|
||||
|
||||
Reference in New Issue
Block a user