feat: local web cockpit (repo settings, MR sidebar, reviews via worktrees) - #8
feat: local web cockpit (repo settings, MR sidebar, reviews via worktrees)#8naashw wants to merge 5 commits into
Conversation
There was a problem hiding this comment.
🤖 Codesema Code Review — ✅ Approuvé
MR bien construite et testée : une page « Paramètres du dépôt » dans l'UI locale permet d'éditer .codesema/RULES.md et de basculer l'auto-sync, via 3 endpoints (GET /api/config, PUT /api/config/rules, PUT /api/config/sync-auto-push) protégés par un jeton CSRF par serveur, calqué sur /api/fix. Le changement cassant (cwd désormais obligatoire sur startServer) est propagé à TOUS les appelants (review, show, tests), la propriété de sécurité « un dépôt ne peut pas activer l'auto-push lui-même » est verrouillée par un test dédié, et le correctif readJsonBody (drainage au lieu de destruction de socket) est soigné et commenté. Conventions respectées (test colocalisé, composant Vue au bon endroit). Seul point mineur : l'interrupteur « Auto-sync » présenté sous « Paramètres du dépôt » écrit en réalité un réglage global — à clarifier. Verdict : approuvé.
2 points relevés
- INFO
packages/cli/src/repo-config.test.ts:57— Bon réflexe : ce test fige la garantie qu'un dépôt ne peut pas activer lui-même syncAutoPush (seule la config globale décide), ce qui empêche un dépôt cloné d'auto-pousser des revues vers l'extérieur. - INFO
packages/cli/src/serve.ts:233— Au lieu de détruire la socket sur un corps trop volumineux (ce qui coupait la connexion avant l'envoi de la réponse d'erreur), le flag tooLarge draine la requête puis laisse le handler répondre proprement 400 — le commentaire en explique clairement la raison.
🤝 MR approuvée · 1 remarque en ligne par @getCodesema[bot].
👉 Voir la review complète (diff annoté + explications)
Review générée automatiquement par l'agent Codesema.
| 'settings.saved': 'Saved ✓', | ||
| 'settings.saveError': 'Could not save the rules.', | ||
| 'settings.autoSyncTitle': 'Auto-sync', | ||
| 'settings.autoSyncHint': 'Automatically push every completed review to codesema.com.', |
There was a problem hiding this comment.
🤖 CONCEPTION · MINOR — Le bouton « Auto-sync » est présenté sous « Paramètres du dépôt » mais écrit en réalité la config globale (setSyncAutoPush → saveGlobalConfig). Un utilisateur qui l'active en pensant ne concerner que ce dépôt fera aussi pousser automatiquement vers codesema.com les revues de TOUS ses autres dépôts. Préciser dans le libellé/hint que la synchronisation automatique est un réglage global (tous les dépôts), et ajuster de même la version fr.
Content
The local web cockpit, built up in one branch as agreed.
Repo settings page
GET /api/config,PUT /api/config/rules,PUT /api/config/sync-auto-push(per-server CSRF token, same pattern asPOST /api/fix).RepoSettings.vue: edit.codesema/RULES.md, toggle auto-sync.Open MRs and local branches sidebar
forge-mrs.ts: lists open MRs throughgh/glab(forge detection shared withprep.tsviadetectForgeHint), strict JSON validation, gracefulavailable: falsewhen there is no remote/CLI.GET /api/branches: local branches with current/worktree markers (git worktree list --porcelain) and last-commit info.MrSidebar.vue+BranchSidebar.vuesections wired into the existing navigation.Agentless preview on click
prep.ts(no disk writes):GET /api/previewreturns source/target branches, commits, files with +/- and statuses;GET /api/preview/diffserves one file's diff on demand (size-capped with atruncatedflag, path validated against the diff file list).PreviewPanel.vue: branches, commit list, file list, per-file colored diff.Run reviews via disposable worktrees
mr-review-runner.ts): source is an MR (fetched with an explicit refspec) or a local branch; a branch already checked out gets a detached worktree on the same commit. Worktree always created in a temp dir and removed in a finally; archive written to the main repo's.codesema.POST /api/mrs/review(token-protected, 409 when a run is active, 404 for unknown source) andGET /api/mrs/review/status.review.tsrefactor:runSimpleFlow/runDualFlowshared by the CLI command and the web runner.363 tests pass, full build green. Version 0.11.0, changelog updated.
Known limitation
syncAutoPushis a global-only setting inconfig.ts: the UI toggle flips it globally, not per repo. Per-repo override (with matchingcodesema configmenu support) is a follow-up.Test it
bun run build && node packages/cli/dist/index.mjs showOpen the printed URL: MRs and branches on the left, pick one to see the diff without any agent, run a review from there; "Repo settings" for rules and auto-sync.
🤖 Generated with Claude Code