Aller au contenu

Carte des routes

La coquille de l’application (ControlCenterLayout) enveloppe chaque route au sein d’un espace de travail au moyen d’un ShellRoute. Chaque destination à l’intérieur de la coquille est préfixée par l’espace de travail — /workspaces/:workspaceId/… — et l’identifiant d’espace de travail présent dans l’URL est la source unique de vérité de l’espace de travail actif. Seules les surfaces hors contexte n’ont aucun préfixe : /splash, /onboarding, /signed-out et le sélecteur /workspaces seul, toutes en plein écran et à l’extérieur de la coquille.

La condition d’accès est remplie lorsque au moins une forge est connectée pour l’utilisateur connecté et qu’au moins un espace de travail existe.

Un identifiant manquant et une configuration manquante mènent à des écrans différents, et le discriminant est users.onboarding_finished_at, lu depuis le identity.me de l’appelant lui-même — jamais « des espaces de travail existent », ce qui est faux dès l’instant où quelqu’un est invité dans un espace de travail qu’il n’a jamais créé. Sans forge connectée, un compte qui a terminé la configuration initiale se rend à /signed-out pour se réauthentifier ; un compte qui ne l’a pas terminée se rend à /onboarding. Tant que l’indicateur demeure inconnu, la garde retient l’écran de démarrage plutôt que de deviner, parce qu’elle ne redirige jamais à rebours hors de la configuration initiale.

Chemin Écran
/splash Écran de démarrage qui résout la condition d’accès à la configuration initiale
/onboarding Connecter une forge, créer ou joindre un espace de travail, le bac à sable, l’adaptateur par défaut, puis la voix. L’étape Espace de travail est omise lorsque le compte appartient déjà à un espace
/signed-out Se réauthentifier : la même carte des connexions aux forges que celle qu’affiche Paramètres, sans barre d’étapes ni bouton Continuer — le routeur quitte de lui-même dès qu’une forge répond
/workspaces Liste et sélecteur d’espaces de travail
/workspaces/:workspaceId Redirige vers /workspaces/:workspaceId/inbox

Les chemins ci-dessous omettent le préfixe /workspaces/:workspaceId.

Chemin Paramètres de requête Écran
/inbox — Boîte de réception unifiée : les PR classées selon le cycle de vie de la revue, en plus du travail hors PR qui bloque l’opérateur. La route d’atterrissage après la garde ; un /workspaces/:workspaceId seul redirige ici
/spaces — Surface des espaces, aucun espace sélectionné
/spaces/:spaceId ?m=<messageId>, ?tab=<key> Un espace ; m crée un lien direct vers un message et est consommé à la première ouverture
/tickets — Tableau des tickets
/tickets/:ticketId — Vue maître-détail d’un ticket
/projects/:projectId — Vue d’ensemble du projet
/pull-requests ?repo=<owner/name> Liste des PR ; repo sélectionne ce dépôt dans le rail de gauche
/pull-requests/compose ?space=<spaceId> Rédiger une nouvelle demande de tirage ; space nomme l’espace dont l’arbre de travail isolé fournit la branche
/pull-requests/:owner/:repo/:prNumber ?tab=<key>, ?comment=<id> Détail d’une PR avec visionneuse de différences ; comment est l’identifiant REST numérique d’un commentaire
/pipelines — Liste des exécutions de pipeline
/pipelines/run ?templateId=<id> Lanceur d’exécution manuelle
/pipelines/:runId — Détail d’une exécution de pipeline (chronologie des étapes)
/plans — Carrefour de Plan Studio : plans actifs, documents de plan, playbooks
/plans/:kind/:id — Plan Studio pour un plan ; kind vaut orchestration ou document
/meetings — Liste des réunions
/meetings/record — Écran d’enregistrement d’une réunion en direct
/meetings/:meetingId — Détail d’une réunion : notes, transcription, tâches, décisions
/calendar — Calendrier : vues Mois, Semaine et Agenda
/calendar/:eventId — Détail d’un événement du calendrier (route sœur ; partage la clé de page du calendrier)
/newsfeed — Liste du fil de nouvelles
/newsfeed/article/:articleId — Lecteur d’articles
/observability — Carrefour d’observabilité : onglets Utilisation, Aperçu, En direct et Qualité au-dessus du flux de journal d’exécution de l’espace de travail. S’ouvre par défaut sur l’onglet Utilisation
/users/:login — Profil d’utilisateur GitHub
/teams/:organization/:slug — Profil d’une équipe d’organisation GitHub
/api-keys — Gestion des clés API. Aucun point d’entrée dans la navigation — accessible uniquement par URL
/settings/… — Écrans de paramètres (ci-dessous)

