dsh-composer-plus 1.10.0 → 1.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.fr.md CHANGED
@@ -8,13 +8,13 @@
8
8
 
9
9
  Ceci est une traduction. La version de référence est le fichier anglais [README.md](README.md).
10
10
 
11
- Des fonctions pratiques dans le style de Codex pour l’interface de bureau et web de [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh) : un panneau des modifications, des idées de fonctionnalités sous forme de cartes à balayer, une recherche dans le texte des messages depuis la barre latérale, l’annulation d’un tour avec restauration des fichiers, la suppression d’une discussion vers la Corbeille, le nom du projet sous la zone de saisie, le statut des projets dans la barre latérale, l’historique de saisie, un raccourci pour le mode plan, Continuer en un clic, la reprise des discussions en cours après un redémarrage, le glisser-déposer dans la file d’attente, des liens directs vers les sessions, des autorisations de la revue automatique (Auto Review) par discussion, des notifications en arrière-plan, l’accès depuis l’iPhone avec l’app Tether et les mises à jour automatiques.
11
+ Des fonctions pratiques dans le style de Codex pour l’interface de bureau et web de [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh) : un panneau des modifications, des idées de fonctionnalités sous forme de cartes à balayer, une recherche dans le texte des messages depuis la barre latérale, l’annulation d’un tour avec restauration des fichiers, la suppression d’une discussion vers la Corbeille, le nom du projet sous la zone de saisie, le statut des projets dans la barre latérale, l’historique de saisie, un raccourci pour le mode plan, Continuer en un clic, la reprise des discussions en cours après un redémarrage, le glisser-déposer dans la file d’attente, des liens directs vers les sessions, l’export des discussions en Markdown, des autorisations de la revue automatique (Auto Review) par discussion, des notifications en arrière-plan, l’accès depuis l’iPhone avec l’app Tether et les mises à jour automatiques.
12
12
 
13
- **En une ligne :** un seul plugin DeepSeek Harness (npm `dsh-composer-plus`, affiché sous le nom **Composer Plus** dans Réglages → Plugins) qui ajoute un panneau des modifications git, des cartes d’idées de fonctionnalités à la Tinder, une recherche dans la barre latérale qui trouve aussi les mots des messages, l’annulation de tour ↶ (discussion uniquement, ou discussion et fichiers), Supprimer la discussion, le nom du projet sous la zone de saisie, l’historique de saisie ↑/↓, une bascule `/plan` avec Shift+Tab, ▶ Continuer en un clic, Reprendre après redémarrage, le réordonnancement de la file par glisser-déposer, Copier le lien de session, « Autoriser pour cette discussion » pour la revue automatique, des notifications en arrière-plan, l’accès depuis l’iPhone (Connexion mobile, app Tether), 11 langues d’interface supplémentaires et les mises à jour automatiques.
13
+ **En une ligne :** un seul plugin DeepSeek Harness (npm `dsh-composer-plus`, affiché sous le nom **Composer Plus** dans Réglages → Plugins) qui ajoute un panneau des modifications git, des cartes d’idées de fonctionnalités à la Tinder, une recherche dans la barre latérale qui trouve aussi les mots des messages, l’annulation de tour ↶ (discussion uniquement, ou discussion et fichiers), Supprimer la discussion, le nom du projet sous la zone de saisie, l’historique de saisie ↑/↓, une bascule `/plan` avec Shift+Tab, ▶ Continuer en un clic, Reprendre après redémarrage, le réordonnancement de la file par glisser-déposer, Copier le lien de session, Exporter en Markdown, « Autoriser pour cette discussion » pour la revue automatique, des notifications en arrière-plan, l’accès depuis l’iPhone (Connexion mobile, app Tether), 11 langues d’interface supplémentaires et les mises à jour automatiques.
14
14
 
15
15
  <p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness avec Composer Plus : le projet en cours affiche un indicateur de chargement dans la barre latérale et le panneau des modifications affiche un diff git"></p>
16
16
 
17
- Plugin communautaire non officiel. Les seuls appels réseau servent à la recherche de mises à jour (versions GitHub et registre npm) ; désactivez **Mises à jour automatiques** pour les arrêter au démarrage. **Idées de fonctionnalités** n’appelle le modèle de votre discussion que lorsque vous cliquez sur **Suggérer des fonctionnalités**. **Connexion mobile** (désactivée par défaut) accepte les connexions d’iPhone depuis votre réseau local ou votre tailnet, et seulement après que vous l’avez activée.
17
+ Plugin communautaire non officiel. Les seuls appels réseau servent à la recherche de mises à jour (versions GitHub et registre npm) ; désactivez **Mises à jour automatiques** pour les arrêter au démarrage. **Idées de fonctionnalités** n’appelle le modèle de votre discussion que lorsque vous cliquez sur **Suggérer des fonctionnalités**. **Prédiction du message suivant** (activée par défaut) appelle le modèle choisi dans les Réglages (celui par défaut de dsh, sauf si vous en choisissez un autre) une fois après chaque tour terminé, sans clic. Désactivez-la dans **Réglages → Composer Plus** pour arrêter ces appels. **Compléter pendant la saisie** (désactivé par défaut) appelle le modèle choisi pour cette fonctionnalité (par défaut, celui de la prédiction) à chaque pause pendant la saisie, une fois que vous l’avez activé. **Connexion mobile** (désactivée par défaut) accepte les connexions d’iPhone depuis votre réseau local ou votre tailnet, et seulement après que vous l’avez activée.
18
18
 
19
19
  ## Installation
20
20
 
@@ -29,14 +29,14 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Redémarrez ensuite dsh. (La CLI ne peut pas installer dans le profil de bureau ; c’est l’app qui le gère.)
31
31
 
32
- > Le pnpm de dsh ignore les versions publiées depuis moins de 24 heures. Juste après une nouvelle version, ajoutez le numéro de version : `dsh-composer-plus@1.10.0`.
32
+ > Le pnpm de dsh ignore les versions publiées depuis moins de 24 heures. Juste après une nouvelle version, ajoutez le numéro de version : `dsh-composer-plus@1.11.1`.
33
33
 
34
34
  ## Fonctionnalités
35
35
 
36
36
  | Fonctionnalité | Utilisation | Capture d’écran |
37
37
  |---|---|---|
38
38
  | **Panneau des modifications** | Barre latérale droite → `+` → **Modifications**. Choisissez **Non validées**, **Non indexées**, **Indexées** ou **Branche** pour voir les fichiers modifiés avec leurs compteurs `+/-` ; cliquez sur un fichier pour voir son diff. **Dernier tour** ouvre la revue du dernier tour proposée par dsh lui-même. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Capture d’écran : Panneau des modifications"></a> |
