mirror of
https://github.com/NeuralNomadsAI/CodeNomad.git
synced 2026-10-31 19:10:30 +00:00
## Summary OpenCode's built-in `/goal <objective>` keeps a session working turn after turn until its reviewer judges the objective met, and pauses the goal on its own after a stop, a failed run, stalls, its round limit or a service restart. CodeNomad already listed `/goal` in the composer picker (it comes from `command.list`) but showed nothing of the goal itself. While the shown session has a goal, the **Status** tab now shows **one line above Tokens**: - a status badge: **Active**, **Paused** or **Complete**; - the objective on one line with an ellipsis; hovering or focusing it shows the full objective and the reason for the last change (why it paused or was met), which is also the row's accessible description; - the rounds used out of the maximum (`2/50`); - **Pause goal** / **Resume goal** (one button that keeps focus when the state flips) and **Clear goal**. Without a goal, without a session, on a runtime without goal support or after a failed read, nothing renders (no hint, no gap). The line is not a Status section: it cannot be hidden or reordered. ## How it works - **Read path:** the instance proxy refuses plugin RPCs, so `GET /api/workspaces/:id/sessions/:sessionId/goal` (`server/routes/session-goal.ts`, contract in `opencode/goal-contract.ts`) validates the session ID, reads the session, checks that its Location belongs to the workspace, then calls the fixed `opencode.goal` `get` in that Location (8 s timeout, abort on disconnect). It returns only the displayed fields; a missing RPC or method answers `unsupported`, any other failure or malformed output `unavailable`. - **Freshness:** plugin RPC events already reach the UI through the native event relay (as `rpc.codenomad.missions.changed` does), so the store follows `rpc.opencode.goal.changed` for tracked sessions, with a per-session version that drops replies older than a change already heard. It also reads when the line is shown (Status visible, session switch), on reconnect (coalesced) and after its own commands. It never polls; a failed read keeps the last goal shown; deleting the session or stopping the workspace drops it. - **Commands:** the buttons reuse the composer's native command path (`executeCustomCommand(..., "goal", "pause" | "resume" | "clear")`, with session admission, instruction sync and the profile environment). They are disabled while a command runs; a refused command (for example pausing without an active goal) shows OpenCode's message. ## Contract Upstream `@opencode/schema/goal` (anomalyco/opencode #59437, #59850; shipped in 2.2.1, identical goal files in 2.2.3 and 2.2.5): RPC `opencode.goal` with `get({ sessionID }) -> Goal.State | null` and event `changed { sessionID, goal }` published in the session's Location on every write. Documented in `dev-docs/OPENCODE_COMPATIBILITY.md` ("Session goal"); refresh policy row in `CACHE_REFRESH_CONVENTIONS.md`; line convention in `UI_SHELL.md`. ## Help New `conversations.md#goal` section (start, read, pause/resume/clear, automatic pauses) and a sentence in `settings.md` about the Status line, in English and all nine translations. ## Validation - Root and server typecheck clean. - Route tests 3/3; store tests 8/8 (with and without `--conditions=browser`), including rapid session switching through the shared background read queue and hidden sessions. - Browser: `session-goal` (no goal, active with Pause, paused with Resume and reason, Complete, Clear, command arguments, update after `changed`, keyboard focus kept on the toggle across Pause and Resume, line above Tokens) and `status-panel` 6/6; `status-tokens` and `fixture-wiring` also pass. - Ten-locale help 31/31. - Native `scripts/test-session-goal-native.mjs` against the exact OpenCode **2.2.5** CLI (twice): `get` returns null for a new session and another workspace gets 403; `/goal pause` without a goal fails with OpenCode's message; a goal set with the fake provider is paused by the reviewer, then resumed and cleared, with the `changed` events relayed to the owning workspace. CI runs it on the minimum and latest runtime lanes; the store test joins the UI unit list. - Full server suite on the rebased branch: 2,841 passed, 9 skipped; the `plugin-controls` (same-target serialization) and `panel-extension-api4` (deadline/abort) timing tests failed and the `index.test.ts` shutdown test was cancelled under full-suite load. None of them touches this change, and all three files pass alone (44/44). Large files touched with 1–4 line changes: `packages/server/src/server/http-server.ts` (~2,490 lines), `packages/ui/src/lib/api-client.ts` (~860 lines).
82 lines
12 KiB
Markdown
82 lines
12 KiB
Markdown
# Paramètres et disposition
|
||
|
||
## Ouvrir les paramètres et identifier leur portée {#open-settings}
|
||
|
||
1. Ouvrez **Paramètres** avec l’engrenage **Ouvrir les paramètres** de la barre d’onglets (de la barre de titre dans l’application de bureau macOS) ou de l’accueil. Des raccourcis comme **Gérer les fournisseurs** dans le sélecteur de modèle, l’engrenage du panneau Missions ou l’engrenage **Paramètres** de l’historique des notifications ouvrent directement la section correspondante.
|
||
2. Sélectionnez une section. Les fenêtres locales Electron et Tauri ouvrent ou focalisent une unique fenêtre native Preferences ; les vues navigateur et distantes utilisent l’écran de paramètres intégré.
|
||
3. Vérifiez la portée du réglage et toute action **Enregistrer** avant de quitter.
|
||
|
||
La plupart des choix s’appliquent immédiatement, y compris les préférences de Missions, qui enregistrent chaque changement au fur et à mesure. La voix, les couleurs de palette personnalisées et les fichiers de configuration gardent un **Enregistrer** explicite. Un échec d’enregistrement ne confirme pas que le changement a pris effet ; rouvrez ou actualisez la section concernée avant de réessayer. Les explications se trouvent derrière le **i** à côté du titre d’un réglage : survolez-le ou focalisez-le, ou touchez-le sur un écran tactile. **Paramètres → Info** contient aussi la carte **Soutenir CodeNomad** : **Parrainer ou contribuer** ouvre la page [Soutenir CodeNomad](sponsor.md).
|
||
|
||
| État | Ce qu’il contrôle |
|
||
| --- | --- |
|
||
| Configuration CodeNomad | Préférences d’interface, voix, SideCars et paramètres serveur pour les clients de cette configuration. Les préférences sans badge ne sont pas non plus enregistrées par appareil ; **Paramètre serveur** signale une configuration côté serveur comme la voix, les SideCars, le Contrôle à distance et les variables d’environnement. |
|
||
| Disposition de fenêtre/d’onglet de projet | Panneaux ouverts, onglets sélectionnés, état du lecteur et brouillons/disposition restaurables. Ce n’est pas de la configuration OpenCode. |
|
||
| Paramètres OpenCode Global/Projet | Changements de plugins/configuration natifs à la portée affichée. Les commandes Projet nécessitent un projet/une Location actif. |
|
||
| Profil de données de bureau | Fenêtres natives, état de restauration et stockage navigateur, indépendamment du fichier de configuration et du service OpenCode partagé. Voir [Fenêtres de bureau et données](desktop.md). |
|
||
|
||
**Stats** couvre tout le service OpenCode connecté (tous les projets, clones indépendants et sous-sessions), pas seulement le dossier ouvert, sur les 7, 30, 90 ou 365 derniers jours. Il nécessite un projet ouvert et affiche les tokens et coûts enregistrés par OpenCode, pas les factures des fournisseurs ni les allocations d’abonnement ; les derniers totaux enregistrés peuvent s’afficher pendant l’actualisation. Les quotas de forfait relèvent de la section Statut **Utilisation**.
|
||
|
||
Changer les préférences d’affichage ne redémarre pas OpenCode et ne rejoue pas de prompt. Configuration native, maintenance du service et identifiants ont des effets distincts : voir [Configuration d’OpenCode](opencode.md), [Fournisseurs](providers.md) et [Intégrations](integrations.md).
|
||
|
||
## Langue et apparence {#language-appearance}
|
||
|
||
1. Dans **Général**, sélectionnez **Langue** : anglais, espagnol, français, russe, japonais, chinois simplifié, hébreu, allemand, népalais ou turc.
|
||
2. Dans **Palette de couleurs**, choisissez **Mode** : **Auto**, **Sombre** ou **Clair**. Auto suit le système d’exploitation.
|
||
3. Choisissez une palette pour l’apparence affichée. Les sélections claire et sombre sont enregistrées indépendamment ; Auto utilise celle qui correspond.
|
||
4. Pour des couleurs personnalisées, utilisez les échantillons et **Enregistrer** ; **Réinitialiser** restaure les couleurs d’une palette intégrée. Utilisez **Nouveau** pour nommer une palette distincte et **Supprimer** pour retirer une palette que vous avez créée.
|
||
|
||
L’interface se met à jour sans redémarrer de conversation. L’hébreu utilise une disposition de droite à gauche ; code et valeurs techniques restent lisibles dans leur propre sens. La sélection de langue change les textes d’interface, pas la langue des messages existants ou instructions d’agent. Les menus natifs du bureau passent à la langue de l’interface dès qu’une fenêtre CodeNomad est chargée.
|
||
|
||
Si les couleurs deviennent difficiles à lire, sélectionnez une palette intégrée ou réinitialisez celle modifiée. Changer de palette peut demander d’abandonner les modifications de couleur non enregistrées ; cela n’abandonne pas un brouillon de conversation.
|
||
|
||
## Panneaux et sections Statut {#panels-status}
|
||
|
||
1. Utilisez **Volet gauche** et **Volet droit** aux coins extérieurs de l’en-tête, ou leurs entrées du menu **Affichage**, pour afficher ou masquer chaque panneau.
|
||
2. Ouvrez **Personnaliser le panneau droit** dans le panneau droit. Utilisez les cases pour choisir les onglets intégrés et sections Statut ; au moins une section Statut reste visible. Faites glisser le pointeur sur ces cases pour en régler plusieurs d'un coup.
|
||
3. Faites glisser les onglets du panneau droit pour les réordonner. Utilisez **Réinitialiser** pour restaurer les choix de disposition intégrée.
|
||
|
||
Statut inclut les informations de tokens, le mode Yolo, l’utilisation fournisseur, les shells en arrière-plan, MCP et Plugins. Tant que la conversation a un [objectif](conversations.md#goal), une ligne d’objectif au-dessus de ces sections l’affiche ; cette ligne n’est pas une section et ne peut être ni masquée ni déplacée. Masquer une section ne désactive pas son service et ne révoque pas de permissions. Les dispositions étroites ferment les panneaux qui ne tiennent plus au lieu de comprimer la conversation ; un panneau ouvert alors flotte au-dessus d’elle, et ouvrir un panneau flottant ferme l’autre.
|
||
|
||
La disposition intégrée est propre à la fenêtre, pas une modification du projet. Les cases d’extension sont différentes : elles activent du code dans tous les projets utilisant la configuration. **Réinitialiser** ne change pas le consentement aux extensions. Voir [Extensions de panneau](extensions.md).
|
||
|
||
## Détail de transcription et taille de saisie {#transcript-composer}
|
||
|
||
1. Ouvrez **Chat** pour choisir les niveaux de détail par défaut. Les préréglages sont **Rien**, **Minimal**, **Équilibré** et **Tout** ; les changements individuels produisent **Personnalisé**.
|
||
2. Réglez l’**État par défaut** de chaque ligne (**Masqué**, **Réduit** ou **Développé**) pour la réflexion, les diagnostics, les entrées d’outils, les tokens, les messages système et chaque type d’outil, ou utilisez le menu **Contenu des messages** de la conversation, qui partage ces choix.
|
||
3. Dans **Général**, cochez au besoin **Afficher la chronologie des messages**, **Scinder les diffs des appels d’outils** et **Mettre les prompts envoyés en file d’attente** (mettre en file les prompts envoyés pendant qu’une session travaille au lieu de l’orienter).
|
||
4. Redimensionnez la zone de saisie avec sa commande ; les longs brouillons défilent dans le champ.
|
||
|
||
La chronologie a un marqueur pour chaque réponse, réflexion, outil, compactage et contexte système affiché dans la conversation, dans le même ordre. Ses marqueurs suivent **Contenu des messages** : masquer à cet endroit un type d’outil, la réflexion ou les messages système masque aussi leurs marqueurs, sauf celui d’un outil avec une autorisation en attente, et **Rien** masque tous les marqueurs d’outils. Les réglages de visibilité et de développement changent seulement la présentation. Ils ne retirent pas les outils/raisonnements enregistrés et ne compactent pas le contexte du modèle. Voir [Historique et nettoyage](history.md) pour les opérations destructrices.
|
||
|
||
La hauteur de saisie suit la conversation visible, y compris le clavier logiciel : minimum 8 % avec un plancher de 44 px, maximum 60 %. La hauteur manuelle est mémorisée proportionnellement ; une largeur étroite et un long texte n’augmentent pas ces limites. Une autorisation/question développée réduit temporairement la saisie sans changer sa hauteur enregistrée ni son brouillon. Repliez ou réglez la demande pour reprendre le redimensionnement.
|
||
|
||
## Notifications et badges {#notifications}
|
||
|
||
1. Ouvrez **Notifications**. Pour chaque type de notification, cochez où elle apparaît : **À l'écran** (une bulle temporaire), **Historique** (conservée dans l’historique des notifications de la cloche de la barre d’onglets, ou de la barre de titre dans l’application de bureau macOS) et **Système** (une notification du système d’exploitation). Faites glisser le pointeur sur une ligne ou une colonne de cases pour en régler plusieurs d'un coup.
|
||
2. Cocher une case **Système** demande l’autorisation si nécessaire. Sous **Notifications système**, **Demander** relance la demande tant que l’autorisation manque.
|
||
3. Activez **Notifier lorsque l'application est au premier plan** pour garder les notifications système pendant que cette fenêtre est au premier plan. Sinon, elles s’affichent dès qu’elle ne l’est pas, même si elle reste ouverte à l’écran.
|
||
|
||
Par défaut, **Une session attend votre réponse** et **Une session est terminée** vont uniquement vers Système, afin que les états passagers des sessions ne s’accumulent pas dans l’Historique ; elles concernent les sessions principales, pas les sous-agents, et une session que vous arrêtez vous-même n’est pas annoncée. Les erreurs apparaissent toujours à l’écran et dans l’Historique, quoi qu’indique le tableau, et les courts messages de progression restent uniquement à l’écran.
|
||
|
||
La permission navigateur/système appartient à l’appareil et à l’origine applicative ; une préférence enregistrée ne peut pas contourner un refus. Si elle est bloquée, activez les notifications dans les paramètres du navigateur ou du système, puis revenez ici. Les environnements non pris en charge gardent la colonne Système désactivée.
|
||
|
||
Le nombre de non-lus de la cloche/de l’historique, qui ne compte que les notifications dirigées vers l’Historique, pilote le point de favicon et le badge de l’application native. Les badges natifs agrègent les fenêtres principales actives ; ils ne comptent pas les sessions en cours et ne prouvent pas qu’une notification système a été livrée. Cette fonctionnalité ne fournit pas de badges de lanceur PWA.
|
||
|
||
## Options avancées {#advanced}
|
||
|
||
1. Ouvrez **Avancé**.
|
||
2. Cochez ou décochez seulement les options nécessaires ; chaque changement est enregistré via les préférences CodeNomad. Pour changer l’environnement d’exécution des sessions, dépliez le groupe replié **Variables d'environnement** à la fin.
|
||
3. Vérifiez la vue résultante ou l’envoi suivant plutôt que de redémarrer spéculativement le service partagé.
|
||
|
||
| Option | Effet et précaution |
|
||
| --- | --- |
|
||
| Nettoyage auto des sessions vides | Nettoie les sessions vides à la création de nouvelles ; laissez désactivé pour les conserver. |
|
||
| Conserver les marqueurs d’inactivité des sous-agents | Conserve les marqueurs d’inactivité non vus jusqu’à consultation plutôt que de les masquer après cinq secondes. |
|
||
| Focaliser la fenêtre existante au second lancement | Bureau natif seulement ; change le comportement de fenêtre au second lancement, pas la création d’onglets. |
|
||
| Solde de crédits du fournisseur | Affiche les soldes complémentaires dans Utilisation ; n’achète pas de crédits et ne change pas de compte. |
|
||
| Masquer les changements d’espaces | Omet les fichiers non indexés ne différant que par espaces/fins de ligne de Changements et ses actions groupées ; les fichiers indexés restent visibles. Voir [Fichiers](files.md). |
|
||
| Retenir les longues réponses de l’assistant | Arrête le suivi automatique lorsqu’une réponse en cours dépasse la zone visible. |
|
||
| Variables d’environnement | Appliquées côté serveur avant chaque prompt ou commande de session ; les lectures ne mettent pas à jour une exécution déjà active. Voir [Configuration d’OpenCode](opencode.md). |
|
||
|
||
Pour configurer le clavier, voir [Raccourcis clavier](shortcuts.md) ; pour les commandes vocales, voir [Saisie et lecture vocales](voice.md). La restauration au démarrage et les profils de données de bureau sont décrits dans [Fenêtres de bureau et données](desktop.md).
|