Les conversations et les fils n’ont aucune route qui leur soit propre — un fil est une conversation à l’intérieur de /spaces/:spaceId, ouverte comme onglet d’éditeur plutôt qu’adressée par URL.

Il n’existe aucune route /dashboard ni aucun écran de tableau de bord. La surface d’analyse est /observability, accessible depuis le pied de la barre latérale.

Il n’existe aucun élément « Plans » dans la barre latérale. Plan Studio s’ouvre comme onglet d’éditeur depuis la ligne du plan, dans la conversation qui l’a produit ; /plans et /plans/:kind/:id sont des liens directs.

/observability et /pull-requests/compose n’ont aucune entrée dans les registres des titres de route ni des fils d’Ariane ; les deux affichent donc le simple nom de l’application dans le titre de la fenêtre, sans fil d’Ariane.

/settings redirige vers /settings/you/appearance. Le bouton de paramètres de la barre latérale et Cmd/Ctrl + , mènent tous deux à /settings/you/appearance.

Les chemins de paramètres sont organisés par portée — you/, workspace/, server/ — parce que le segment indique qui est touché par un changement. Deux chemins sont antérieurs à cette organisation et ne portent aucune portée dans l’URL : /settings/memory et /settings/pipelines.

Chemin Écran
/settings/you/appearance Thème, langue, typographie, thème de l’éditeur (la page d’accueil des paramètres)
/settings/you/notifications Interrupteurs par événement, heures calmes
/settings/you/keybindings Référence des raccourcis clavier (en lecture seule)
/settings/you/audio Microphone, dictée, détection des réunions et sortie d’ambiance sonore
/settings/you/devices Téléphones appairés et contrôle à distance
/settings/you/newsfeed Gestion du fil : sources, actualisation, état de lecture
Chemin Écran
/settings/workspace/profile Profil et identité dans cet espace de travail : nom, auteur git, hébergement de code, calendrier
/settings/workspace/general Nom, logo, globs de secrets, concurrence des révisions, nommage des branches, état de la synchronisation, passerelles de clavardage, zone sensible
/settings/workspace/meetings Modèles de notes de réunion et profils vocaux enregistrés
/settings/workspace/members Liste des membres, invitations, journal d’audit. Le journal d’audit se pagine au moyen du paramètre facultatif ?cursor=
/settings/workspace/repositories Dépôts enregistrés dans cet espace de travail
/settings/workspace/agents Identités d’agents enregistrées
/settings/workspace/skills Configuration des compétences
/settings/memory Mémoire de l’espace de travail : faits, politiques, graphe de connaissances
/settings/workspace/permissions Autorisations des agents : matrice de garde-fous et sonde « Et si ? »
/settings/pipelines Modèles de pipeline
/settings/pipelines/:templateId Éditeur de modèles de pipeline (canevas glisser-déposer)
Chemin Écran
/settings/server/connection Connexion et état
/settings/server/sso Authentification unique (SAML, OIDC, provisionnement SCIM)
/settings/server/providers Fournisseurs de modèles et adaptateurs
/settings/server/mcp Serveurs MCP intégrés et externes
/settings/server/voice Modèles vocaux et de réunion (ASR, diarisation)
/settings/server/rigs Rigs : ce que cet hôte peut démarrer, les images de base, les images personnalisées et les machines en cours d’exécution
/settings/server/sandbox Autorisations d’exécution en bac à sable : programmes que les agents peuvent lancer depuis leur copie de travail de vos dépôts
/settings/server/diagnostics Diagnostics et confidentialité : bac à sable, embedding, journalisation, rapports de plantage
/settings/server/backup Sauvegarde et restauration : instantanés de l’installation, export par espace de travail, import et suppression
/settings/server/about À propos et mises à jour

kSettingsNav, dans lib/features/settings/settings_nav.dart, est la source unique de vérité de cette liste. settings_nav_test.dart verrouille l’unicité des identifiants, l’unicité des routes, l’ordre aplati J/K et les trois portées. Il ne parcourt pas chaque GoRoute enregistré.

Aspect Fichier
Routeur lib/router/app_router.dart
Constructeurs de routes lib/router/routes.dart
Gardes d’authentification lib/router/guards.dart
Condition d’accès à la configuration initiale lib/features/auth/providers/onboarding_providers.dart
Navigation des paramètres lib/features/settings/settings_nav.dart