39
- | **Idées de fonctionnalités** | Barre latérale droite → `+` → **Idées de fonctionnalités** → **Suggérer des fonctionnalités**. Le modèle de la discussion lit un court résumé du projet de la discussion (fichiers de premier niveau, début du README et du manifeste, 15 derniers commits) et suggère jusqu’à 8 fonctionnalités. Elles s’affichent sous forme de pile de cartes, dans la langue de l’interface de dsh. Balayez une carte vers la droite (ou cliquez sur **✓**, ou appuyez sur `→` ; dans chaque cas, la carte s’envole de son côté) pour lancer une nouvelle discussion dans le même projet : elle démarre en mode plan avec l’idée comme demande, donc rien ne change avant que vous approuviez le plan. Pour passer le plan, cliquez sur **▶ Créer maintenant** (ou appuyez sur `↑` ; la carte s’envole vers le haut) : la nouvelle discussion démarre tout de suite avec l’idée comme demande ordinaire, et le modèle fait la modification puis lance ses vérifications (les approbations s’appliquent comme d’habitude). Balayez vers la gauche (ou **✕**, ou `←`) pour ignorer la carte ; **Annuler** (ou `Z`) ramène une carte ignorée. Cliquez sur **↓** (ou appuyez sur `↓`) pour garder une bonne idée pour plus tard : elle va dans la liste **Plus tard** du projet, que chaque discussion du même dossier de projet affiche (même après un redémarrage). **Plus tard (N)** ouvre la liste ; **Planifier** lance la même discussion en mode plan pour l’idée et **Créer maintenant** la discussion sans plan, et les deux la retirent de la liste ; **Tout planifier (N)** lance une seule discussion en mode plan pour toutes les idées de la liste, donc les parties communes ne sont planifiées qu’une fois ; **Retirer de la liste** la supprime. **Plus d’idées** ajoute des cartes. Une idée n’est pas suggérée deux fois dans un projet : chaque idée suggérée (ignorée, gardée ou lancée) va dans l’**Historique** du projet, le modèle reçoit la consigne de ne plus les suggérer et un titre répété est écarté. **Historique** les liste avec **Lancée** ou **Proposée** ; **Oublier** (ou **Tout oublier**) permet à une idée de revenir ; une idée encore dans la liste **Plus tard** reste hors des suggestions tant que vous ne l’en retirez pas. Le modèle ne s’exécute que lorsque vous cliquez. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Capture d’écran : Idées de fonctionnalités"></a> |
39
+ | **Idées de fonctionnalités** | Barre latérale droite → `+` → **Idées de fonctionnalités** → **Suggérer des fonctionnalités**. Le modèle de la discussion lit un court résumé du projet de la discussion (fichiers de premier niveau, début du README et du manifeste, 15 derniers commits) et suggère jusqu’à 8 fonctionnalités. Elles s’affichent sous forme de pile de cartes, dans la langue de l’interface de dsh. Balayez une carte vers la droite (ou cliquez sur **✓**, ou appuyez sur `→` ; dans chaque cas, la carte s’envole de son côté) pour lancer une nouvelle discussion dans le même projet : elle démarre en mode plan avec l’idée comme demande, donc rien ne change avant que vous approuviez le plan. Pour passer le plan, cliquez sur **▶ Créer maintenant** (ou appuyez sur `↑` ; la carte s’envole vers le haut) : la nouvelle discussion démarre tout de suite avec l’idée comme demande ordinaire, et le modèle fait la modification puis lance ses vérifications (les approbations s’appliquent comme d’habitude). Balayez vers la gauche (ou **✕**, ou `←`) pour ignorer la carte ; **Annuler** (ou `Z`) ramène une carte ignorée. Cliquez sur **↓** (ou appuyez sur `↓`) pour garder une bonne idée pour plus tard : elle va dans la liste **Plus tard** du projet, que chaque discussion du même dossier de projet affiche (même après un redémarrage). **Plus tard (N)** ouvre la liste ; **Planifier** lance la même discussion en mode plan pour l’idée et **Créer maintenant** la discussion sans plan, et les deux la retirent de la liste ; **Tout planifier (N)** lance une seule discussion en mode plan pour toutes les idées de la liste, donc les parties communes ne sont planifiées qu’une fois ; **Retirer de la liste** la supprime. **Copier en liste de tâches** copie toute la liste dans le presse-papiers sous forme de liste de tâches Markdown (`- [ ] Title — Summary`, une ligne par idée) pour un outil de suivi des tickets ou un fichier TODO ; aucun appel réseau n’est fait. **Plus d’idées** ajoute des cartes. Pour obtenir des idées sur un seul domaine, tapez un court **Thème ciblé** dans le champ à côté de **Suggérer des fonctionnalités** (80 caractères au plus ; `Enter` lance aussi la suggestion), ou cliquez sur un des thèmes fixes en dessous : **Performances**, **Accessibilité**, **Tests**, **Sécurité**, **Utilisabilité** ou **Documentation** (cliquez de nouveau pour l’effacer). Le modèle suggère alors seulement des fonctionnalités sur ce thème ; un champ vide signifie n’importe quelle fonctionnalité. Une idée n’est pas suggérée deux fois dans un projet : chaque idée suggérée (ignorée, gardée ou lancée) va dans l’**Historique** du projet, le modèle reçoit la consigne de ne plus les suggérer et un titre répété est écarté. **Historique** les liste avec **Lancée** ou **Proposée** ; **Oublier** (ou **Tout oublier**) permet à une idée de revenir ; une idée encore dans la liste **Plus tard** reste hors des suggestions tant que vous ne l’en retirez pas. Le modèle ne s’exécute que lorsque vous cliquez. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Capture d’écran : Idées de fonctionnalités"></a> |
40
40
  | **Recherche dans le contenu** | La recherche de la barre latérale de dsh (la loupe à côté d’**Espaces de travail** ; `Cmd+K` dans l’app de bureau, `Cmd+Alt+K` dans un navigateur) trouve aussi les discussions par les mots de vos messages et des réponses, et pas seulement par leur titre. Elle affiche le texte correspondant sous la discussion. dsh a déjà cette recherche, mais la livre désactivée ; cette fonctionnalité l’active avec un fichier d’index de recherche sur votre ordinateur. L’index est créé à la première recherche après un démarrage (environ 15 s pour 250 discussions, voir Limites) et il est conservé pour les démarrages suivants. Activée par défaut ; un changement s’applique après le redémarrage de dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Capture d’écran : Recherche dans le contenu"></a> |
41
41
  | **Annulation de tour** | Survolez un de vos messages et cliquez sur **↶** (à côté de Copier). **Discussion uniquement** retire ce message et tout ce qui suit (réponses, appels d’outils) de la discussion et du contexte du modèle, puis remet le message dans la zone de saisie : modifiez-le et envoyez-le à nouveau. **Discussion et fichiers** liste d’abord les fichiers du projet qui ont changé depuis ce message, puis les remet aussi dans l’état où ils étaient, y compris les modifications faites par des commandes (`bash`), et pas seulement par les outils d’édition de dsh. Un tour en cours s’arrête d’abord. Le journal de la discussion n’est jamais réécrit : un seul marqueur caché masque la partie retirée, de la même façon que la commande `/compact` de dsh masque les anciens messages. Si [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) est installé, c’est lui qui fait ce travail et Composer Plus n’affiche pas de second bouton. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Capture d’écran : Annulation de tour"></a> |
42
42
  | **Supprimer la discussion** | Barre latérale → menu **…** d’une discussion (ou clic droit) → **Supprimer…** → **Supprimer**. dsh seul ne peut qu’archiver. La discussion s’arrête (son tour, ses tâches en arrière-plan, ses sous-agents et ses rappels planifiés, comme avec l’archivage de dsh) et son historique enregistré, avec les discussions de ses sous-agents, est déplacé dans la Corbeille de macOS (sur les autres systèmes : `$DSH_HOME/trash`). Pour la récupérer, remettez le dossier à sa place et redémarrez dsh : elle apparaît dans la vue **Archivées uniquement** de la barre latérale. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Capture d’écran : Supprimer la discussion"></a> |
