Aller au contenu

Carte des routes

La coquille de l’application (ControlCenterLayout) enveloppe chaque route d’espace de travail via un ShellRoute. Chaque destination interne à 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 pas de préfixe : /splash, /onboarding, /signed-out et le sélecteur /workspaces seul, toutes en plein écran et en dehors de la coquille.

La porte est franchie lorsqu’au moins une forge est connectée pour l’utilisateur connecté et qu’au moins un espace de travail existe.

L’absence d’identifiant et l’absence de configuration correspondent à deux écrans différents, et le discriminant est users.onboarding_finished_at, lu sur le identity.me de l’appelant lui-même — jamais « des espaces de travail existent », ce qui devient faux dès que quelqu’un est invité dans un espace de travail qu’il n’a jamais créé. Sans forge connectée, un compte qui a terminé son onboarding va vers /signed-out pour se réauthentifier ; un compte qui ne l’a pas terminé va vers /onboarding. Tant que l’indicateur reste inconnu, le garde retient l’écran de démarrage plutôt que de deviner, car il ne redirige jamais en arrière hors de l’onboarding.

Chemin Écran
/splash Écran de démarrage qui résout la porte d’onboarding
/onboarding Connectez une forge, créez ou rejoignez un espace de travail, le bac à sable, l’adaptateur par défaut, puis la voix. L’étape d’espace de travail est ignorée lorsque le compte appartient déjà à un espace
/signed-out Réauthentification : la même carte de connexions aux forges que celle qu’affiche Paramètres, sans barre d’étapes ni bouton Continuer — le routeur quitte l’écran de lui-même dès qu’une forge répond
/workspaces Liste des espaces de travail et sélecteur
/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 par cycle de vie de revue, plus le travail hors PR qui bloque l’opérateur. La route d’atterrissage après le 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 profond vers un message et est consommé une fois à l’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 ; 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 — Hub 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, actions à mener, décisions
/calendar — Calendrier : vues mois, semaine et agenda
/calendar/:eventId — Détail d’un événement de calendrier (route sœur ; partage la clé de page du calendrier)
/newsfeed — Liste du fil d’actualités
/newsfeed/article/:articleId — Lecteur d’articles
/observability — Hub Observabilité : onglets Utilisation, Aperçu, En direct et Qualité au-dessus du flux de journaux 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’équipe d’une organisation GitHub
/api-keys — Gestion des clés API. Aucun point d’entrée de navigation — accessible uniquement par URL
/settings/… — Écrans de paramètres (ci-dessous)

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

Il n’existe aucune route /dashboard ni aucun écran de tableau de bord. La surface d’analyse est /observability, atteinte 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 un onglet d’éditeur depuis la ligne du plan, dans la conversation qui l’a produit ; /plans et /plans/:kind/:id sont des liens profonds.

/observability et /pull-requests/compose n’ont aucune entrée dans les registres des titres de route ou des fils d’Ariane, si bien que les deux affichent le nom brut 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 des paramètres sont répartis par portée — you/, workspace/, server/ — car le segment indique qui une modification concerne. Deux chemins sont antérieurs à cette répartition et ne portent pas de portée dans l’URL : /settings/memory et /settings/pipelines.

Chemin Écran
/settings/you/appearance Thème, langue, typographie, thème de l’éditeur (l’écran d’accueil des paramètres)
/settings/you/notifications Activation par événement, heures calmes
/settings/you/keybindings Référence des raccourcis clavier (lecture seule)
/settings/you/audio Microphone, dictée, détection des réunions et sortie des ambiances sonores
/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, chemins de secrets exclus, concurrence des relecteurs, nommage des branches, état de la synchronisation, passerelles de chat, zone sensible
/settings/workspace/meetings Modèles de notes de réunion et profils vocaux enregistrés
/settings/workspace/members Effectif, invitations, piste d’audit. La piste d’audit se pagine avec ?cursor= facultatif
/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 skills
/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èle 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, images de base, images personnalisées, machines en cours d’exécution
/settings/server/sandbox Autorisations d’exécution du bac à sable : programmes que les agents peuvent lancer depuis leur copie de travail de vos dépôts
/settings/server/diagnostics Diagnostics et confidentialité : isolation, indexation, journalisation, rapports d’erreur
/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 l’unique source de vérité de cette liste. settings_nav_test.dart fige les identifiants uniques, les routes uniques, l’ordre aplati J/K et les trois portées. Il ne parcourt pas chaque GoRoute enregistrée.

Aspect Fichier
Routeur lib/router/app_router.dart
Constructeurs de routes lib/router/routes.dart
Gardes d’authentification lib/router/guards.dart
Porte d’onboarding lib/features/auth/providers/onboarding_providers.dart
Navigation des paramètres lib/features/settings/settings_nav.dart