dsh-composer-plus 1.9.1 → 1.10.0
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.de.md +236 -0
- package/README.es.md +236 -0
- package/README.fr.md +236 -0
- package/README.hi.md +236 -0
- package/README.id.md +236 -0
- package/README.ja.md +236 -0
- package/README.ko.md +236 -0
- package/README.md +20 -15
- package/README.pt-BR.md +236 -0
- package/README.ru.md +236 -0
- package/README.tr.md +236 -0
- package/README.vi.md +236 -0
- package/README.zh.md +236 -0
- package/assets/features/featureIdeas.webp +0 -0
- package/client.js +230 -53
- package/index.js +121 -32
- package/package.json +2 -2
package/README.fr.md
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# dsh-composer-plus — Composer Plus pour DeepSeek Harness
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/dsh-composer-plus)
|
|
4
|
+
[](https://github.com/furkancak1r/dsh-composer-plus/actions/workflows/test.yml)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
[English](README.md) · [中文](README.zh.md) · [Türkçe](README.tr.md) · [Español](README.es.md) · [Português (Brasil)](README.pt-BR.md) · **Français** · [Deutsch](README.de.md) · [Русский](README.ru.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Bahasa Indonesia](README.id.md) · [Tiếng Việt](README.vi.md) · [हिन्दी](README.hi.md)
|
|
8
|
+
|
|
9
|
+
Ceci est une traduction. La version de référence est le fichier anglais [README.md](README.md).
|
|
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.
|
|
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.
|
|
14
|
+
|
|
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
|
+
|
|
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.
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
**App de bureau :** Réglages → Plugins → **Ajouter un plugin** → saisissez `dsh-composer-plus` → **Activer maintenant**.
|
|
22
|
+
Vous pouvez aussi coller `https://github.com/furkancak1r/dsh-composer-plus` à la place du nom npm.
|
|
23
|
+
|
|
24
|
+
**Profil web / CLI :**
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
dsh plugin --profile web add dsh-composer-plus
|
|
28
|
+
```
|
|
29
|
+
|
|
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
|
+
|
|
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`.
|
|
33
|
+
|
|
34
|
+
## Fonctionnalités
|
|
35
|
+
|
|
36
|
+
| Fonctionnalité | Utilisation | Capture d’écran |
|
|
37
|
+
|---|---|---|
|
|
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> |
|
|
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
|
+
| **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
|
+
| **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> |
|
|
43
|
+
| **Nom du projet dans la zone de saisie** | La ligne sous la zone de saisie (tours, jetons, succès de cache, contexte) commence par le nom du projet de la discussion : vous voyez donc toujours dans quel projet travaille une discussion. C’est le titre du projet dans dsh, ou le nom du dossier si le projet n’a pas de titre. Survolez-le pour voir le chemin complet du dossier. Cliquez dessus pour retrouver la discussion dans la barre latérale, en vue liste ou par projet : la barre latérale et le projet s’ouvrent (y compris un projet replié et son **Afficher plus**), la liste défile jusqu’à la discussion et la discussion clignote pendant 5 secondes. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Capture d’écran : Nom du projet dans la zone de saisie"></a> |
|
|
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
|
+
| **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
|
+
| **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> |
|
|
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
|
+
| **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
|
+
| **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
|
+
| **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> |
|
|
52
|
+
| **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
|
+
| **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
|
+
| **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> |
|
|
55
|
+
| **Filtre des projets récents** | Barre latérale → options d’affichage (icône de curseurs) → **Actifs au cours des 2 dernières heures**. Tant que cette option est sélectionnée, la barre latérale n’affiche que les projets qui ont une discussion active au cours des 2 dernières heures : une discussion mise à jour pendant ce temps, une discussion en cours ou en attente, la discussion ouverte, ou une discussion terminée que vous n’avez pas encore ouverte (le point vert « terminé » de dsh), même après les 2 heures. Les projets sans une telle discussion sont masqués, y compris les projets nouveaux et vides. Sélectionnez de nouveau l’option pour afficher tous les projets. Le choix est conservé sur cet appareil. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Capture d’écran : Filtre des projets récents"></a> |
|
|
56
|
+
| **Réduire tous les projets** | Quand un projet est ouvert dans la barre latérale, un bouton apparaît à côté des options d’affichage (icône de curseurs). Cliquez dessus pour fermer tous les projets ouverts d’un coup, par exemple 3 projets ouverts sur 5. Le bouton disparaît de nouveau quand aucun projet n’est ouvert. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Capture d’écran : Réduire tous les projets"></a> |
|
|
57
|
+
| **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
|
+
| **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
|
+
| **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> |
|
|
61
|
+
| **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
|
+
|
|
63
|
+
Les boutons, info-bulles, messages et notifications suivent la langue choisie dans dsh (voir Langue de l’application ci-dessous).
|
|
64
|
+
|
|
65
|
+
## Réglages
|
|
66
|
+
|
|
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.**
|
|
68
|
+
|
|
69
|
+
<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
|
+
|
|
71
|
+
### Langue de l’application
|
|
72
|
+
|
|
73
|
+
Ouvrez **Réglages → Composer Plus → Langue de l’application** et choisissez **Langue du système** ou l’une des 13 langues :
|
|
74
|
+
|
|
75
|
+
English · 中文 · Türkçe · Español · Português (Brasil) · Français · Deutsch · Русский · 日本語 · 한국어 · Bahasa Indonesia · Tiếng Việt · हिन्दी
|
|
76
|
+
|
|
77
|
+
<p align="center"><img src="docs/images/language-tr.webp" width="720" alt="Interface de DeepSeek Harness passée en Türkçe"></p>
|
|
78
|
+
|
|
79
|
+
Toute l’app change de langue immédiatement. Le choix est la préférence enregistrée par dsh lui-même, `locale.preference` (la même que Général → Langue) : il reste donc valable après un redémarrage. **Langue du système** efface ce choix : l’app de bureau suit la langue du système d’exploitation, l’interface web suit celle du navigateur, et une langue non prise en charge revient à l’anglais. L’installation du plugin ne remplace jamais une langue que vous avez déjà choisie.
|
|
80
|
+
|
|
81
|
+
Chaque pack contient 3 143 textes : tous les textes d’interface de dsh `0.2.0-rc.2` et `0.2.1-rc.2` (discussions, barre latérale, réglages, approbations, tâches d’automatisation, aperçus de fichiers, gestionnaire de plugins, place de marché de plugins), les contrôles du plugin lui-même et le plugin populaire [dsh-rewind](https://github.com/SiriLee/dsh-rewind). Ne sont pas traduits : vos messages, les réponses du modèle, le code, les noms des commandes slash (`/plan`, `/compact`), les libellés propres aux fournisseurs comme l’effort de raisonnement `High`, les textes des autres plugins, ainsi que les menus natifs et les boîtes de dialogue de mise à jour de l’app de bureau (dsh ne les fournit qu’en anglais et en chinois). Les textes ajoutés par une version plus récente de dsh s’affichent en anglais jusqu’à la mise à jour des packs. Si un autre plugin fournit déjà une langue, cette langue reste fournie par cet autre plugin.
|
|
82
|
+
|
|
83
|
+
## Raccourcis clavier
|
|
84
|
+
|
|
85
|
+
| Touche | Où | Action |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| `↑` / `↓` | zone de saisie vide | message envoyé précédent / suivant |
|
|
88
|
+
| `Shift+Tab` | zone de saisie | ajouter/retirer `/plan `, ou quitter le mode plan |
|
|
89
|
+
| `↑` / `↓` | poignée de file avec le focus | déplacer le message en file d’attente |
|
|
90
|
+
| `Esc` | pendant le glissement | annuler le déplacement |
|
|
91
|
+
| `→` / `←` | page Idées de fonctionnalités | créer / ignorer la carte du dessus |
|
|
92
|
+
| `↓` | page Idées de fonctionnalités | garder la carte du dessus dans la liste Plus tard du projet |
|
|
93
|
+
| `↑` | page Idées de fonctionnalités | créer la carte du dessus maintenant, sans plan |
|
|
94
|
+
| `Z` | page Idées de fonctionnalités | ramener la dernière carte ignorée |
|
|
95
|
+
|
|
96
|
+
Quand un menu `/` ou `@` est ouvert, il garde ces touches pour lui.
|
|
97
|
+
|
|
98
|
+
## Compatibilité
|
|
99
|
+
|
|
100
|
+
Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécute les tests à chaque push.
|
|
101
|
+
|
|
102
|
+
## Confidentialité et sécurité
|
|
103
|
+
|
|
104
|
+
- **Continuer :** le point de terminaison local authentifié ne reprend que le dernier tour interrompu, refuse les requêtes périmées ou en double et conserve les hooks d’approbation existants. Il n’envoie pas de nouveau message utilisateur.
|
|
105
|
+
- **Reprendre après redémarrage :** désactivée tant que vous ne l’activez pas. La partie hôte ne garde que les identifiants des discussions et leurs heures de début dans `$DSH_HOME/storages/dsh-composer-plus/resume.json` (accès réservé au propriétaire), et rien ne quitte votre machine. Elle ne reprend une discussion que si le journal de dsh indique que c’est dsh (et non vous) qui a arrêté son dernier tour. Les approbations et la revue automatique s’appliquent au tour repris comme d’habitude.
|
|
106
|
+
|
|
107
|
+
- **Panneau des modifications :** git s’exécute en lecture seule sur votre machine, dans le dossier de la discussion, via le canal `/api` authentifié de dsh. Il ne fait jamais de commit, de stage ni de fetch, et n’affiche que les chemins listés par git lui-même.
|
|
108
|
+
- **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
|
+
- **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
|
+
- **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`.
|
|
111
|
+
- **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
|
+
- **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
|
+
- La revue automatique s’exécute toujours à chaque appel ; les échecs de revue ne sont jamais autorisés automatiquement.
|
|
114
|
+
- **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
|
+
- **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.
|
|
116
|
+
|
|
117
|
+
## Dépannage
|
|
118
|
+
|
|
119
|
+
- **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).
|
|
121
|
+
- **« É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
|
+
- **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
|
+
- **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.
|
|
124
|
+
- **La recherche ne trouve que les titres :** Recherche dans le contenu est désactivée, dsh n’a pas redémarré depuis que vous l’avez activée ou depuis l’installation du plugin, ou le mot ne se trouve que dans une sortie d’outil (voir Limites).
|
|
125
|
+
- **Pas de bouton ↶ sur mes messages :** Annulation de tour est désactivée, la discussion est une discussion de sous-agent, ou dsh-rewind-plugin est installé (utilisez son bouton ↶). Après une mise à jour, redémarrez dsh.
|
|
126
|
+
- **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
|
+
- **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
|
+
- **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.
|
|
130
|
+
|
|
131
|
+
## Limites
|
|
132
|
+
|
|
133
|
+
- 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.
|
|
135
|
+
- **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
|
+
|
|
137
|
+
- **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.
|
|
138
|
+
- **Recherche dans le contenu** : coût mesuré sur une copie de 247 vrais journaux de discussion (159 Mo, dsh 0.2.1-rc.2, Apple Silicon, 32 Go). La première recherche après un démarrage crée l’index en environ 15 s. Pendant ce temps, l’hôte de dsh ne répond plus pendant environ 7 s : les autres discussions arrêtent donc leur flux pendant ce moment (la page elle-même ne se fige pas). La mémoire de l’hôte augmente d’environ 1,1 Go au pic ; une minute plus tard, elle reste encore environ 0,5–0,6 Go au-dessus du niveau de départ, jusqu’à la fermeture de dsh. Le fichier d’index fait environ 165 Mo. Les recherches suivantes prennent environ 0,5 s. Après un redémarrage, la première recherche prend environ 1 s (seules les discussions nouvelles ou modifiées sont ajoutées) et ajoute environ 70 Mo. Désactivez-la si votre ordinateur a peu de mémoire.
|
|
139
|
+
- **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
|
+
- **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
|
+
- **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.
|
|
143
|
+
- 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
|
+
- **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
|
+
- **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.
|
|
146
|
+
- Un lien de session fonctionne dans les discussions ; un clic dessus n’ouvre pas la discussion.
|
|
147
|
+
- Une notification envoyée avant un redémarrage ne fait que ramener dsh au premier plan quand vous cliquez dessus.
|
|
148
|
+
- 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
|
+
- 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
|
+
- 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.
|
|
151
|
+
- 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
|
+
|
|
153
|
+
## FAQ
|
|
154
|
+
|
|
155
|
+
**Comment ajouter un panneau Modifications / diff git à DeepSeek Harness ?** Installez `dsh-composer-plus`, puis barre latérale droite → `+` → **Modifications**.
|
|
156
|
+
|
|
157
|
+
**dsh peut-il suggérer des fonctionnalités pour mon projet, avec des cartes à balayer comme sur Tinder ?** Oui : barre latérale droite → `+` → **Idées de fonctionnalités** → **Suggérer des fonctionnalités**. Balayez vers la droite pour lancer une nouvelle discussion qui planifie la fonctionnalité, cliquez sur **▶ Créer maintenant** pour lancer une discussion qui la crée tout de suite sans plan, balayez vers la gauche pour l’ignorer.
|
|
158
|
+
|
|
159
|
+
**La recherche de la barre latérale de dsh peut-elle trouver une discussion par un mot de ses messages, et pas seulement par son titre ?** Oui, avec **Recherche dans le contenu** (activée par défaut) : redémarrez dsh une fois après avoir installé le plugin, puis utilisez la loupe à côté d’**Espaces de travail**. Les discussions trouvées affichent le texte autour du mot.
|
|
160
|
+
|
|
161
|
+
**Puis-je annuler un tour et modifier mon prompt, comme dans OpenCode ou Claude Code ?** Oui, avec **Annulation de tour** : cliquez sur **↶** sur le message, choisissez **Discussion et fichiers**, modifiez le texte qui revient dans la zone de saisie et envoyez-le.
|
|
162
|
+
|
|
163
|
+
**Puis-je supprimer une discussion au lieu de l’archiver ?** Oui, avec **Supprimer la discussion** : **…** → **Supprimer…**. L’historique va dans la Corbeille : vous pouvez donc revenir sur une erreur.
|
|
164
|
+
|
|
165
|
+
**Comment voir à quel projet appartient une discussion ?** Regardez la ligne sous la zone de saisie : avec **Nom du projet dans la zone de saisie** (activé par défaut), elle commence par le nom du projet. Survolez-le pour voir le chemin du dossier.
|
|
166
|
+
|
|
167
|
+
**Comment avoir l’historique des messages avec ↑/↓ dans la zone de saisie de dsh ?** Installez ce plugin ; dans une zone de saisie vide, `↑` / `↓` parcourent les messages envoyés.
|
|
168
|
+
|
|
169
|
+
**Comment continuer un tour dsh arrêté ou en échec sans taper « continue » ?** Avec ce plugin, le bouton Envoyer devient **▶** après un tour arrêté, en échec ou interrompu ; un clic reprend le tour.
|
|
170
|
+
|
|
171
|
+
**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
|
+
|
|
173
|
+
**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
|
+
|
|
175
|
+
**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.
|
|
176
|
+
|
|
177
|
+
**Comment n’afficher que les projets utilisés aujourd’hui dans la barre latérale de dsh ?** Barre latérale → options d’affichage (icône de curseurs) → **Actifs au cours des 2 dernières heures**. Sélectionnez de nouveau l’option pour afficher tous les projets.
|
|
178
|
+
|
|
179
|
+
**Comment copier le chemin du dossier d’un projet dans dsh ?** Clic droit sur le projet dans la barre latérale → **Copier le chemin**.
|
|
180
|
+
|
|
181
|
+
**Comment réduire tous les projets d’un coup dans la barre latérale de dsh ?** Cliquez sur le bouton de réduction à côté des options d’affichage (icône de curseurs). Il apparaît tant qu’au moins un projet est ouvert.
|
|
182
|
+
|
|
183
|
+
**Comment recevoir des notifications macOS / Windows quand une tâche dsh se termine ou a besoin d’une approbation ?** Gardez **Notifications en arrière-plan** activée (c’est le réglage par défaut) et autorisez les notifications pour DeepSeek Harness dans les réglages du système.
|
|
184
|
+
|
|
185
|
+
**Comment passer l’interface de DeepSeek Harness en turc, en espagnol, en japonais… ?** Réglages → Composer Plus → **Langue de l’application**.
|
|
186
|
+
|
|
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.
|
|
188
|
+
|
|
189
|
+
**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
|
+
|
|
191
|
+
## Développement
|
|
192
|
+
|
|
193
|
+
Les captures d’écran sont recréées à partir d’un dsh jetable, avec un faux modèle et des projets de démonstration inventés (`acme-web`, `weather-cli`, `docs-site`) : elles ne contiennent donc aucune donnée réelle. Les miniatures des fonctionnalités vont dans `assets/features/` (livrées avec le paquet, affichées dans les Réglages) ; les images réservées au README vont dans `docs/images/` (absentes du paquet npm) :
|
|
194
|
+
|
|
195
|
+
```sh
|
|
196
|
+
PLAYWRIGHT=/path/to/playwright node scripts/capture-screenshots.mjs /path/to/dsh/lib/bin.js
|
|
197
|
+
# sidebar project features (recent filter, Copy path, Collapse all): real-app test + their thumbnails
|
|
198
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /path/to/dsh/lib/bin.js
|
|
199
|
+
# recent filter + a finished chat older than 2 hours (fake model): the project stays until you open the chat
|
|
200
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
|
|
201
|
+
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
202
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
203
|
+
# every Settings feature row shows a loading screenshot
|
|
204
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
|
|
205
|
+
# Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
|
|
206
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
207
|
+
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
208
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
|
|
209
|
+
# Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
|
|
210
|
+
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
|
|
212
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
|
|
213
|
+
# 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
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
|
|
215
|
+
# Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails
|
|
216
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-turn-rollback.mjs /path/to/dsh/lib/bin.js
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
```sh
|
|
220
|
+
npm run build:locales # after editing locales/<id>.json
|
|
221
|
+
npm test
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Règle pour les nouvelles fonctionnalités :** chaque ligne de fonctionnalité dans Réglages → Composer Plus affiche une capture d’écran. Ajoutez l’id de la fonctionnalité à `SHOT_OF` dans `client.js` et à `SHOTS` dans `index.js`, et livrez `assets/features/<id>.webp` (pris dans le dsh de démonstration jetable, interface en anglais, environ 60 ko ou moins). Ajoutez la fonctionnalité au tableau du README avec la même image, dans `README.md` et dans chaque `README.<id>.md` traduit. `test/shots.test.mjs` échoue quand une fonctionnalité n’a pas de capture d’écran, et `test/browser-settings-shots.mjs` vérifie la vraie page des Réglages. La liste de contrôle complète pour chaque changement se trouve dans [AGENTS.md](AGENTS.md).
|
|
225
|
+
|
|
226
|
+
Les tests exécutent le vrai `client.js` sur un faux React/DOM et le vrai `index.js` (partie hôte) sur un dépôt git temporaire. Les tests de la passerelle Tether (`test/tether-gateway.test.mjs`) utilisent un hôte dsh simulé et une vraie passerelle TLS. L’app iPhone se trouve dans `tether/ios` (voir [tether/README.md](tether/README.md) et [tether/AGENTS.md](tether/AGENTS.md)). `node test/browser-history.mjs '<dsh web URL with ?token=…>'` vérifie l’historique de saisie dans un vrai navigateur, avec un `dsh web` jetable qui a son propre `DSH_HOME`.
|
|
227
|
+
|
|
228
|
+
Les packs de langue sont des fichiers JSON qui ne contiennent que des données, dans `locales/<id>.json`. `npm run build:locales` les intègre au point d’entrée client unique (pas de service de traduction ni de téléchargement à l’exécution). `npm test` vérifie pour chaque pack la couverture complète des clés, des espaces réservés et des sauts de ligne identiques, ainsi que le comportement système/remplacement. Pour des vérifications isolées dans l’app réelle avec un Playwright installé localement :
|
|
229
|
+
|
|
230
|
+
```sh
|
|
231
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-language.mjs /path/to/dsh/lib/bin.js
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## License
|
|
235
|
+
|
|
236
|
+
MIT
|