@@ -44,11 +44,15 @@ Redémarrez ensuite dsh. (La CLI ne peut pas installer dans le profil de bureau
44
44
  | **Historique de saisie** | Dans une zone de saisie vide, appuyez sur `↑` / `↓` pour parcourir les messages envoyés, comme dans un terminal. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Capture d’écran : Historique de saisie"></a> |
45
45
  | **Raccourci du mode plan** | `Shift+Tab` ajoute `/plan ` au début du brouillon (appuyez de nouveau pour le retirer). Si la discussion est déjà en mode plan, `Shift+Tab` quitte ce mode. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Capture d’écran : Raccourci du mode plan"></a> |
46
46
  | **Garder le focus dans la zone de saisie** | Après l’envoi d’une commande `/` ou d’une compétence, le curseur reste dans la zone de saisie et vous pouvez taper de nouveau tout de suite. Cela fonctionne aussi pour les macros clavier qui tapent une commande et appuient sur `Enter`. dsh met la zone de saisie en lecture seule pendant qu’il résout la commande, et le navigateur retire alors le focus. Cette fonctionnalité remet le focus, sauf si un menu, une boîte de dialogue ou un autre champ l’a. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Capture d’écran : Garder le focus dans la zone de saisie"></a> |
47
- | **Continuer en un clic** | Après un tour arrêté, en échec ou interrompu, une zone de saisie vide affiche **▶**. Un clic reprend la conversation existante, sans écrire dans le champ de saisie ni ajouter de message visible à la discussion (le modèle reçoit une courte note cachée « continue là où tu t’es arrêté », car certains fournisseurs, comme Claude, refusent une requête qui se termine par une réponse de l’assistant). Un tour terminé garde le bouton Envoyer habituel. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Capture d’écran : Continuer en un clic"></a> |
47
+ | **Continuer en un clic** | Après un tour arrêté, en échec ou interrompu, une zone de saisie vide affiche **▶**. Un clic reprend la conversation existante, sans écrire dans le champ de saisie ni ajouter de message visible à la discussion (le modèle reçoit une courte note cachée « continue là où tu t’es arrêté », car certains fournisseurs, comme Claude, refusent une requête qui se termine par une réponse de l’assistant). Les messages de la file y restent : ▶ reprend seulement la tâche arrêtée, puis la file s’exécute. Un tour terminé garde le bouton Envoyer habituel. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Capture d’écran : Continuer en un clic"></a> |
48
48
  | **Reprendre après redémarrage** | Désactivée par défaut : activez-la dans **Réglages → Composer Plus**. Si vous quittez dsh (ou s’il se ferme) pendant qu’une discussion travaille, cette discussion reprend d’elle-même quand vous rouvrez dsh, avec la même note cachée que Continuer en un clic. Si une itération d’objectif (`/goal`) était en cours, l’objectif passe à l’itération suivante (dsh suspend les objectifs à chaque démarrage jusqu’à ce que vous les repreniez). Les discussions que vous avez arrêtées, terminées ou en échec ne reprennent pas. dsh lui-même n’a pas de réglage pour cela : il marque seulement ce tour comme interrompu. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Capture d’écran : Reprendre après redémarrage"></a> |
49
49
  | **Glisser-déposer dans la file** | Les messages en file d’attente reçoivent une poignée (⠿). Faites-la glisser pour réordonner, ou placez le focus sur la poignée et appuyez sur `↑` / `↓`. `Esc` annule. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Capture d’écran : Glisser-déposer dans la file"></a> |
50
50
  | **Copier le lien de session** | Clic droit sur une discussion dans la barre latérale → **Copier le lien de session**. Collez le lien `dsh-session:…` dans une autre discussion pour y joindre cette discussion comme contexte en lecture seule. dsh 0.2.1 a son propre **Copier l’ID de session**, qui ne copie que l’identifiant brut ; cet élément vient juste après. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Capture d’écran : Copier le lien de session"></a> |
51
+ | **Exporter la discussion en Markdown** | Clic droit sur une discussion dans la barre latérale (ou ouvrez son menu **…**) → **Exporter en Markdown…**. Une boîte de dialogue indique combien de messages la discussion contient ; **Copier dans le presse-papiers** copie la discussion en Markdown, **Enregistrer le fichier .md** l’enregistre sous `<chat title>.md` via le téléchargement du navigateur (dsh de bureau : dans votre dossier Téléchargements ou via une boîte de dialogue d’enregistrement, selon les réglages de votre système). Le fichier contient le titre de la discussion, le nom du projet et la date, puis une section `## Vous` ou `## Assistant` par message. Les blocs de code restent tels quels ; un bloc de code qu’un message laisse ouvert est fermé. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Capture d’écran : Exporter la discussion en Markdown"></a> |
51
52
  | **Copier le chemin du projet** | Clic droit sur un projet dans la barre latérale → **Copier le chemin** copie le chemin complet de son dossier. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Capture d’écran : Copier le chemin du projet"></a> |
53
+ | **Recherche de projet dans une nouvelle discussion** | Nouvelle discussion → le bouton de projet au-dessus de la zone de saisie. Les projets s’affichent dans l’ordre A–Z, avec un champ **Rechercher des projets** en haut. Tapez une partie d’un nom (sans tenir compte de la casse ni des accents) et appuyez sur `Enter` pour choisir le premier résultat. Si rien ne correspond, **Aucun projet ne correspond** s’affiche. L’ordre des projets enregistré par dsh dans la barre latérale ne change pas. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Capture d’écran : Recherche de projet dans une nouvelle discussion"></a> |
54
+ | **Prédiction du message suivant** | Activée par défaut ; vous pouvez la désactiver dans **Réglages → Composer Plus**. Quand l’agent termine un tour (pas un tour arrêté ou en échec), la zone de saisie vide affiche en gris une prédiction de votre prochain message, avec l’indication **Tab pour accepter**. `Tab` place le texte dans la zone de saisie, sans l’envoyer. `Esc` la masque pour ce tour. Taper du texte la masque aussi, et un nouveau tour la remplace. Le menu **Modèle**, sous l’interrupteur, liste les modèles de dsh (la même liste que le menu des modèles de dsh). **Défaut de dsh** est sélectionné par défaut et suit le modèle par défaut de dsh. Chaque tour terminé coûte un court appel au modèle. Dans Tether, la prédiction s’affiche au-dessus de la zone de saisie vide : touchez-la pour la placer dans le champ. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Capture d’écran : Prédiction du message suivant"></a> |
55
+ | **Compléter pendant la saisie** | Désactivé par défaut ; vous pouvez l’activer dans **Réglages → Composer Plus**. Pendant que vous tapez, un texte gris juste après le curseur montre comment votre message peut continuer. `Tab` l’ajoute au message, sans l’envoyer. `Esc` le masque. Si vous tapez les lettres suivantes du texte gris, il reste affiché, sans nouvel appel au modèle. Cette fonctionnalité a son propre menu **Modèle** sous son interrupteur. Sa première option, **Comme la prédiction du message suivant**, utilise le modèle de **Prédiction du message suivant** (c’est l’option par défaut) ; choisissez un autre modèle pour utiliser un modèle différent pour chaque fonctionnalité, par exemple un modèle plus rapide pour les complétions. Elle fait un appel au modèle à chaque pause pendant la saisie : elle consomme donc beaucoup plus de tokens que la prédiction. Choisissez un modèle rapide et peu coûteux. Elle ne s’exécute pas pour une commande slash, un message avec une pastille de fichier, ou quand le curseur n’est pas à la fin. Dans Tether, la suite s’affiche au-dessus du champ pendant la saisie : touchez-la pour l’ajouter. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Capture d’écran : Compléter pendant la saisie"></a> |
52
56
  | **Autoriser pour cette discussion** | Quand la revue automatique vous demande votre avis, la carte d’approbation propose **Autoriser pour cette discussion** : le même outil dans la même discussion est ensuite autorisé, quels que soient les arguments. Une pastille dans l’en-tête liste les autorisations et permet de les révoquer. Les autorisations restent valables après un redémarrage. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Capture d’écran : Autoriser pour cette discussion"></a> |
53
57
  | **Statut du projet** | La ligne d’un projet dans la barre latérale affiche le même indicateur en cours / en attente / terminé que ses discussions : même replié, un projet vous indique donc qu’une discussion travaille ou a besoin de vous. Une discussion qui vous attend s’affiche en premier, puis une discussion terminée que vous n’avez pas encore ouverte (le point vert, même pendant qu’une autre discussion est encore en cours), puis l’indicateur en cours. Survolez-le pour voir les détails. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Capture d’écran : Statut du projet"></a> |
54
58
  | **Projets actifs en premier** | Quand une discussion commence à s’exécuter ou a besoin de vous, son projet monte en haut de la barre latérale avec l’animation de ligne de dsh (le même mouvement que si vous l’y faisiez glisser). Les projets terminés restent à leur place ; faites-les glisser où vous voulez, comme d’habitude. Les déplacements sont enregistrés dans l’ordre des projets de dsh : si vous désactivez cette fonctionnalité, l’ordre actuel reste. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Capture d’écran : Projets actifs en premier"></a> |
@@ -57,14 +61,14 @@ Redémarrez ensuite dsh. (La CLI ne peut pas installer dans le profil de bureau
57
61
  | **Trier par état** | Barre latérale → options d’affichage → **Trier par** → **Par état** (avec **Dans une seule liste**). Les discussions terminées viennent en premier (le point « terminé » de dsh, qu’un tour terminé par une erreur reçoit aussi), puis les discussions en cours ou en attente, puis celles qui ont une automatisation active (Schedule), puis les autres dans l’ordre de dsh. Quand vous ouvrez une discussion terminée, elle descend. Seul l’affichage change : sélectionnez **Ordre manuel** ou **Dernière mise à jour** pour revenir en arrière. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Capture d’écran : Trier par état"></a> |
58
62
  | **Notifications en arrière-plan** | Quand dsh est en arrière-plan, vous recevez une notification quand un tour se termine (première ligne de la réponse) ou quand une discussion vous attend vraiment : une approbation (nom de l’outil), une réponse (la question) ou une revue de plan. Une demande doit être encore ouverte 1,5 s plus tard : les approbations données automatiquement (autorisations de la revue automatique, autres plugins) restent donc silencieuses, et une notification est retirée dès que sa demande reçoit une réponse. La pastille du Dock / de la barre des tâches compte les discussions en attente. Un clic sur la notification ouvre cette discussion. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Capture d’écran : Notifications en arrière-plan"></a> |
59
63
  | **11 langues d’interface supplémentaires** | Réglages → Composer Plus → **Langue de l’application** passe toute l’interface de dsh en Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt ou हिन्दी (voir ci-dessous). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Capture d’écran : 11 langues d’interface supplémentaires"></a> |
60
- | **Connexion mobile (iPhone)** | Utilisez dsh depuis votre iPhone avec l’app [Tether](tether/), sur le même réseau Wi-Fi ou via [Tailscale](https://tailscale.com). Activez-la dans **Réglages → Composer Plus** (elle est désactivée par défaut, car elle ouvre un port réseau sur ce Mac). Cliquez ensuite sur **Connexion mobile** en bas à gauche de la barre latérale : scannez le code QR dans Tether et cliquez sur **Approve**. Le téléphone affiche vos discussions, envoie des messages, répond aux approbations et aux questions, et change de modèle et d’agent. Appairez autant de Mac que vous voulez : le nom du Mac, en haut à gauche de l’app, permet de passer de l’un à l’autre. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Capture d’écran : Connexion mobile"></a> |
64
+ | **Connexion mobile (iPhone)** | Utilisez dsh depuis votre iPhone avec l’app [Tether](tether/), sur le même réseau Wi-Fi ou via [Tailscale](https://tailscale.com). Activez-la dans **Réglages → Composer Plus** (elle est désactivée par défaut, car elle ouvre un port réseau sur ce Mac). Cliquez ensuite sur **Connexion mobile** en bas à gauche de la barre latérale : scannez le code QR avec l’app Appareil photo de l’iPhone (touchez **Open in Tether**) ou avec **Scan code** dans Tether, touchez **Connect** et cliquez sur **Approve**. Installez d’abord Tether : sans elle, l’app Appareil photo ne peut pas ouvrir le code. Le téléphone affiche vos discussions, envoie des messages, répond aux approbations et aux questions, et change de modèle et d’agent. Appairez autant de Mac que vous voulez : le nom du Mac, en haut à gauche de l’app, permet de passer de l’un à l’autre. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Capture d’écran : Connexion mobile"></a> |
61
65
  | **Mises à jour automatiques** | Au démarrage de dsh, le plugin vérifie la [dernière version sur GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Si elle est plus récente et déjà sur npm, il installe exactement cette version avec le gestionnaire de plugins de dsh (le même chemin que Réglages → Plugins) et vous avertit. **Redémarrez dsh** pour la charger. **Réglages → Composer Plus → Mises à jour de Composer Plus** affiche la version et propose **Rechercher des mises à jour** / **Mettre à jour**. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Capture d’écran : Mises à jour automatiques"></a> |
62
66
 
63
67
  Les boutons, info-bulles, messages et notifications suivent la langue choisie dans dsh (voir Langue de l’application ci-dessous).
64
68
 
65
69
  ## Réglages
66
70
 
67
- Chaque fonctionnalité peut être activée ou désactivée séparément : dsh **Réglages → Composer Plus**. Chaque ligne a une petite capture d’écran : survolez-la pour un aperçu plus grand, cliquez dessus pour l’ouvrir en taille réelle (`Esc` la ferme). La zone **Rechercher des fonctionnalités**, en haut, filtre la page par nom ou par description (dans toutes les langues, sans tenir compte de la casse ni des accents) ; `Esc` la vide. Chaque ligne a un interrupteur et une courte description ; les changements s’appliquent tout de suite, sans redémarrage, et sont mémorisés sur cet appareil. Tout est activé par défaut, sauf **Connexion mobile** et **Reprendre après redémarrage**. L’hôte de dsh garde les interrupteurs de ces deux fonctionnalités, ainsi que ceux de **Recherche dans le contenu** et d’**Annulation de tour** : ils s’appliquent donc à toutes les fenêtres et restent valables après un redémarrage. **Recherche dans le contenu** ne change qu’après un redémarrage de dsh (dsh lit ce réglage au démarrage) ; d’ici là, sa ligne indique **Redémarrez dsh pour appliquer ce changement.**
71
+ Chaque fonctionnalité peut être activée ou désactivée séparément : dsh **Réglages → Composer Plus**. Chaque ligne a une petite capture d’écran : survolez-la pour un aperçu plus grand, cliquez dessus pour l’ouvrir en taille réelle (`Esc` la ferme). La zone **Rechercher des fonctionnalités**, en haut, filtre la page par nom ou par description (dans toutes les langues, sans tenir compte de la casse ni des accents) ; `Esc` la vide. Chaque ligne a un interrupteur et une courte description ; les changements s’appliquent tout de suite, sans redémarrage, et sont mémorisés sur cet appareil. Tout est activé par défaut, sauf **Connexion mobile**, **Reprendre après redémarrage** et **Compléter pendant la saisie**. L’hôte de dsh garde les interrupteurs de ces trois fonctionnalités, ainsi que ceux de **Recherche dans le contenu**, d’**Annulation de tour** et de **Prédiction du message suivant** : ils s’appliquent donc à toutes les fenêtres et restent valables après un redémarrage. L’hôte garde aussi le **Modèle** choisi pour **Prédiction du message suivant** et celui de **Compléter pendant la saisie** (par défaut **Comme la prédiction du message suivant**). **Recherche dans le contenu** ne change qu’après un redémarrage de dsh (dsh lit ce réglage au démarrage) ; d’ici là, sa ligne indique **Redémarrez dsh pour appliquer ce changement.**
68
72
 
69
73
  <p align="center"><img src="docs/images/settings.webp" width="720" alt="Réglages → Composer Plus : recherche de fonctionnalités, sélecteur de langue, ligne des mises à jour et un interrupteur par fonctionnalité, avec un aperçu de la capture d’écran au survol"></p>
70
74
 
@@ -92,6 +96,12 @@ Chaque pack contient 3 143 textes : tous les textes d’interface de dsh `0.2.0-
92
96
  | `↓` | page Idées de fonctionnalités | garder la carte du dessus dans la liste Plus tard du projet |
93
97
  | `↑` | page Idées de fonctionnalités | créer la carte du dessus maintenant, sans plan |
94
98
  | `Z` | page Idées de fonctionnalités | ramener la dernière carte ignorée |
99
+ | `Enter` | menu des projets d’une nouvelle discussion, champ de recherche | choisir le premier résultat |
100
+ | `↑` / `↓` | menu des projets d’une nouvelle discussion | parcourir les projets affichés |
101
+ | `Esc` | menu des projets d’une nouvelle discussion, champ de recherche | effacer la recherche (appuyez de nouveau pour fermer le menu) |
102
+ | `Tab` | zone de saisie vide avec une prédiction | placer la prédiction dans la zone de saisie |
103
+ | `Tab` | complétion grise après le curseur | ajouter la complétion au message |
104
+ | `Esc` | zone de saisie vide avec une prédiction | masquer la prédiction |
95
105
 
96
106
  Quand un menu `/` ou `@` est ouvert, il garde ces touches pour lui.
97
107
 
@@ -108,16 +118,19 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
108
118
  - **Idées de fonctionnalités :** rien ne s’exécute tant que vous ne cliquez pas sur **Suggérer des fonctionnalités**. La partie hôte lit alors uniquement le dossier de la discussion (le navigateur n’envoie jamais de chemin) : les noms des entrées de premier niveau, les 6 premiers ko du README, d’AGENTS.md et du manifeste (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …) et `git log --oneline -15`, 16 ko au plus au total. Elle ignore `.env*`, les fichiers de clés et les dossiers comme `node_modules`, et elle ne lit que des fichiers ordinaires qui restent dans le dossier : un lien symbolique qui pointe hors du dossier, une FIFO ou un périphérique est ignoré. Ce résumé est envoyé au modèle utilisé par la discussion, via les réglages de fournisseur de dsh, en une seule requête ; il n’est ajouté à aucune discussion. Rien n’est écrit dans le projet. Une idée balayée vers la droite lance une nouvelle discussion en mode plan : les approbations et la revue du plan s’appliquent donc comme d’habitude. **Créer maintenant** lance la discussion sans mode plan : le modèle peut modifier des fichiers tout de suite, avec les approbations habituelles de la discussion et la revue automatique. Les idées gardées pour plus tard (titre, résumé, raison, effort) sont conservées avec le chemin du dossier du projet dans `storages/dsh-composer-plus/later.json`, dans le dossier personnel de dsh (fichier réservé au propriétaire) ; rien ne va dans le projet. L’historique des idées suggérées (titre, résumé, raison, effort, date, lancée ou non) est conservé de la même façon dans `storages/dsh-composer-plus/idea-history.json`, au plus 200 par projet (les plus anciennes partent en premier) ; ses titres vont au modèle avec la prochaine demande **Suggérer des fonctionnalités** de ce projet.
109
119
  - **Recherche dans le contenu :** aucun nouveau code ne cherche dans vos discussions. Le plugin active seulement l’index des messages de dsh lui-même (SQLite FTS5, `dsh-session-query-sqlite`) et lui donne un fichier, `$DSH_HOME/cache/composer-plus/session-search.db` (fichier et dossier réservés au propriétaire). Ce fichier contient le texte de vos messages et de ceux de l’assistant : il est donc aussi privé que les journaux de discussion dans `$DSH_HOME/sessions`. Rien ne quitte votre machine. C’est une copie que dsh peut recréer : vous pouvez la supprimer quand dsh est fermé. L’interrupteur se trouve dans `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
110
120
  - **Annulation de tour :** avant chacun de vos messages, l’hôte prend un instantané git du dossier de la discussion dans son propre stockage, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (dossier réservé au propriétaire). Ce stockage contient des copies des fichiers de ce dossier que git voit (pas les fichiers ignorés) : il est donc aussi privé que le projet. Il lit les objets de votre dépôt (sans copier ce que git a déjà) et n’écrit jamais l’index, `HEAD`, les branches, les tags, le stash ni la config de votre dépôt ; le seul changement que git y fait est une date plus récente sur les fichiers d’objets qu’il réutilise (cela retarde leur nettoyage par `git gc`). Une annulation avec fichiers n’écrit que des fichiers ordinaires dans le dossier de la discussion ; elle ignore les liens symboliques, les pipes et tout ce qui est hors du dossier. Rien ne quitte votre machine. Vous pouvez supprimer ce stockage quand dsh est fermé (l’annulation ne fonctionne alors que pour la discussion, jusqu’aux nouveaux messages). **Supprimer la discussion** supprime aussi le stockage d’une discussion. L’interrupteur se trouve dans `$DSH_HOME/storages/dsh-composer-plus/rollback.json`.
121
+ - **Exporter la discussion en Markdown :** la partie hôte lit seulement le journal de la discussion elle-même (les mêmes messages que dsh affiche) et les donne à la page ; elle ne lit aucun fichier du projet et n’envoie rien sur le réseau. Le Markdown va seulement dans votre presse-papiers ou dans le fichier que vous enregistrez.
111
122
  - **Supprimer la discussion :** déplace les dossiers de journaux de la discussion elle-même (`$DSH_HOME/sessions/<project>/<chat>`) dans la Corbeille. Le dossier du projet n’est pas touché.
112
123
  - **Autoriser pour cette discussion :** les autorisations sont enregistrées dans `$DSH_HOME/storages/dsh-composer-plus/grants.json` (accès réservé au propriétaire). Une autorisation couvre **un seul outil précis dans une seule discussion**. Si cet outil peut écrire, l’autorisation couvre aussi toute écriture. Révoquez-la depuis la pastille de l’en-tête.
113
124
  - La revue automatique s’exécute toujours à chaque appel ; les échecs de revue ne sont jamais autorisés automatiquement.
114
125
  - **Connexion mobile :** désactivée tant que vous ne l’activez pas. Quand elle est activée, la partie hôte exécute la passerelle Tether : HTTPS sur le port 19390, qui n’accepte que votre sous-réseau Wi-Fi et votre tailnet (100.64.0.0/10), et une page d’appairage sur `127.0.0.1:19391` (ce Mac uniquement). Un téléphone a besoin d’un code à usage unique tiré du code QR (valable 5 minutes) et d’un clic sur **Approve** sur le Mac. Le téléphone épingle le certificat de la passerelle. Le Mac ne garde qu’un hachage du jeton de chaque téléphone (30 jours, renouvelé tant qu’il sert) ; **Revoke** ferme tout de suite les connexions de ce téléphone. Les téléphones ne peuvent appeler qu’une liste autorisée de méthodes dsh (discussions, prompts, pièces jointes, commandes slash, approbations, questions, modèles, agents, objectifs), et pas les réglages, les identifiants, l’explorateur de fichiers ni le terminal. Données : `$DSH_HOME/storages/dsh-composer-plus/mobile/`. Détails : [tether/README.md](tether/README.md).
115
126
  - **Mises à jour :** la partie hôte demande la dernière version à `api.github.com`, puis cette version précise à `registry.npmjs.org` ; rien sur vous ni sur vos discussions n’est envoyé. L’installation passe par le gestionnaire de plugins de dsh (`pnpm add dsh-composer-plus@<version>` ; quand dsh 0.2.1 le refuse pour un plugin déjà installé, `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, et le profil indique ensuite cette URL comme source du plugin) : le registre, les scripts et les vérifications de compatibilité de version de dsh s’appliquent donc. Les tags de préversion et les versions plus anciennes ne sont jamais installés.
127
+ - **Prédiction du message suivant :** activée par défaut ; désactivez-la dans **Réglages → Composer Plus** pour arrêter ces appels au modèle. Après chaque tour terminé, la partie hôte envoie vos propres messages de la discussion et les réponses texte de l’agent (sans sortie d’outil, sans contexte caché ni raisonnement), environ 6 000 caractères au plus (la partie la plus récente), au modèle choisi (celui par défaut de dsh, sauf si vous en choisissez un autre). L’envoi passe par les réglages de fournisseur de dsh, en une seule requête. Rien n’est enregistré dans la discussion : la prédiction n’est pas ajoutée à l’historique. L’interrupteur et le modèle choisi sont dans `$DSH_HOME/storages/dsh-composer-plus/predict.json` (fichier réservé au propriétaire).
128
+ - **Compléter pendant la saisie :** désactivé tant que vous ne l’activez pas. Quand il est activé, à chaque pause pendant la saisie, la partie hôte envoie le texte déjà saisi, ainsi que vos propres messages de la discussion et les réponses texte de l’agent (sans sortie d’outil, sans contexte caché ni raisonnement), environ 3 000 caractères de discussion au plus, au modèle choisi sous **Compléter pendant la saisie** (par défaut, le modèle de **Prédiction du message suivant**). Une pause plus récente arrête la requête précédente. Rien n’est enregistré dans la discussion. L’interrupteur est dans `$DSH_HOME/storages/dsh-composer-plus/complete.json` (fichier réservé au propriétaire).
116
129
 
117
130
  ## Dépannage
118
131
 
119
132
  - **Aucune notification sur macOS :** Réglages Système → Notifications → DeepSeek Harness → autorisez les notifications. Choisissez **Alertes** pour qu’elles restent à l’écran.
120
- - **▶, les poignées de file, le statut du projet, l’option des projets récents, Réduire tous les projets, Copier le chemin, Autoriser pour cette discussion ou le clic droit manquent après une mise à jour de dsh :** ces éléments s’attachent au HTML actuel de dsh, car dsh n’a pas encore d’emplacement prévu pour eux. Si dsh change ce balisage, ils se masquent ; rien d’autre ne casse. Merci d’ouvrir une [issue](https://github.com/furkancak1r/dsh-composer-plus/issues).
133
+ - **▶, les poignées de file, le statut du projet, l’option des projets récents, Réduire tous les projets, Copier le chemin, le champ de recherche de projet, la prédiction du message suivant, la complétion pendant la saisie, Autoriser pour cette discussion ou le clic droit manquent après une mise à jour de dsh :** ces éléments s’attachent au HTML actuel de dsh, car dsh n’a pas encore d’emplacement prévu pour eux. Si dsh change ce balisage, ils se masquent ; rien d’autre ne casse. Merci d’ouvrir une [issue](https://github.com/furkancak1r/dsh-composer-plus/issues).
121
134
  - **« Échec de la mise à jour » ou « n’a pas été installée depuis npm » :** une copie liée depuis un dossier local ou renommée ne peut pas se mettre à jour elle-même ; réinstallez `dsh-composer-plus` depuis Réglages → Plugins. Sinon, le message affiche la première ligne de l’erreur de pnpm ; **Rechercher des mises à jour** réessaie.
122
135
  - **Connexion mobile indique que la passerelle ne fonctionne pas :** « no IPv4 address on en0 » signifie que ce Mac n’a pas d’adresse Wi-Fi/Ethernet ; « EADDRINUSE » signifie qu’un autre dsh (ou une autre app) utilise le port 19390 ou 19391. Un seul dsh à la fois peut exécuter Connexion mobile.
123
136
  - **Connexion mobile, Reprendre après redémarrage ou Recherche dans le contenu indique « Redémarrez dsh » :** le plugin a été mis à jour pendant que dsh tournait (ou, pour Recherche dans le contenu, vous avez changé l’interrupteur) ; le nouvel état se charge après un redémarrage.
@@ -126,12 +139,13 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
126
139
  - **Discussion et fichiers est grisé :** le projet n’est pas un dépôt git, il n’y a pas d’instantané d’avant ce message (le message est plus ancien que le plugin, ou l’un des 50 instantanés les plus récents l’a remplacé), ou aucun fichier n’a changé.
127
140
  - **Supprimer indique qu’un autre dsh a cette discussion ouverte :** un second dsh qui utilise le même dossier personnel de dsh détient le verrou de la discussion. Fermez cette fenêtre ou ce dsh, puis supprimez de nouveau. En attendant, la discussion reste archivée.
128
141
  - **Une discussion n’a pas repris après un redémarrage :** Reprendre après redémarrage était désactivée quand dsh s’est fermé, vous avez arrêté ce tour vous-même, le tour était fini (terminé ou en échec), la discussion était archivée, ou plus de 20 discussions étaient en cours (les 20 plus récentes reprennent).
129
- - **L’installation échoue juste après une nouvelle version :** ajoutez la version (`dsh-composer-plus@1.10.0`) ; voir la note d’installation plus haut.
142
+ - **L’installation échoue juste après une nouvelle version :** ajoutez la version (`dsh-composer-plus@1.11.1`) ; voir la note d’installation plus haut.
130
143
 
131
144
  ## Limites
132
145
 
133
146
  - Continuer sans message repose sur le cycle de vie `agent/pre-step` → `agent/request` de dsh. Vérifiez de nouveau la compatibilité quand vous mettez dsh à jour.
134
- - **Idées de fonctionnalités** garde les cartes en mémoire pour chaque discussion jusqu’au rechargement de dsh ou de la page ; ensuite, **Suggérer des fonctionnalités** interroge de nouveau le modèle. Les cartes arrivent dans la langue d’interface de dsh au moment du clic ; si vous changez de langue, les cartes déjà dans la pile gardent la leur et **Plus d’idées** utilise la nouvelle. Le modèle ne voit que le court résumé du projet, pas le code : une idée peut donc répéter une chose que le projet a déjà ; ignorez-la. La nouvelle discussion s’exécute en mode plan seulement si le profil a la commande `/plan` de dsh ; sinon, l’idée part comme un premier message ordinaire. La liste **Plus tard** appartient au chemin du dossier de la discussion : le même dossier ouvert via un lien symbolique a sa propre liste. Elle garde au plus 50 idées par projet (retirez-en une pour en ajouter d’autres) et un même titre une seule fois. Faire glisser une carte décide seulement entre gauche et droite ; utilisez **↓** pour la garder et **▶** pour la créer maintenant. Une répétition est détectée par son titre seulement : le modèle peut encore suggérer une idée déjà vue sous un autre nom ; ignorez-la. Quand le modèle ne répond que par des idées déjà vues, rien de nouveau ne s’affiche : cliquez de nouveau.
147
+ - **Idées de fonctionnalités** garde les cartes en mémoire pour chaque discussion jusqu’au rechargement de dsh ou de la page ; ensuite, **Suggérer des fonctionnalités** interroge de nouveau le modèle. Les cartes arrivent dans la langue d’interface de dsh au moment du clic ; si vous changez de langue, les cartes déjà dans la pile gardent la leur et **Plus d’idées** utilise la nouvelle. Le modèle ne voit que le court résumé du projet, pas le code : une idée peut donc répéter une chose que le projet a déjà ; ignorez-la. La nouvelle discussion s’exécute en mode plan seulement si le profil a la commande `/plan` de dsh ; sinon, l’idée part comme un premier message ordinaire. La liste **Plus tard** appartient au chemin du dossier de la discussion : le même dossier ouvert via un lien symbolique a sa propre liste. Elle garde au plus 50 idées par projet (retirez-en une pour en ajouter d’autres) et un même titre une seule fois. Faire glisser une carte décide seulement entre gauche et droite ; utilisez **↓** pour la garder et **▶** pour la créer maintenant. Une répétition est détectée par son titre seulement : le modèle peut encore suggérer une idée déjà vue sous un autre nom ; ignorez-la. Quand le modèle ne répond que par des idées déjà vues, rien de nouveau ne s’affiche : cliquez de nouveau. Un thème ciblé étroit rend cela plus probable ; utilisez un thème plus large ou effacez-le. Le thème ciblé reste dans le champ pour chaque discussion jusqu’au rechargement de dsh ou de la page.
148
+ - **Exporter la discussion en Markdown** ne contient que vos propres messages et les réponses texte de l’assistant : les appels d’outils et leur sortie, le raisonnement, les images (une ligne `[image]` les signale), le contexte caché et les messages que l’Annulation de tour ou dsh-rewind-plugin a retirés sont laissés de côté. Les réponses d’un même tour sont réunies en une seule section. Un export contient au plus environ 4 millions de caractères ; une discussion plus longue donne sa première partie et une note.
135
149
  - **Reprendre après redémarrage** continue le tour ; il ne le rejoue pas. Un appel d’outil en cours au moment de la fermeture se termine avec le résultat « inconnu » de dsh, et le modèle reçoit la consigne de ne pas refaire le travail terminé ; mais une commande qu’il est risqué d’exécuter deux fois peut s’exécuter de nouveau. Les sous-agents, approbations et questions ouverts ne sont pas restaurés : leur discussion parente continue et pose de nouveau la demande. Au plus 20 discussions reprennent à un même démarrage.
136
150
 
137
151
  - **Recherche dans le contenu** est la recherche de dsh lui-même : elle a donc les limites de dsh. Elle ne cherche que dans les messages de l’utilisateur et de l’assistant : pas dans la sortie des outils (commandes, contenu des fichiers, résultats), pas dans le raisonnement, et elle n’a pas de filtre par message utilisateur, assistant ou outil. Elle trouve des mots entiers, pas des parties de mot (`deploy` ne trouve pas `deployment`) ; les lettres accentuées correspondent aussi sans accent (`seker` trouve `şeker`). Une ligne par discussion, avec l’extrait de 240 caractères de dsh, 20 lignes au plus.
@@ -139,7 +153,7 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
139
153
  - **Recherche dans le contenu** ne s’applique qu’après un redémarrage de dsh, et le fichier d’index est partagé par tous les dsh qui utilisent le même dossier personnel de dsh : n’exécutez qu’un seul de ces dsh à la fois (dsh n’autorise qu’un propriétaire par fichier d’index).
140
154
  - **Annulation de tour** ne remet les fichiers en place que dans un dépôt git, et seulement dans le dossier de la discussion. Elle garde les 50 instantanés les plus récents par discussion. Les fichiers ignorés (`.gitignore`, `info/exclude`, votre fichier d’exclusion global), les dossiers vides, les liens symboliques et les sous-modules ne sont pas remis en place ; un fichier qui était ignoré lors de la prise de l’instantané n’est jamais supprimé, même si le tour a changé les règles d’exclusion. Un fichier que git ne peut pas lire est exclu de l’instantané. Chacun de vos messages exécute un `git add --all` du dossier de la discussion dans le stockage privé : dans un très grand dossier avec beaucoup de fichiers non suivis, cela peut prendre quelques secondes, et l’appel d’outil suivant l’attend (10 s au plus ; l’instantané se termine ensuite en arrière-plan). Si le `git gc` de votre dépôt supprime un objet dont un ancien instantané a besoin, ce fichier est listé comme non remis en place. Seul le texte du message revient dans la zone de saisie : ajoutez de nouveau ses images ou ses fichiers. Les discussions de sous-agents n’ont pas de ↶ (les modifications de fichiers d’un sous-agent comptent comme des modifications de la discussion qui l’a lancé). La discussion exportée (`/export`) contient toujours les messages retirés. L’idée d’un seul marqueur caché qui retire une partie d’une discussion vient de [dsh-rewind-plugin](https://github.com/SiriLee/dsh-rewind) de SiriLee (MIT) ; Composer Plus n’en utilise aucun code.
141
155
  - **Supprimer la discussion** a besoin de l’archivage de dsh (dsh 0.2.0 et versions ultérieures). Une discussion (ou une des discussions de ses sous-agents) qui ne s’arrête pas dans les 15 s, ou qu’un autre dsh détient, reste archivée et rien n’est déplacé. Sur les systèmes autres que macOS, le dossier de corbeille doit être sur le même disque que l’historique des discussions. Une discussion ouverte que vous supprimez reste dans la mémoire de dsh, archivée et masquée, jusqu’au redémarrage de dsh. Videz la Corbeille vous-même ; dsh ne le fait pas.
142
- - La file d’attente de dsh n’a pas d’action `move` : un réordonnancement réécrit donc le texte des lignes concernées. Si l’agent prend une ligne pendant le déplacement, le déplacement est annulé et rien n’est perdu. Les messages avec des images ou des fichiers ne peuvent pas être déplacés.
156
+ - La file d’attente de dsh n’a pas d’action `move` : la partie hôte du plugin déplace donc le message lui-même dans la file d’attente de dsh (une seule modification, le même message). Les messages avec des images ou des fichiers se déplacent aussi. Seuls vos propres messages se déplacent : une itération d’objectif ou une réponse à une question dans la file reste à sa place. Si l’envoi d’un message commence pendant que vous faites glisser, rien n’est déplacé et un avis le signale.
143
157
  - dsh 0.2.1 charge une mise à jour immédiatement quand la nouvelle version ne modifie aucun réglage de dsh ; sinon, et sur dsh 0.2.0, redémarrez dsh pour la charger. Le plugin ne redémarre jamais dsh à votre place. Les profils web/CLI sans le gestionnaire de plugins de dsh signalent seulement qu’une nouvelle version existe.
144
158
  - **Garder le focus dans la zone de saisie** ne rend le focus qu’après une commande `/` ou une compétence. Pendant que dsh résout la commande, la zone de saisie reste en lecture seule pendant quelques millisecondes : les touches tapées pendant ce temps sont perdues. Si le menu `/` de dsh est encore ouvert, `Enter` choisit la ligne en surbrillance et n’envoie pas le message.
145
159
  - **Connexion mobile** ne fonctionne que sur macOS (elle utilise `en0`, `openssl`, `swift` et `dns-sd`). Elle utilise les ports fixes 19390 et 19391 : un seul dsh par Mac peut donc l’exécuter à la fois (chaque Mac est une entrée dans la liste des Mac du téléphone). Le téléphone ne reçoit des notifications que lorsque Tether est ouvert ou vient de passer en arrière-plan (pas de service push). L’app iOS n’est pas encore sur l’App Store : compilez-la depuis `tether/ios` avec Xcode.
@@ -148,6 +162,9 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
148
162
  - Les projets actifs sont déplacés avec l’ordre des projets enregistré par dsh : le nouvel ordre est donc conservé après un redémarrage. Les discussions hors de tout projet (« Sans groupe ») ne peuvent pas être déplacées ; dsh les liste toujours en dernier.
149
163
  - dsh n’a pas de point d’extension dans le menu des options d’affichage de la barre latérale : l’option des projets récents est donc ajoutée au menu de dsh lui-même. Si une mise à jour de dsh change ce menu, l’option n’apparaît pas et tous les projets restent visibles. Le filtre agit sur les lignes de projet : **Dans une seule liste** n’est donc pas filtré. Utilisez-le avec **Espace de travail** : dans **Arborescence des espaces de travail**, un dossier parent masqué masque aussi les projets actifs qu’il contient. **Par état** a le même type de limite : dsh n’a pas d’emplacement pour l’ordre, donc l’élément de menu et l’ordre des lignes s’attachent au balisage du menu et de la liste de dsh.
150
164
  - dsh n’a pas non plus de menu de ligne de projet ni d’emplacement dans l’en-tête Espaces de travail. **Copier le chemin** trouve la ligne du projet grâce au balisage des lignes de dsh, et **Réduire tous les projets** se place dans l’en-tête de dsh et ferme chaque projet ouvert avec le même clic que sur la ligne du projet. Si une mise à jour de dsh change ce balisage, le clic droit affiche le menu du navigateur et le bouton n’apparaît pas.
165
+ - dsh n’a pas non plus de point d’extension dans le menu des projets d’une nouvelle discussion : le champ **Rechercher des projets** et l’ordre A–Z s’attachent donc au balisage du menu de dsh. Si une mise à jour de dsh change ce balisage, le menu s’affiche comme dsh le dessine : dans l’ordre enregistré, sans le champ. L’ordre A–Z n’est qu’un affichage : il ne change pas l’ordre des projets enregistré par dsh.
166
+ - dsh n’a pas non plus de point d’extension pour une indication dans la zone de saisie : le texte de **Prédiction du message suivant** se place donc sur le texte indicatif de dsh (`[data-composer-placeholder]`). Si une mise à jour de dsh change ce balisage, aucune prédiction ne s’affiche. Tant qu’elle est activée, chaque tour terminé coûte un court appel au modèle.
167
+ - **Compléter pendant la saisie** affiche son texte au moyen de l’indication de saisie propre à dsh (le style `--dsh-composer-hint` que dsh utilise pour l’indication d’argument d’une commande slash). Cette fonctionnalité ne s’exécute pas pour une commande slash, un message avec une pastille de fichier ou de symbole, ou quand le curseur n’est pas à la fin du message. Si une mise à jour de dsh change ce style, aucune complétion ne s’affiche. Chaque pause pendant la saisie coûte un appel au modèle.
151
168
  - Une prise en charge intégrée est demandée en amont : `move` pour la file dans [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), un état Continuer dans [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
152
169
 
153
170
  ## FAQ
@@ -170,6 +187,8 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
170
187
 
171
188
  **dsh reprend-il les discussions en cours quand je le quitte puis le rouvre ?** Pas tout seul : dsh marque ce tour comme interrompu et attend (un objectif attend aussi `/goal resume`). Activez **Réglages → Composer Plus → Reprendre après redémarrage** : les discussions qui travaillaient quand dsh s’est fermé reprennent alors d’elles-mêmes au démarrage suivant.
172
189
 
190
+ **Quel modèle écrit la prédiction ?** Le modèle que vous choisissez dans **Réglages → Composer Plus → Prédiction du message suivant → Modèle**. La liste est celle des modèles de dsh. **Défaut de dsh** suit le modèle par défaut de dsh. Si dsh ne liste plus le modèle choisi, la prédiction utilise le modèle par défaut. **Compléter pendant la saisie** a son propre menu **Modèle** : **Comme la prédiction du message suivant** (l’option par défaut) suit le modèle de la prédiction ; un autre choix ne sert qu’aux complétions. Si dsh ne liste plus ce modèle, les complétions utilisent le modèle de la prédiction.
191
+
173
192
  **Comment réordonner les messages en file d’attente dans dsh ?** Faites glisser la poignée ⠿ d’un message en file d’attente, ou placez le focus dessus et appuyez sur `↑` / `↓`.
174
193
 
175
194
  **Comment empêcher la revue automatique de redemander pour le même outil dans une discussion ?** Cliquez sur **Autoriser pour cette discussion** sur la carte d’approbation. Cela couvre cet outil précis dans cette discussion seulement ; révoquez l’autorisation depuis la pastille de l’en-tête.
@@ -184,7 +203,7 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
184
203
 
185
204
  **Comment passer l’interface de DeepSeek Harness en turc, en espagnol, en japonais… ?** Réglages → Composer Plus → **Langue de l’application**.
186
205
 
187
- **Comment utiliser dsh depuis mon iPhone ?** Compilez l’app Tether depuis `tether/ios` (Xcode), activez **Réglages → Composer Plus → Connexion mobile (iPhone)**, cliquez sur **Connexion mobile** en bas à gauche, scannez le code QR dans Tether et cliquez sur **Approve**. Hors de chez vous, utilisez Tailscale sur les deux appareils.
206
+ **Comment utiliser dsh depuis mon iPhone ?** Compilez l’app Tether depuis `tether/ios` (Xcode), activez **Réglages → Composer Plus → Connexion mobile (iPhone)**, cliquez sur **Connexion mobile** en bas à gauche, scannez le code QR (avec l’app Appareil photo de l’iPhone ou avec **Scan code** dans Tether), touchez **Connect** et cliquez sur **Approve**. Hors de chez vous, utilisez Tailscale sur les deux appareils.
188
207
 
189
208
  **Est-ce que cela fonctionne avec l’app de bureau ?** Oui : Réglages → Plugins → **Ajouter un plugin** → `dsh-composer-plus`. Testé sur dsh 0.2.0-rc.2 (bureau et web) et 0.2.1-rc.2 (web).
190
209
 
@@ -208,8 +227,10 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/
208
227
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
209
228
  # Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
210
229
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-resume-restart.mjs /path/to/dsh/lib/bin.js
211
- # Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list + its thumbnail
230
+ # Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list, a focus topic chip, Copy as checklist + its thumbnail
212
231
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
232
+ # Export chat as Markdown (fake model, made-up project): right-click → Export as Markdown…, copy and save keep the code blocks, switch off + its thumbnail
233
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-export-markdown.mjs /path/to/dsh/lib/bin.js
213
234
  # Content search (fake model, made-up chats): a message-only word finds its chat with the snippet, switch off + restart = titles only + its thumbnail
214
235
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
215
236
  # Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails