dsh-composer-plus 1.24.1 → 1.25.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 +16 -7
- package/README.es.md +16 -7
- package/README.fr.md +16 -7
- package/README.hi.md +16 -7
- package/README.id.md +16 -7
- package/README.ja.md +16 -7
- package/README.ko.md +16 -7
- package/README.md +16 -7
- package/README.pt-BR.md +16 -7
- package/README.ru.md +16 -7
- package/README.tr.md +16 -7
- package/README.vi.md +16 -7
- package/README.zh.md +16 -7
- package/assets/features/assistant.webp +0 -0
- package/assets/features/assistantApart.webp +0 -0
- package/assets/features/assistantChatView.webp +0 -0
- package/assets/features/assistantFree.webp +0 -0
- package/assets/features/assistantNotify.webp +0 -0
- package/assets/features/memorySuggest.webp +0 -0
- package/client.js +264 -28
- package/index.js +208 -5
- package/package.json +2 -2
- package/release-notes.json +14 -14
- package/tether/gateway/admin.html +5 -0
- package/tether/gateway/server.mjs +45 -8
package/README.fr.md
CHANGED
|
@@ -29,7 +29,7 @@ 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.
|
|
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.25.0`.
|
|
33
33
|
|
|
34
34
|
## Fonctionnalités
|
|
35
35
|
|
|
@@ -75,7 +75,11 @@ Redémarrez ensuite dsh. (La CLI ne peut pas installer dans le profil de bureau
|
|
|
75
75
|
| **Fichiers protégés** | <a id="feature-protectedfiles"></a>Activée par défaut. Les outils de fichiers propres à l’agent ne peuvent ni lire ni modifier les fichiers qui correspondent à vos motifs : `read`, `read_image` et `grep` sur un fichier sont refusés pour les motifs **lecture et écriture**, et `write`, `edit` et `str_replace_editor` pour les deux types. L’agent lit pourquoi et on lui demande de vous consulter. Les motifs par défaut sont `.env*`, `*.pem` et `*.key`. Réglages → Composer Plus → **Fichiers protégés** : ajoutez un motif (par exemple `published/**` ou `config/*.yml`), cliquez sur son type pour basculer entre **lecture et écriture** et **écriture seule**, supprimez-le avec ✕, ou cliquez sur **Utiliser les valeurs par défaut**. Un motif sans `/` correspond à un nom de fichier dans n’importe quel dossier. C’est un garde-fou, pas un sandbox : une commande shell (`cat .env`), un script ou un outil MCP peut encore atteindre le fichier (voir Limites). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Capture d’écran : Fichiers protégés"></a> |
|
|
76
76
|
| **Commandes bloquées** | <a id="feature-blockedcommands"></a>Activée par défaut, avec une liste vide. Les commandes shell de l’agent (`bash`, `pwsh`) ne peuvent pas exécuter une commande qui correspond à vos règles : une règle **bloquer** refuse l’appel (l’agent lit pourquoi et on lui demande de vous consulter), une règle **demander d’abord** affiche la carte d’approbation de dsh, et la commande ne s’exécute que si vous l’autorisez. Réglages → Composer Plus → **Commandes bloquées** : tapez une règle (par exemple `npm publish`, `git push --force` ou `ssh *192.168.2.19`), cliquez sur son type pour basculer entre **bloquer** et **demander d’abord**, puis cliquez sur **Ajouter** ; cliquez sur le type d’une règle pour le changer, supprimez-la avec ✕. Une règle est un nom de commande et des mots qui doivent le suivre dans cet ordre ; `*` correspond à n’importe quel texte. La vérification trouve aussi la commande après `&&`, `;`, `\|`, dans `$(…)`, `bash -c "…"` ou `eval`, et après `sudo` ou `env`. C’est un garde-fou, pas un sandbox : une variable (`$CMD`), un fichier de script ou un autre programme peut encore exécuter la commande (voir Limites). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Capture d’écran : Commandes bloquées"></a> |
|
|
77
77
|
| **Tableau des tâches** | <a id="feature-taskboard"></a>Barre latérale gauche → **Tableau des tâches**, ou appuyez sur `Cmd+Shift+K` (`Ctrl+Shift+K` sous Windows et Linux) partout dans dsh. Un tableau kanban de vos discussions dsh, avec l’état en direct que montre la barre latérale : une discussion qui attend votre approbation, votre réponse ou la revue d’un plan est dans **En revue** avec un point orange, une discussion en cours d’exécution est dans **En cours**, une discussion terminée que vous n’avez pas encore ouverte est dans **Terminé** (en vert). Quand vous ouvrez une discussion, sa carte quitte **Terminé** d’elle-même ; cliquez sur **Terminées récemment (N)**, sous les cartes vertes, pour voir les discussions terminées que vous avez lues (les 10 plus récentes, puis **Afficher N plus anciennes** ; ouvert ou fermé reste sur cet appareil). Une discussion qui se termine alors qu’elle est ouverte derrière le tableau (une **Nouvelle tâche**) reste verte jusqu’à ce que vous l’ouvriez. Cliquez sur le nom du projet, en haut du tableau, pour ouvrir la liste des projets, puis choisissez un projet ou **Tous les projets** ; le dossier d’une branche par discussion compte comme son projet. La liste se ferme après le choix, avec `Esc` ou avec un clic en dehors. Tapez dans **Rechercher des projets**, en haut de la liste, pour trouver un projet par son nom (la casse et les accents ne comptent pas ; `Esc` vide le champ), appuyez sur `Entrée` pour choisir le premier résultat, et cliquez sur **Actifs au cours des 2 dernières heures** pour n’afficher que les projets avec une discussion qui attend, s’exécute, s’est terminée sans être vue ou a changé au cours des 2 dernières heures (réglage gardé sur cet appareil). **Nouvelle tâche** (ou `n`) ouvre la nouvelle discussion de dsh lui-même dans le projet que montre le tableau (avec **Tous les projets**, le projet que choisit Nouvelle session de dsh) : vous pouvez donc ajouter des fichiers, utiliser des commandes et choisir le modèle comme dans toute discussion. Quand votre premier message part, le tableau revient de lui-même. D’ici là, la discussion attend en haut de **En cours** sous le nom **Nouvelle tâche** : cliquez dessus pour écrire le premier message. Un projet dont une discussion vous attend a un point orange dans la liste des projets (le nom du projet en haut en a un aussi tant qu’une discussion attend). dsh nomme la discussion et le modèle de la discussion écrit jusqu’à 3 étiquettes à partir de ce message. Cliquez sur une carte pour ouvrir sa discussion. Cliquez sur une carte orange (ou sur son **Répondre**) pour y répondre depuis le tableau ; le panneau a **Ouvrir la discussion** pour voir toute la discussion : **Refuser** ou **Autoriser une fois**, **Approuver** ou **Demander des modifications** pour un plan, ou les options et votre propre texte pour une question. Cliquez sur **×** sur une carte terminée pour la retirer du tableau, ou ouvrez **Terminées récemment** et cliquez sur **Tout retirer** en haut de **Terminé** pour retirer ces cartes du tableau : une fenêtre montre d’abord combien de cartes de quel projet partent, et les cartes non lues (vertes) restent. Pendant les 8 secondes qui suivent, **Annuler** remet les cartes ; **Retirées (N)**, sous **Terminé**, liste les cartes qui sont hors du tableau, et **Remettre** affiche de nouveau l’une d’elles dans **Terminé**. Aucune discussion n’est supprimée : les discussions restent dans la barre latérale de dsh, le tableau s’en souvient après un redémarrage (Tether affiche le même tableau), et une discussion qui s’exécute de nouveau revient sur le tableau. Pointez une carte dans **En cours** (ou placez-y le focus du clavier) pour voir sa progression : depuis combien de temps la discussion s’exécute, l’étape de sa liste de tâches, l’outil qui s’exécute en ce moment et la dernière ligne de l’agent. Dans Réglages → Composer Plus → Tableau des tâches, **Progression au survol** choisit **Rapide (sans IA)** (par défaut : lit seulement la discussion) ou **Résumé par IA** (un court appel au modèle de la discussion écrit aussi une ou deux phrases). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Capture d’écran : Tableau des tâches"></a> |
|
|
78
|
-
| **Assistant** | <a id="feature-assistant"></a>Activé par défaut (désactivez-le dans **Réglages → Composer Plus**). Cliquez sur **Assistant** dans la barre latérale gauche (juste sous **Tableau des tâches**) : il ouvre une discussion durable que vous utilisez comme assistant personnel, comme une discussion ChatGPT ou Grok. Le premier clic crée le dossier `~/Assistant`, l’ajoute comme projet "Assistant" et lance la discussion avec le mode d’autorisation workspace-write et le modèle par défaut de dsh ; chaque clic suivant ouvre la même discussion (une discussion archivée revient, une discussion supprimée est recréée). Demandez-lui un rappel (« rappelle-moi de boire de l’eau dans 2 minutes ») : il utilise les tâches planifiées de dsh, donc le rappel lance la discussion à cette heure-là, et Tether envoie sa notification "Turn finished" quand Connexion mobile est activée. Demandez-lui de chercher sur le web, ou interrogez-le sur vos autres discussions : il peut lister les discussions de tous les projets (en cours, en attente de vous ou inactives) et lire les messages les plus récents de l’une d’elles. Il peut aussi envoyer un message à une discussion, lancer une nouvelle discussion dans un projet, arrêter une discussion en cours ou en archiver une : chacune de ces quatre actions affiche d’abord la carte d’approbation de dsh (aussi dans Tether), et rien ne se passe tant que vous ne cliquez pas sur **Autoriser une fois**. Il n’a aucun outil de suppression. Seule cette discussion a ces outils et ses courtes consignes ; un texte qu’il lit sur une page web ou dans une autre discussion compte comme une donnée, pas comme un ordre. Gardez votre profil dans la mémoire de ce projet (**Mémoire du projet**, sujet "profil") au lieu de le lui redire à chaque fois. | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="Capture d’écran : Assistant"></a> |
|
|
78
|
+
| **Assistant** | <a id="feature-assistant"></a>Activé par défaut (désactivez-le dans **Réglages → Composer Plus**). Cliquez sur **Assistant** dans la barre latérale gauche (juste sous **Tableau des tâches**) : il ouvre une discussion durable que vous utilisez comme assistant personnel, comme une discussion ChatGPT ou Grok. Le premier clic crée le dossier `~/Assistant`, l’ajoute comme projet "Assistant" et lance la discussion avec le mode d’autorisation workspace-write et le modèle par défaut de dsh ; chaque clic suivant ouvre la même discussion (une discussion archivée revient, une discussion supprimée est recréée). Tant que la discussion n’a pas de message, une courte carte au-dessus de la zone de saisie explique ce que fait l’assistant et montre trois exemples de demandes ; elle disparaît avec votre premier message. Demandez-lui un rappel (« rappelle-moi de boire de l’eau dans 2 minutes ») : il utilise les tâches planifiées de dsh, donc le rappel lance la discussion à cette heure-là, et Tether envoie sa notification "Turn finished" quand Connexion mobile est activée. Parlez-lui comme à un ami qui travaille en arrière-plan : une tâche plus longue (une recherche, plusieurs étapes) est confiée à son propre sous-agent en arrière-plan, la discussion dit en une ligne ce qu’elle a lancé et se libère aussitôt. Ouvrez un deuxième sujet pendant que le premier tourne encore : chaque sujet a son propre sous-agent, et chaque résultat revient dans cette discussion quand il est prêt. Demandez-lui de chercher sur le web, ou interrogez-le sur vos autres discussions : il peut lister les discussions de tous les projets (en cours, en attente de vous ou inactives) et lire les messages les plus récents de l’une d’elles. Il peut aussi envoyer un message à une discussion, lancer une nouvelle discussion dans un projet, arrêter une discussion en cours ou en archiver une : chacune de ces quatre actions affiche d’abord la carte d’approbation de dsh (aussi dans Tether), et rien ne se passe tant que vous ne cliquez pas sur **Autoriser une fois**. Il n’a aucun outil de suppression. Seule cette discussion a ces outils et ses courtes consignes ; un texte qu’il lit sur une page web ou dans une autre discussion compte comme une donnée, pas comme un ordre. Gardez votre profil dans la mémoire de ce projet (**Mémoire du projet**, sujet "profil") au lieu de le lui redire à chaque fois. | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="Capture d’écran : Assistant"></a> |
|
|
79
|
+
| **Assistant séparé des discussions** | <a id="feature-assistantapart"></a>Activé par défaut (désactivez-le dans **Réglages → Composer Plus**). La discussion de l’assistant quitte la liste des discussions de la barre latérale gauche, elle n’est donc pas parmi les discussions de vos projets : ouvrez-la avec **Assistant**. Son projet "Assistant" disparaît aussi tant qu’il ne contient aucune autre discussion ; la recherche de la barre latérale trouve toujours la discussion. Un point sur la ligne **Assistant** montre l’état de l’assistant : en cours (aussi pendant qu’un sujet tourne en arrière-plan), en attente de vous (orange : une approbation, une question ou une revue de plan) ou nouvelle réponse (vert). Quand la discussion de l’assistant est ouverte, la ligne **Assistant** s’affiche comme ouverte. Quand l’interrupteur est désactivé, la discussion revient dans la liste et la ligne n’a pas de point. | <a href="assets/features/assistantApart.webp"><img src="assets/features/assistantApart.webp" width="160" alt="Capture d’écran : Assistant séparé des discussions"></a> |
|
|
80
|
+
| **Messages seuls dans l’Assistant** | <a id="feature-assistantchatview"></a>Activé par défaut (désactivez-le dans **Réglages → Composer Plus**). La discussion de l’assistant ressemble à une discussion avec un bot : les appels d’outils, la réflexion, les groupes d’étapes et la ligne "Completed in" sont masqués, et vous voyez vos messages, ses réponses, les erreurs et les cartes d’approbation. Les autres discussions ne changent pas. Désactivez-le pour revoir les étapes de travail de l’assistant. | <a href="assets/features/assistantChatView.webp"><img src="assets/features/assistantChatView.webp" width="160" alt="Capture d’écran : Messages seuls dans l’Assistant"></a> |
|
|
81
|
+
| **Assistant toujours libre** | <a id="feature-assistantfree"></a>Activé par défaut (désactivez-le dans **Réglages → Composer Plus**). La discussion de l’assistant répond tout de suite et n’est jamais occupée par un long travail : elle n’appelle que ses propres outils courts (vos discussions, rappels, mémoire et sous-agents). Toute autre étape, comme une recherche web, une page web, un fichier ou une commande, va à un sous-agent en arrière-plan ; la discussion dit en une ligne ce qu’elle a lancé et reste libre pour votre prochain message, et le résultat revient dans la discussion quand il est prêt. Ses sous-agents travaillent comme d’habitude. Quand la discussion de l’assistant n’a pas l’outil de sous-agents (à cause de son mode d’autorisation ou de son profil), la règle ne fait rien et **Réglages** l’indique. | <a href="assets/features/assistantFree.webp"><img src="assets/features/assistantFree.webp" width="160" alt="Capture d’écran : Assistant toujours libre"></a> |
|
|
82
|
+
| **Nouvelles des discussions dans l’Assistant** | <a id="feature-assistantnotify"></a>Désactivé par défaut : chaque nouvelle est un tour du modèle dans la discussion de l’assistant, donc elle consomme des tokens. Activez-le dans **Réglages → Composer Plus**. L’assistant vous prévient alors, dans sa propre discussion, quand une autre discussion termine un long tour (1 minute ou plus), échoue ou vous attend (une approbation, une question ou une revue de plan) pendant 30 secondes : une ligne courte par discussion, avec le titre et le projet de la discussion. Les nouvelles sont regroupées pendant 15 secondes et arrivent au plus toutes les 2 minutes ; pendant que l’assistant travaille, elles attendent la fin de ce tour. Une discussion que vous avez arrêtée, un tour court et la discussion de l’assistant elle-même ne donnent pas de nouvelle. Avec **Connexion mobile (iPhone)** activée, Tether reçoit la notification habituelle "Turn finished" de l’assistant. | <a href="assets/features/assistantNotify.webp"><img src="assets/features/assistantNotify.webp" width="160" alt="Capture d’écran : Nouvelles des discussions dans l’Assistant"></a> |
|
|
79
83
|
| **Mémoire du projet** | <a id="feature-projectmemory"></a>Désactivée par défaut : activez-la dans **Réglages → Composer Plus**. Chaque dossier de projet a sa propre mémoire, que les discussions suivantes de ce projet lisent, comme DS Bot en garde une par Bot. Après chaque tour terminé, un appel au modèle de la discussion lit les nouveaux messages (pas ceux annulés), garde vos préférences, décisions et faits durables sous forme de notes courtes, et modifie ou supprime les anciennes. L’agent peut aussi enregistrer, supprimer et chercher des notes lui-même (`memory_remember`, `memory_forget`, `memory_recall`). Une note peut aussi être globale : tous les projets la lisent. Une nouvelle discussion reçoit les notes dans son prompt système ; une note enregistrée plus tard apparaît à partir de la discussion suivante. Les fichiers sont en Markdown dans le dossier personnel de dsh (`storages/dsh-composer-plus/memory/`), jamais dans le dossier du projet. **Ouvrir la mémoire**, sur la même ligne, montre toutes les notes enregistrées, groupées par projet (et la mémoire globale), avec un filtre. Écrivez avec vos mots ce qu’il faut changer (par exemple « je suis passé de yarn à pnpm »), puis **Aperçu des modifications** : le modèle par défaut de dsh propose les modifications, et seul **Appliquer** les enregistre. Dans Tether : menu du titre de la discussion → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Capture d’écran : Mémoire du projet"></a> |
|
|
80
84
|
| **Historique des versions de la mémoire** | <a id="feature-memoryhistory"></a>Activé par défaut tant que **Mémoire du projet** est activée. Avant chaque enregistrement de la mémoire (l’agent, la revue après un tour, **Ouvrir la mémoire**), une copie des notes telles qu’elles étaient est gardée. Dans **Ouvrir la mémoire**, sélectionnez un projet ou **Mémoire globale**, puis **Historique** : les versions par date et qui a modifié la mémoire après chacune. Sélectionnez une version pour voir sous forme de diff ce que change une restauration, puis **Restaurer**. Les notes d’avant une restauration sont aussi gardées : vous pouvez donc l’annuler. Les 50 versions les plus récentes de chaque mémoire restent. Dans Tether : menu du titre de la discussion → Project memory → History. | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="Capture d’écran : Historique des versions de la mémoire"></a> |
|
|
81
85
|
| **Exporter la mémoire vers AGENTS.md** | <a id="feature-memoryexport"></a>Dans **Ouvrir la mémoire**, sélectionnez un projet, puis **Exporter vers AGENTS.md** : les notes de ce projet vont dans une section balisée de `AGENTS.md` dans son dossier, pour que vous puissiez les committer et les partager avec votre équipe et d’autres outils d’agents. Vous voyez d’abord la modification sous forme de diff ; seul **Écrire AGENTS.md** l’enregistre. L’export suivant remplace seulement cette section. La mémoire globale, les sources et les dates restent dehors. Dans Tether : menu du titre de la discussion → Project memory → Export to AGENTS.md. | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="Capture d’écran : Exporter la mémoire vers AGENTS.md"></a> |
|
|
@@ -104,7 +108,7 @@ Redémarrez ensuite dsh. (La CLI ne peut pas installer dans le profil de bureau
|
|
|
104
108
|
| **Boutons d’options** | <a id="feature-optionpicks"></a>Quand une réponse se termine par une liste d’options (une liste numérotée de 1 à 9 éléments sous un titre « Options » ou une ligne en gras « Options », aussi « Prochaines étapes » et les mêmes mots dans les langues de l’application), un bouton apparaît sous la réponse pour chaque option. Un clic envoie « Option N: … » avec toute l’option comme votre message, comme si vous l’aviez tapé. L’option marquée « (recommandée) » est mise en avant. Les boutons n’apparaissent que sous la réponse la plus récente, quand la discussion est inactive et que la zone de message est vide ; une réponse déjà choisie et une réponse retirée par un retour en arrière n’en ont pas. Tant qu’ils sont affichés, la prédiction du message suivant ne propose rien. Sur une carte de question de l’agent, les touches 1 à 9 choisissent cette option, comme un clic (pas dans le champ de réponse, ni pendant les 0,8 premières secondes après l’affichage de la question). | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="Capture d’écran : Boutons d’options"></a> |
|
|
105
109
|
| **Langue de l’application** | <a id="feature-language"></a>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 : Langue de l’application"></a> |
|
|
106
110
|
| **Connexion mobile (iPhone)** | <a id="feature-mobileconnect"></a>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 (avec des photos : le **+** de la zone de saisie → Camera, Photos ou Paste image), 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. Le panneau **Connexion mobile** liste les iPhone appairés avec leur dernière connexion : **Remove** en déconnecte un tout de suite. « Tailscale only » refuse le réseau local (pour un Wi-Fi partagé), et le journal d’accès montre qui a essayé de se connecter. Dans Tether, « Settings → Privacy » verrouille l’app avec Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Capture d’écran : Connexion mobile (iPhone)"></a> |
|
|
107
|
-
| **Ordinateurs distants** | <a id="feature-remotecomputers"></a>Ouvrez le dsh de vos autres Mac via [Tailscale](https://tailscale.com) et utilisez-les dans cette fenêtre de dsh. Activez la fonction dans **Réglages → Composer Plus** sur chaque Mac (elle est désactivée par défaut, car elle ouvre des ports réseau). Sur le Mac que vous voulez ouvrir, activez **Autoriser d’autres ordinateurs à ouvrir ce Mac**, cliquez sur **Créer un lien d’appairage** et copiez le lien. Sur ce Mac, choisissez **Ajouter un ordinateur…** dans le sélecteur d’ordinateurs de la barre latérale gauche (à droite du nom de la marque, au-dessus de **Nouvelle session**), collez le lien, saisissez un **Nom** (pas le nom de ce Mac ni celui d’un autre ordinateur) et cliquez sur **Connecter**. Cliquez ensuite sur **Approuver** sur l’autre Mac. Le sélecteur liste alors **Ce Mac** et vos ordinateurs : choisissez-en un, et son dsh remplit cette fenêtre, avec ses propres discussions, barre latérale, outils et fichiers, pendant que ce Mac continue de tourner derrière. Le sélecteur reste au même endroit et affiche **Revenir à ce Mac** : cliquez dessus pour revenir. Avec plus d’un ordinateur, le clic ouvre le menu, où vous choisissez **Ce Mac** ou un autre ordinateur. Le panneau des réglages renomme et supprime les ordinateurs, et liste les ordinateurs qui peuvent ouvrir ce Mac (**Supprimer** en déconnecte un tout de suite). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Capture d’écran : Ordinateurs distants"></a> |
|
|
111
|
+
| **Ordinateurs distants** | <a id="feature-remotecomputers"></a>Ouvrez le dsh de vos autres Mac via [Tailscale](https://tailscale.com) et utilisez-les dans cette fenêtre de dsh. Activez la fonction dans **Réglages → Composer Plus** sur chaque Mac (elle est désactivée par défaut, car elle ouvre des ports réseau). Sur le Mac que vous voulez ouvrir, activez **Autoriser d’autres ordinateurs à ouvrir ce Mac**, cliquez sur **Créer un lien d’appairage** et copiez le lien. Sur ce Mac, choisissez **Ajouter un ordinateur…** dans le sélecteur d’ordinateurs de la barre latérale gauche (à droite du nom de la marque, au-dessus de **Nouvelle session**), collez le lien, saisissez un **Nom** (pas le nom de ce Mac ni celui d’un autre ordinateur) et cliquez sur **Connecter**. Cliquez ensuite sur **Approuver** sur l’autre Mac. Le sélecteur liste alors **Ce Mac** et vos ordinateurs : choisissez-en un, et son dsh remplit cette fenêtre, avec ses propres discussions, barre latérale, outils et fichiers, pendant que ce Mac continue de tourner derrière. Le sélecteur reste au même endroit et affiche **Revenir à ce Mac** : cliquez dessus pour revenir. Avec un seul ordinateur, un clic sur le sélecteur bascule aussitôt entre ce Mac et cet ordinateur (sans menu) ; faites un clic droit sur le sélecteur pour ouvrir le menu complet (**Ajouter un ordinateur…**). Avec plus d’un ordinateur, le clic ouvre le menu, où vous choisissez **Ce Mac** ou un autre ordinateur. Le panneau des réglages renomme et supprime les ordinateurs, et liste les ordinateurs qui peuvent ouvrir ce Mac (**Supprimer** en déconnecte un tout de suite). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Capture d’écran : Ordinateurs distants"></a> |
|
|
108
112
|
| **Mises à jour automatiques** | <a id="feature-autoupdate"></a>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**. Au premier démarrage de dsh avec la nouvelle version, une fenêtre **Nouveautés de Composer Plus N** affiche une fois les notes de cette version dans la langue de **Langue de l’application** (elles arrivent avec la nouvelle version, sans autre appel réseau ; une langue sans notes affiche les notes en anglais) ; **Fermer** ou `Esc` la ferme. Sous les notes, une ligne demande une étoile sur GitHub, au plus une fois tous les 30 jours (sans appel réseau) ; après **Mettre une étoile sur GitHub** ou **Ne plus demander**, elle ne s’affiche plus. La fenêtre s’affiche aussi après une mise à jour par Réglages → Plugins ou par un dossier copié, une fois par nouvelle version ; pas à la première installation. **Nouveautés de cette version** dans la ligne des mises à jour la rouvre. Si le disque contient une version plus récente que celle qui tourne, la ligne demande de redémarrer dsh. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Capture d’écran : Mises à jour automatiques"></a> |
|
|
109
113
|
| **Filtre activées/désactivées** | <a id="feature-featurefilter"></a>À côté de **Rechercher des fonctionnalités** dans **Réglages → Composer Plus** : **Toutes** affiche toutes les fonctionnalités, **Activées** seulement celles dont l’interrupteur est activé et **Désactivées** seulement celles dont il est désactivé. C’est l’interrupteur de chaque ligne qui décide, y compris un interrupteur que garde l’hôte de dsh (par exemple **Connexion mobile**). Le filtre fonctionne avec la recherche : tapez un mot et choisissez **Désactivées** pour trouver une fonctionnalité que vous avez désactivée. Une ligne que vous basculez pendant que **Activées** ou **Désactivées** est choisi reste affichée jusqu’à ce que vous choisissiez de nouveau un filtre ; le focus reste donc sur son interrupteur. **Activées** et **Désactivées** masquent les lignes **Langue de l’application** et **Mises à jour de Composer Plus** (elles n’ont pas d’interrupteur). Les réglages s’ouvrent toujours sur **Toutes**. | <a href="assets/features/featureFilter.webp"><img src="assets/features/featureFilter.webp" width="160" alt="Capture d’écran : Filtre activées/désactivées"></a> |
|
|
110
114
|
| **Signaler une issue** | <a id="feature-issuereport"></a>Réglages → Composer Plus → **Signaler une issue…** (sous l’introduction), ou clic droit sur une discussion dans la barre latérale (ou ouvrez son menu **…**) → **Signaler une issue Composer Plus…**. Choisissez un type : **Bug**, **Demande de fonctionnalité**, **Amélioration**, **Traduction** ou **Question**. Décrivez-le avec vos propres mots et dans votre langue, puis cliquez sur **Rédiger le brouillon** (ou `Cmd/Ctrl+Enter`). Un seul appel au modèle par défaut de dsh rédige une issue en anglais : un titre avec le préfixe du type (par exemple `[Bug]`) et les sections de ce type (pour un bug : What happened, Steps to reproduce, Expected, Actual), plus une ligne avec les versions de Composer Plus, de dsh et du système. Lisez et modifiez le titre et la description ; **Rédiger à nouveau** rédige un nouveau brouillon. **Ouvrir l’issue** l’ouvre dans le dépôt GitHub de Composer Plus avec votre connexion GitHub CLI (`gh`) et affiche son lien. L’issue est publique : un texte qui ressemble à une clé ou à un mot de passe est refusé. Quand `gh` ne peut pas l’ouvrir, **Ouvrir plutôt sur GitHub** ouvre la page de GitHub lui-même avec le brouillon déjà rempli. | <a href="assets/features/issueReport.webp"><img src="assets/features/issueReport.webp" width="160" alt="Capture d’écran : Signaler une issue"></a> |
|
|
@@ -199,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
|
|
|
199
203
|
- **Continuer dans une nouvelle discussion :** rien ne s’exécute tant que vous ne cliquez pas. Ensuite, la partie hôte envoie la discussion (comme la Vérification de l’objectif la lit : sans raisonnement ni étapes retirées par une annulation) au modèle de la discussion elle-même et affiche la note de passation ; seul **Lancer une nouvelle discussion** crée une nouvelle discussion. Rien n’est écrit dans le projet.
|
|
200
204
|
- **Répartition du contexte :** la partie hôte lit seulement le journal de la discussion ; aucun appel au modèle, aucun fichier du projet.
|
|
201
205
|
- **Tableau des tâches :** le tableau montre les discussions de dsh à partir des listes de dsh dans cette fenêtre ; il n’ajoute aucune donnée de discussion à lui. **Nouvelle tâche** ouvre la nouvelle discussion de dsh lui-même, et vous écrivez le premier message dans la zone de saisie de dsh : les approbations, le sandbox et le modèle de la discussion s’appliquent donc comme d’habitude. La partie hôte garde le premier message de cette discussion comme prompt de la carte et l’envoie (ses 4 000 premiers caractères, rien d’autre) au modèle de cette discussion dans une requête de plus, sans outils, pour obtenir jusqu’à 3 étiquettes. Le prompt, les étiquettes et l’heure de lancement de chaque tâche sont gardés dans `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` (fichier réservé au propriétaire, les 2 000 plus récentes), avec les identifiants des discussions que vous avez retirées du tableau avec **×** ou **Tout retirer** (les 5 000 plus récents) ; l’interrupteur se trouve à côté, dans `board-switch.json`. Rien n’est écrit dans un dossier de projet. **Répondre** envoie votre réponse à la demande en attente de dsh, de la même façon que la carte de la discussion elle-même. L’ancienne liste de tâches des versions précédentes (`board.json`) reste sur le disque telle quelle et n’est pas lue. **Progression au survol** lit le journal de la discussion sur ce Mac. Avec **Rapide (sans IA)** (par défaut), rien n’est envoyé. Avec **Résumé par IA**, tant que la fenêtre de progression d’une carte en cours est affichée (ou tant que le tableau de Tether est ouvert, pour 8 cartes en cours au plus), la partie Host envoie la partie la plus récente de cette discussion (environ 6 000 caractères au plus : vos messages, les réponses texte de l’agent, ses appels d’outils et la fin de leurs résultats ; sans raisonnement ni messages retirés par une annulation) au modèle de la discussion, en une seule requête sans outils. Elle n’envoie à nouveau qu’après une avancée de la discussion, au plus une fois toutes les 20 secondes par discussion. La note reste seulement en mémoire ; le réglage se trouve dans `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` (fichier réservé au propriétaire).
|
|
202
|
-
- **Assistant :** la discussion de l’assistant est une discussion dsh ordinaire dans `~/Assistant` ; ses appels au modèle vont au modèle par défaut de dsh, comme dans toute discussion. Ses outils lisent les journaux de vos autres discussions sur ce Mac (titres, projets, état et, avec chat_read, leurs messages les plus récents) et ne les donnent à ce modèle que lorsqu’il appelle un outil. Envoyer, lancer, arrêter et archiver une discussion attendent chacun votre approbation. L’identifiant de la discussion est conservé dans `$DSH_HOME/storages/dsh-composer-plus/assistant.json` et l’interrupteur dans `assistant-switch.json` (fichiers réservés au propriétaire). Les rappels et les automatisations sont les tâches planifiées de dsh lui-même. Rien ne quitte ce Mac, sauf les requêtes au modèle et les recherches web que fait la discussion.
|
|
206
|
+
- **Assistant :** la discussion de l’assistant est une discussion dsh ordinaire dans `~/Assistant` ; ses appels au modèle vont au modèle par défaut de dsh, comme dans toute discussion. Ses outils lisent les journaux de vos autres discussions sur ce Mac (titres, projets, état et, avec chat_read, leurs messages les plus récents) et ne les donnent à ce modèle que lorsqu’il appelle un outil. Envoyer, lancer, arrêter et archiver une discussion attendent chacun votre approbation. L’identifiant de la discussion est conservé dans `$DSH_HOME/storages/dsh-composer-plus/assistant.json` et l’interrupteur dans `assistant-switch.json` (fichiers réservés au propriétaire). Les rappels et les automatisations sont les tâches planifiées de dsh lui-même. Rien ne quitte ce Mac, sauf les requêtes au modèle et les recherches web que fait la discussion. Les interrupteurs de l’assistant en mode bot gardent leur état dans `assistant-free.json` et `assistant-notify.json` (fichiers réservés au propriétaire). **Nouvelles des discussions dans l’Assistant** met dans la discussion de l’assistant une ligne courte sur une autre discussion (son titre, son projet et au plus 300 caractères de sa dernière réponse ou erreur) : ce texte va donc aussi au modèle de l’assistant ; les nouvelles attendent uniquement en mémoire.
|
|
203
207
|
- **Fichiers protégés :** la liste et l’interrupteur se trouvent dans `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` (fichier réservé au propriétaire). La vérification lit seulement le chemin de chaque appel d’outil de fichiers (et son chemin réel), jamais le fichier.
|
|
204
208
|
- **Commandes bloquées :** les règles et l’interrupteur se trouvent dans `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` (fichier réservé au propriétaire). La vérification lit seulement le texte de la commande de chaque appel `bash` et `pwsh` ; elle n’exécute rien et n’envoie rien.
|
|
205
209
|
- **Saisie secrète :** la valeur va de la carte (ou de Tether, par la passerelle, qui n’enregistre pas le corps des requêtes) au Host uniquement dans la requête de réponse. Le Host l’écrit dans `$DSH_HOME/storages/dsh-composer-plus/secrets/<nom aléatoire>` (dossier 0700, fichier 0600) ; rien ne va dans le projet, le journal de la discussion ou le résultat de l’outil. Le Host garde la valeur en mémoire pour la remplacer par `[secret]` dans les résultats d’outil suivants de cette discussion. Le fichier et cette copie sont supprimés à la fin du tour de la discussion et au démarrage de dsh. L’interrupteur est dans `secrets.json`, à côté. Une commande que l’agent lance avec le fichier peut envoyer la valeur là où cette commande l’envoie : c’est le but.
|
|
@@ -226,7 +230,7 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
|
|
|
226
230
|
- **Pas de pastille de branche sur une ligne de discussion :** la barre latérale n’est pas en « Dans une seule liste » (dans « Espace de travail » et « Arborescence des espaces de travail », aucune ligne de discussion n’affiche de pastille), la discussion n’a eu aucun tour depuis que vous avez installé cette version, son dossier n’est pas un dépôt git, ou **Branche Git sur les lignes de discussion** est désactivée. Après une mise à jour, redémarrez dsh (la partie hôte enregistre la branche).
|
|
227
231
|
- **Vérification de l’objectif indique que le test s’est terminé avec le code 127 ou « not found » :** dsh démarré depuis le Finder ou le Dock peut avoir un PATH plus court que votre terminal : il ne trouve donc pas `npm`, `pnpm` ou `cargo`. Démarrez dsh depuis un terminal, ou définissez votre propre commande de test avec le chemin complet sous **Vérification de l’objectif** → **Modifier**. **Lancer maintenant** affiche le résultat tout de suite.
|
|
228
232
|
- **L’objectif ne se ferme pas et l’agent continue de travailler :** **Vérification de l’objectif** a trouvé un test en échec ou du travail manquant ; la ligne sous l’objectif indique pourquoi (survolez le résultat pour voir les détails). Corrigez la cause ou la commande de test, ou terminez l’objectif vous-même avec `/goal` ou la barre de l’objectif (ce n’est pas vérifié).
|
|
229
|
-
- **L’installation échoue juste après une nouvelle version :** ajoutez la version (`dsh-composer-plus@1.
|
|
233
|
+
- **L’installation échoue juste après une nouvelle version :** ajoutez la version (`dsh-composer-plus@1.25.0`) ; voir la note d’installation plus haut.
|
|
230
234
|
- **Sauvegarder maintenant indique « Une autre action de sauvegarde est en cours » :** une action tourne dans une autre fenêtre de dsh ou dans la console de secours (elles partagent un fichier de verrou, `.composer-plus.lock`, dans le dossier de sauvegarde). Attendez qu’elle se termine. Si aucune action ne tourne, le verrou d’un processus fermé est repris au clic suivant.
|
|
231
235
|
- **La console de secours indique « dsh is running » :** quittez d’abord dsh. Si dsh est vraiment fermé, le fichier nommé dans le message reste d’un plantage : supprimez-le et réessayez.
|
|
232
236
|
- **Après une restauration, dsh ne démarre pas ou un plugin manque :** les paquets de plugins d’un profil doivent être réinstallés. La console de secours le propose après une restauration ; sinon, exécutez `pnpm install` dans chaque dossier sous `$DSH_HOME/profiles/` qu’elle liste. Les secrets qui n’étaient pas dans le vault (autre ordinateur) doivent être saisis de nouveau : la console les liste.
|
|
@@ -260,7 +264,7 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
|
|
|
260
264
|
- **Adapter la carte de question à la fenêtre** ne modifie que la carte de question de dsh, pas la carte de revue du plan. Elle trouve la carte grâce au balisage de dsh (`data-question-key`, `data-question-scroll`) ; si une mise à jour de dsh change ce balisage, la carte s’affiche comme dsh la dessine. La hauteur de la carte suit la fenêtre, pas la conversation : dans une conversation affichée dans un panneau latéral étroit, une carte haute peut encore dépasser le haut de la conversation.
|
|
261
265
|
- **Adapter l’en-tête de la conversation à la fenêtre** trouve l’en-tête de la conversation de dsh par ses noms de classe générés (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`), car dsh n’offre pas de point d’accroche pour sa mise en page. Si une mise à jour de dsh les renomme, l’en-tête s’affiche comme dsh le dessine. Dans une colonne de conversation très étroite, l’en-tête peut prendre deux ou trois lignes, et la zone au-dessus des messages devient plus basse.
|
|
262
266
|
- **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). Avec une clé APNs dans `apns.json` (voir `tether/README.md`), le Mac envoie les notifications par le service push d'Apple : elles arrivent aussi quand Tether est fermé ; le Mac doit être éveillé avec dsh ouvert. Sans la clé, le téléphone ne les reçoit que lorsque Tether est ouvert ou vient de passer en arrière-plan. Tether ne les envoie qu’après que vous avez activé « Settings → Notifications → Send notifications » dans Tether. Tether garde cette option et sa plage horaire séparément pour chaque Mac appairé. Elle est désactivée par défaut sur chaque Mac, et iOS demande l’autorisation quand vous l’activez. L’app iOS n’est pas encore sur l’App Store : compilez-la depuis `tether/ios` avec Xcode. « Tailscale only » demande quand même une adresse Wi-Fi ou Ethernet sur le Mac (la passerelle ne démarre qu’avec une telle adresse). Le journal d’accès est propre à chaque Mac et ne garde que les 200 tentatives les plus récentes ; une tentative répétée en moins d’une minute augmente de un le compteur de la même ligne. Chaque notification indique le Mac et le projet du chat (`Studio Mac · recipe-box`), le titre du chat et le texte : Turn finished affiche la dernière réponse de l’agent. Avec la clé APNs, ce texte passe par le service push d’Apple. Le verrouillage de Tether ne masque pas les aperçus des notifications sur l’écran verrouillé de l’iPhone : désactivez-les dans les Réglages d’iOS. Les points verts de Tether suivent le Mac : une conversation que vous ouvrez dans dsh perd aussi son point sur le téléphone. Une conversation que vous ouvrez dans Tether perd son point seulement sur les téléphones. Le point de dsh sur le Mac reste jusqu’à ce que vous ouvriez la conversation sur le Mac.
|
|
263
|
-
- **Ordinateurs distants** a besoin de Tailscale sur les deux Mac, et de Composer Plus avec cette fonction activée sur le Mac que vous ouvrez. Ce Mac doit être éveillé, avec dsh en cours d’exécution. Le sélecteur n’apparaît que si la barre latérale gauche est ouverte (pas quand elle n’affiche que des icônes). Si la page de l’autre Mac n’a pas son propre sélecteur (une version de Composer Plus antérieure à 1.23.0 là-bas), le sélecteur de ce Mac s’affiche au même endroit, par-dessus cette page. Avec la version 1.23.0 là-bas, le sélecteur affiche le nom de l’autre Mac : choisissez **Ce Mac** dans son menu pour revenir. Chaque ordinateur que vous avez ouvert garde sa page en mémoire jusqu’à ce que vous désactiviez la fonction ou redémarriez dsh. Dans l’app de bureau, la page de l’autre Mac est une page intégrée : les raccourcis clavier de dsh (par exemple une nouvelle discussion) n’y fonctionnent pas, et les téléchargements de fichiers, le microphone et les notifications n’y fonctionnent pas non plus. La fonction utilise le port 19392 (un seul dsh par Mac peut laisser entrer d’autres ordinateurs). Depuis la page d’un autre Mac, le sélecteur ne propose que les ordinateurs de ce Mac : vous ne pouvez pas ouvrir un troisième Mac à travers l’autre Mac.
|
|
267
|
+
- **Ordinateurs distants** a besoin de Tailscale sur les deux Mac, et de Composer Plus avec cette fonction activée sur le Mac que vous ouvrez. Ce Mac doit être éveillé, avec dsh en cours d’exécution. Le sélecteur n’apparaît que si la barre latérale gauche est ouverte (pas quand elle n’affiche que des icônes). Si la page de l’autre Mac n’a pas son propre sélecteur (une version de Composer Plus antérieure à 1.23.0 là-bas), le sélecteur de ce Mac s’affiche au même endroit, par-dessus cette page. Avec la version 1.23.0 là-bas, le sélecteur affiche le nom de l’autre Mac : choisissez **Ce Mac** dans son menu pour revenir. Chaque ordinateur que vous avez ouvert garde sa page en mémoire jusqu’à ce que vous désactiviez la fonction ou redémarriez dsh. Si l’ordinateur n’a pas répondu (il était en veille ou Tailscale était désactivé), sa page n’est pas gardée : choisissez-le de nouveau et elle se recharge. Dans l’app de bureau, la page de l’autre Mac est une page intégrée : les raccourcis clavier de dsh (par exemple une nouvelle discussion) n’y fonctionnent pas, et les téléchargements de fichiers, le microphone et les notifications n’y fonctionnent pas non plus. La fonction utilise le port 19392 (un seul dsh par Mac peut laisser entrer d’autres ordinateurs). Depuis la page d’un autre Mac, le sélecteur ne propose que les ordinateurs de ce Mac : vous ne pouvez pas ouvrir un troisième Mac à travers l’autre Mac. Le basculement en un clic ne compte que les ordinateurs appairés et joignables (un ordinateur qu’il faut appairer de nouveau ne compte pas) ; avec un seul ordinateur de ce type, **Ajouter un ordinateur…** se trouve dans le menu du clic droit (sur un écran tactile : appui long) ou dans **Réglages → Composer Plus → Ordinateurs distants**.
|
|
264
268
|
- Un lien de session fonctionne dans les discussions ; un clic dessus n’ouvre pas la discussion. Un lien créé avec **Copier le lien du message** n’ouvre son message que sur dsh 0.2.1 et versions ultérieures, et seulement depuis un message dans une discussion (dsh 0.2.0 n’a pas de règles de texte utilisateur : le lien y est copié, mais s’affiche comme texte simple). Un message qu’une annulation a retiré, ou que la compaction a enlevé de l’historique que dsh charge, ne peut pas être affiché : le lien le dit alors. Les boutons 🔗 s’attachent aux lignes de message de dsh ; si une mise à jour de dsh change ce balisage, ils ne s’affichent pas.
|
|
265
269
|
- **Tout marquer comme lu** change les points non lus de dsh lui-même par une partie de dsh qui n’est pas une API publique (la liste `completionUnread` de l’état des sessions de dsh). Si une mise à jour de dsh la renomme, l’élément ne s’affiche pas. L’élément va dans le menu « … » du projet de dsh, qui n’a pas d’emplacement pour les plugins ; si dsh change ce menu, l’élément ne s’affiche pas non plus.
|
|
266
270
|
- **Modifier sur place un message en file d’attente** ne change pas un message dont l’envoi a commencé entre-temps et n’écrase pas un message modifié entre-temps (par exemple dans Tether sur l’iPhone) : un avis le signale. Une nouvelle image demande un modèle qui accepte les images (les limites d’image propres à dsh s’appliquent), et un nouveau fichier doit finir de se téléverser avant que vous puissiez enregistrer. Seuls vos propres messages en file d’attente peuvent être modifiés : pas une itération d’objectif ni une réponse à une question dans la file. Après une mise à jour du plugin, seules les modifications de texte fonctionnent tout de suite : redémarrez dsh avant d’enregistrer un message avec des images ou des fichiers (la partie hôte se charge au démarrage).
|
|
@@ -296,7 +300,8 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
|
|
|
296
300
|
- **Pack de skill turc** installe un skill tiers : ses règles viennent du dépôt GitHub de son auteur, pas de Composer Plus, et une nouvelle version sert dès la vérification quotidienne suivante, sans relecture de notre part. La vérification prouve que les fichiers sont ceux que GitHub liste pour ce commit, pas que les règles sont bonnes. Le modèle décide quand charger le skill (vous pouvez aussi l’appeler par son nom) ; les règles ne s’appliquent qu’aux textes turcs. La partie hôte utilise la langue qu’un navigateur a signalée en dernier : si deux navigateurs utilisent des langues différentes, la plus récente l’emporte. GitHub autorise 60 appels d’API par heure sans connexion ; une vérification refusée garde la copie installée et affiche la raison dans les réglages.
|
|
297
301
|
- **Démêler le code** contient une copie fixe de la compétence (caldoai/skills, commit f3cf477) : une modification de l’original n’arrive qu’avec une nouvelle version de Composer Plus. La compétence exécute un long objectif qui peut modifier de nombreux fichiers, et ses sous-agents et vérifications consomment beaucoup de jetons. Là où le projet n’a pas de tests, elle peut changer le comportement sans prévenir : lancez-la sur une branche et lisez le diff avant de fusionner. Une compétence du même nom dans le projet, dans un dossier de compétences personnalisé ou dans `~/.dsh/skills` la remplace. Tant que l’interrupteur est désactivé, `/untangle-codebase` part au modèle comme simple texte.
|
|
298
302
|
- **Tableau des tâches** montre les discussions que dsh liste dans cette fenêtre : une discussion hors d’un projet n’apparaît que dans **Tous les projets**, et le dossier d’une branche par discussion (`<project>/.worktrees/<name>`) compte comme son projet. La colonne d’une carte est l’état en direct de la discussion, on ne peut donc pas faire glisser les cartes : une discussion passe dans **Terminé** quand son tour se termine, aussi après une erreur ou un arrêt, et revient dans **En cours** quand elle repart. Le point vert est le point « terminé » de dsh, que dsh ne garde que dans cette fenêtre : après un rechargement, les discussions terminées s’affichent sans lui. **Terminé** montre les 50 discussions les plus récentes (**Afficher N plus anciennes** montre le reste). **Rechercher des projets** trouve un projet par son nom uniquement, pas par le chemin de son dossier. **Actifs au cours des 2 dernières heures** masque un projet quand toutes ses discussions ont plus de 2 heures, sont inactives et lues ; le tableau affiche toujours le projet que vous avez choisi. **Nouvelle tâche** ne retient que la nouvelle discussion la plus récente de cette fenêtre : quand vous ouvrez une autre discussion avant le premier message, cette discussion reste en haut de **En cours** sous le nom **Nouvelle tâche** jusqu’à ce que vous y écriviez, mais le tableau ne revient de lui-même que pour la plus récente. Après un rechargement, une nouvelle discussion sans message n’est pas sur le tableau (dsh la garde comme sa Nouvelle session vide). Les étiquettes viennent d’un appel au modèle par tâche, à partir de son premier message : elles peuvent être fausses, et une discussion que vous n’avez pas lancée depuis le tableau n’en a pas. Le titre est le titre de discussion de dsh (le service de titres de dsh, avec le modèle de la discussion) ; en attendant, la carte affiche la première ligne du premier message. **×** et **Tout retirer** retirent seulement des cartes du tableau : aucune discussion n’est supprimée. **Annuler** ne s’affiche que pendant 8 secondes, dans cette fenêtre ; plus tard, **Retirées (N)** → **Remettre** fait revenir une carte, et une discussion qui s’exécute de nouveau revient d’elle-même. **Tout retirer** demande d’abord et retire les cartes terminées et lues du projet affiché (de tous les projets avec **Tous les projets**), aussi celles derrière **Afficher N plus anciennes** ; une carte non lue (verte) reste. dsh ne garde son point vert que dans cette fenêtre : après un rechargement, Tout retirer peut donc retirer une carte dont vous n’avez pas lu la réponse. La liste est gardée sur ce Mac pour toutes les fenêtres et pour Tether ; quand elle compte 5 000 discussions, les plus anciennes reviennent. **Répondre** ne répond qu’à la demande la plus récente de la discussion : quand la demande a reçu une réponse ailleurs (une autre fenêtre, Tether, la revue automatique) ou que la discussion demande autre chose, le panneau l’indique et n’envoie rien. Les versions précédentes avaient une liste de tâches avec des commentaires et des outils pour les agents ; ils n’existent plus, et l’ancien `board.json` n’est pas affiché. L’idée et l’apparence viennent de [Kanzo](https://github.com/emanuele-em/kanzo) par emanuele-em (AGPL-3.0) ; Composer Plus n’en utilise aucun code. `Cmd+Shift+K` est un raccourci dsh : dans un navigateur sous Linux, il n’a pas de touche par défaut (définissez-en une dans la page des raccourcis clavier de dsh), et une extension du navigateur ou une autre application peut la prendre avant. Une carte quitte **Terminé** quand le point vert de dsh disparaît (vous avez ouvert la discussion) ou, pour une discussion terminée derrière le tableau alors qu’elle était la discussion ouverte, quand cette discussion s’affiche sans panneau par-dessus. Cet état « lu » ne vit que dans cette fenêtre de dsh, comme les points de dsh : après un rechargement ou dans une autre fenêtre, chaque discussion terminée compte comme lue, donc elle est dans **Terminées récemment**.
|
|
299
|
-
- **Assistant** a une seule discussion pour toutes les fenêtres de ce Mac. Il s’exécute avec le mode d’autorisation workspace-write : il n’écrit des fichiers que dans `~/Assistant`, et une commande hors de ce dossier demande d’abord. Quand vous passez la discussion à un mode sans approbations (Accès complet), dsh refuse chaque approbation, donc l’assistant ne peut ni envoyer, ni lancer, ni arrêter, ni archiver une discussion. La carte d’approbation ne protège que les six outils : une commande shell de l’assistant peut toujours atteindre le réseau, comme dans toute discussion avec ce mode. Sur dsh 0.2.0 et 0.2.1, les outils de planification de dsh ne voient que les rappels de la discussion de l’assistant elle-même, pas les automatisations des autres discussions ; à partir de dsh 0.2.2, ils listent et modifient toutes les tâches planifiées. chats_list laisse de côté les discussions archivées, vides et de sous-agents, ainsi que la discussion de l’assistant elle-même ; « en attente de vous » signifie une approbation, une question ou une revue de plan ouverte dans une discussion en cours. chat_read donne les messages de l’utilisateur et les réponses de l’agent (sans sortie d’outil), au plus 50 messages et environ 24 000 caractères. chat_archive refuse une discussion qui tourne encore ou qui a des rappels actifs. Un texte que le modèle lit peut quand même le tromper : la carte d’approbation est la dernière vérification, alors lisez-la avant de cliquer sur **Autoriser une fois**.
|
|
303
|
+
- **Assistant** a une seule discussion pour toutes les fenêtres de ce Mac. Il s’exécute avec le mode d’autorisation workspace-write : il n’écrit des fichiers que dans `~/Assistant`, et une commande hors de ce dossier demande d’abord. Quand vous passez la discussion à un mode sans approbations (Accès complet), dsh refuse chaque approbation, donc l’assistant ne peut ni envoyer, ni lancer, ni arrêter, ni archiver une discussion. La carte d’approbation ne protège que les six outils : une commande shell de l’assistant peut toujours atteindre le réseau, comme dans toute discussion avec ce mode. Sur dsh 0.2.0 et 0.2.1, les outils de planification de dsh ne voient que les rappels de la discussion de l’assistant elle-même, pas les automatisations des autres discussions ; à partir de dsh 0.2.2, ils listent et modifient toutes les tâches planifiées. chats_list laisse de côté les discussions archivées, vides et de sous-agents, ainsi que la discussion de l’assistant elle-même ; « en attente de vous » signifie une approbation, une question ou une revue de plan ouverte dans une discussion en cours. chat_read donne les messages de l’utilisateur et les réponses de l’agent (sans sortie d’outil), au plus 50 messages et environ 24 000 caractères. chat_archive refuse une discussion qui tourne encore ou qui a des rappels actifs. Un texte que le modèle lit peut quand même le tromper : la carte d’approbation est la dernière vérification, alors lisez-la avant de cliquer sur **Autoriser une fois**. Les sujets en parallèle utilisent l’outil de sous-agents de dsh : un profil ou un mode d’autorisation sans cet outil garde l’ancien fonctionnement (un sujet à la fois ; le message suivant attend dans la file d’attente ou oriente le tour en cours). C’est le modèle qui décide de ce qui compte comme une tâche longue, donc une question courte peut quand même prendre un tour. Le sous-agent de chaque sujet s’exécute avec ses propres tokens ; quand dsh redémarre, un sujet en cours s’arrête (son résultat ne revient pas). Un résultat revient comme un nouveau tour de la discussion de l’assistant : il attend donc pendant que vous écrivez au milieu d’un tour.
|
|
304
|
+
- **Assistant séparé des discussions** et **Messages seuls dans l’Assistant** masquent les lignes de dsh lui-même avec une règle de style, qui les trouve par le balisage de la barre latérale et des discussions de dsh (`data-row-key`, `data-chat-flow-kind`) : quand une mise à jour de dsh change ce balisage, la discussion de l’assistant réapparaît dans la liste, ou ses étapes de travail réapparaissent. Les lignes sont masquées, pas supprimées : la navigation au clavier de dsh dans la barre latérale peut encore atteindre une ligne masquée. **Assistant toujours libre** refuse chaque appel d’outil de la discussion de l’assistant qui n’est pas l’un de ses outils courts ; le modèle confie alors l’étape à un sous-agent, mais il peut d’abord essayer l’appel refusé, ce qui coûte une étape du modèle. Pendant qu’une carte d’approbation vous attend, la discussion de l’assistant compte toujours comme occupée. Quand sa requête la plus récente n’a pas l’outil de sous-agents (un mode d’autorisation ou un profil sans cet outil), la règle ne fait rien. **Nouvelles des discussions dans l’Assistant** lance un tour du modèle dans la discussion de l’assistant pour chaque lot de nouvelles, donc elle consomme des tokens ; avec **Connexion mobile (iPhone)** activée, votre téléphone peut recevoir deux notifications pour une discussion terminée (celle de la discussion et celle de l’assistant). Les nouvelles en attente sont perdues quand dsh redémarre. La fonction ne voit que les discussions de ce Mac.
|
|
300
305
|
- **Priorité au message envoyé après Arrêter** n’agit qu’après l’arrêt de la discussion (ou après un tour qui a échoué, ou à l’ouverture d’une discussion qui a encore une file) : un message envoyé pendant qu’un tour s’exécute attend toujours à la fin de la file. Il ne passe que devant vos propres messages en file : si un tour d’objectif ou une réponse à une question attend dans la file, l’ordre de dsh reste. Il lit une partie de dsh qui n’est pas une API publique (si le tour arrêté est encore en train de se terminer) ; si une mise à jour de dsh la renomme, le message ne passe devant qu’une fois ce tour terminé. Les discussions de sous-agents gardent l’ordre de dsh.
|
|
301
306
|
- **Mémoire du projet** appartient au premier dossier de la discussion (le dossier de projet de dsh) : une discussion qui change de dossier avec `cd` garde la mémoire de son premier projet, et le même dossier ouvert par un autre chemin vers les mêmes fichiers la partage. Une discussion fige sa section de mémoire à son début : une note enregistrée plus tard apparaît donc à partir de la discussion suivante (`memory_recall` la trouve tout de suite). La revue garde seulement ce que le modèle décide de garder : elle peut manquer un fait ou en garder un faux ; vérifiez-les dans **Ouvrir la mémoire** et modifiez-les là, ou modifiez les fichiers à la main quand dsh est fermé. **Ouvrir la mémoire** envoie les notes du projet sélectionné et les notes globales (tous les projets quand vous sélectionnez Toutes les notes ; au plus environ 60 000 caractères, le reste est seulement compté et ne peut pas changer dans cette demande) et votre texte au modèle par défaut de dsh, pas au modèle de la discussion. Un aperçu est gardé sur le Mac 30 minutes et jusqu’au redémarrage de dsh ; si une revue ou l’agent modifie les notes entre-temps, **Appliquer** refuse et vous redemandez un aperçu. **Appliquer** enregistre toutes les modifications d’un aperçu ou aucune : si une modification ne peut pas être enregistrée (par exemple, MEMORY.md est plein), les notes restent telles quelles et la raison s’affiche. Chaque tour terminé avec un message de vous coûte un appel au modèle ; un appel en échec relit les mêmes messages après le tour suivant. Les discussions de sous-agents ne sont pas revues. L’idée et le format de fichier viennent de [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0) ; Composer Plus n’utilise pas son code et ne lit ni n’écrit jamais la mémoire propre de DS Bot.
|
|
302
307
|
- **Historique des versions de la mémoire** garde les 50 versions les plus récentes de chaque mémoire (chaque projet et la mémoire globale) ; les plus anciennes sont supprimées. Une version contient toute la mémoire de ce projet, pas une seule note. **Restaurer** remet tous les fichiers de cette version (sujets compris) et refuse si la mémoire a changé après l’ouverture de la version ; la mémoire d’avant la restauration devient une nouvelle version : vous pouvez donc l’annuler. Quand l’interrupteur est désactivé, aucune nouvelle version n’est gardée et **Restaurer** refuse ; les versions gardées restent. Aucune version n’existe d’avant cette fonction : l’historique commence au premier enregistrement après son installation.
|
|
@@ -352,6 +357,8 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
|
|
|
352
357
|
|
|
353
358
|
**Puis-je avoir une discussion d’assistant personnel qui me fait des rappels et gère mes autres discussions ?** Oui, avec **Assistant** (activé par défaut) : cliquez sur **Assistant** dans la barre latérale gauche. Il crée des rappels avec les tâches planifiées de dsh, cherche sur le web, liste et lit vos discussions, et n’envoie un message à une discussion, ou n’en lance, n’en arrête ou n’en archive une, qu’après votre approbation. Gardez votre profil dans la mémoire de son projet, sujet "profil".
|
|
354
359
|
|
|
360
|
+
**L’assistant peut-il rester hors de ma liste de discussions et fonctionner comme un bot ?** Oui. **Assistant séparé des discussions** retire sa discussion de la liste de la barre latérale et montre son état sur la ligne **Assistant** (orange pendant qu’il vous attend). **Messages seuls dans l’Assistant** masque ses étapes de travail. **Assistant toujours libre** lui fait confier chaque étape plus longue à un sous-agent en arrière-plan, donc il répond tout de suite. **Nouvelles des discussions dans l’Assistant** (désactivé par défaut ; il consomme des tokens) lui fait vous prévenir quand une autre discussion se termine, échoue ou vous attend.
|
|
361
|
+
|
|
355
362
|
**dsh peut-il sauvegarder mes discussions et mes réglages, comme dsh-backup ?** Oui : **Réglages → Composer Plus → Sauvegarde → Sauvegarder maintenant**. Il écrit le même format d’archive dans le même dossier (`~/Desktop/dsh-backups`) : les archives de dsh-backup s’affichent donc aussi et se restaurent, et vous pouvez supprimer dsh-backup. Activez **Sauvegarde automatique** pour des sauvegardes planifiées.
|
|
356
363
|
|
|
357
364
|
**dsh ne démarre plus. Comment restaurer une sauvegarde ?** Ouvrez le dossier de sauvegarde (`~/Desktop/dsh-backups`) et double-cliquez sur `Composer Plus Rescue.command` (Linux : `composer-plus-rescue.sh`, Windows : `Composer Plus Rescue.cmd`). Choisissez `3) Restore a backup`, sélectionnez-en une et tapez `RESTORE`. Cela fonctionne sans dsh.
|
|
@@ -506,6 +513,8 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/
|
|
|
506
513
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
507
514
|
# Assistant: on by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
|
|
508
515
|
SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
|
|
516
|
+
# Assistant welcome card: shows above the input on the first open of the assistant chat, goes with the switch and with the first message, not in other chats
|
|
517
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-assistant-welcome.mjs /path/to/dsh/lib/bin.js
|
|
509
518
|
```
|
|
510
519
|
|
|
511
520
|
```sh
|
package/README.hi.md
CHANGED
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
फिर dsh रीस्टार्ट करें। (CLI डेस्कटॉप प्रोफ़ाइल में इंस्टॉल नहीं कर सकता; उस प्रोफ़ाइल को ऐप खुद संभालता है।)
|
|
31
31
|
|
|
32
|
-
> dsh का pnpm 24 घंटे से नए वर्शन छोड़ देता है। रिलीज़ के तुरंत बाद वर्शन भी लिखें: `dsh-composer-plus@1.
|
|
32
|
+
> dsh का pnpm 24 घंटे से नए वर्शन छोड़ देता है। रिलीज़ के तुरंत बाद वर्शन भी लिखें: `dsh-composer-plus@1.25.0`।
|
|
33
33
|
|
|
34
34
|
## सुविधाएं
|
|
35
35
|
|
|
@@ -75,7 +75,11 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
75
75
|
| **सुरक्षित फ़ाइलें** | <a id="feature-protectedfiles"></a>डिफ़ॉल्ट रूप से चालू। एजेंट के अपने फ़ाइल टूल आपके पैटर्न से मेल खाने वाली फ़ाइलें न पढ़ सकते हैं, न बदल सकते हैं: **पढ़ना और लिखना** पैटर्न के लिए किसी फ़ाइल पर `read`, `read_image` और `grep` मना किए जाते हैं, और दोनों तरह के पैटर्न के लिए `write`, `edit` और `str_replace_editor`। एजेंट वजह पढ़ता है और उसे आपसे पूछने को कहा जाता है। डिफ़ॉल्ट पैटर्न `.env*`, `*.pem` और `*.key` हैं। सेटिंग → Composer Plus → **सुरक्षित फ़ाइलें**: एक पैटर्न जोड़ें (जैसे `published/**` या `config/*.yml`), **पढ़ना और लिखना** और **सिर्फ़ लिखना** के बीच बदलने के लिए उसकी तरह पर क्लिक करें, ✕ से उसे हटाएं, या **डिफ़ॉल्ट इस्तेमाल करें** पर क्लिक करें। `/` के बिना पैटर्न किसी भी फ़ोल्डर में फ़ाइल के नाम से मेल खाता है। यह एक सुरक्षा रेलिंग है, सैंडबॉक्स नहीं: शेल कमांड (`cat .env`), स्क्रिप्ट या MCP टूल फिर भी फ़ाइल तक पहुंच सकते हैं (सीमाएं देखें)। | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="स्क्रीनशॉट: सुरक्षित फ़ाइलें"></a> |
|
|
76
76
|
| **ब्लॉक की गई कमांड** | <a id="feature-blockedcommands"></a>डिफ़ॉल्ट रूप से चालू, खाली सूची के साथ। एजेंट की शेल कमांड (`bash`, `pwsh`) आपके नियमों से मेल खाने वाली कमांड नहीं चला सकतीं: **ब्लॉक** नियम कॉल को मना करता है (एजेंट वजह पढ़ता है और उसे आपसे पूछने को कहा जाता है), **पहले पूछना** नियम dsh का मंज़ूरी कार्ड दिखाता है, और कमांड सिर्फ़ तब चलती है जब आप उसकी अनुमति देते हैं। सेटिंग → Composer Plus → **ब्लॉक की गई कमांड**: एक नियम टाइप करें (जैसे `npm publish`, `git push --force` या `ssh *192.168.2.19`), **ब्लॉक** और **पहले पूछना** के बीच बदलने के लिए उसकी तरह पर क्लिक करें, फिर **जोड़ें** पर क्लिक करें; किसी नियम की तरह बदलने के लिए उसकी तरह पर क्लिक करें, ✕ से नियम हटाएं। नियम एक कमांड का नाम और वे शब्द होते हैं, जो इसी क्रम में उसके बाद आने चाहिए; `*` किसी भी टेक्स्ट से मेल खाता है। यह `&&`, `;`, `\|` के बाद, `$(…)`, `bash -c "…"` या `eval` के अंदर, और `sudo` या `env` के बाद भी कमांड ढूंढता है। यह एक सुरक्षा रेलिंग है, सैंडबॉक्स नहीं: कोई वैरिएबल (`$CMD`), स्क्रिप्ट फ़ाइल या दूसरा प्रोग्राम फिर भी कमांड चला सकता है (सीमाएं देखें)। | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="स्क्रीनशॉट: ब्लॉक की गई कमांड"></a> |
|
|
77
77
|
| **टास्क बोर्ड** | <a id="feature-taskboard"></a>बायां साइडबार → **टास्क बोर्ड**, या dsh में कहीं भी `Cmd+Shift+K` (Windows और Linux पर `Ctrl+Shift+K`) दबाएं। आपकी dsh चैट का कानबान बोर्ड, उसी लाइव स्थिति के साथ जो साइडबार दिखाता है: जो चैट आपकी मंज़ूरी, जवाब या प्लान रिव्यू का इंतज़ार करती है, वह नारंगी बिंदु के साथ **समीक्षा** में है, चल रही चैट **प्रगति में** है, और खत्म हुई जो चैट आपने अभी नहीं खोली, वह **पूरा हुआ** में है (हरी)। चैट खोलने पर उसका कार्ड अपने आप **पूरा हुआ** से हट जाता है; पढ़ी गई खत्म हुई चैट देखने के लिए हरे कार्डों के नीचे **हाल में पूरे हुए (N)** पर क्लिक करें (सबसे नई 10, फिर **N पुराने टास्क दिखाएं**; खुला या बंद होना इस डिवाइस पर रहता है)। जो चैट बोर्ड के पीछे खुली रहते हुए खत्म होती है (**नया टास्क**), वह आपके खोलने तक हरी रहती है। प्रोजेक्ट सूची खोलने के लिए बोर्ड के ऊपर प्रोजेक्ट के नाम पर क्लिक करें, फिर कोई प्रोजेक्ट या **सभी प्रोजेक्ट** चुनें; हर चैट की अपनी ब्रांच का फ़ोल्डर अपने प्रोजेक्ट में गिना जाता है। चुनने के बाद, `Esc` दबाने पर या सूची के बाहर क्लिक करने पर सूची बंद हो जाती है। किसी प्रोजेक्ट को उसके नाम से ढूंढने के लिए सूची में सबसे ऊपर **प्रोजेक्ट खोजें** में टाइप करें (छोटे-बड़े अक्षर और एक्सेंट मायने नहीं रखते; `Esc` बॉक्स खाली करता है), पहला मिलान चुनने के लिए `Enter` दबाएं, और सिर्फ़ वे प्रोजेक्ट दिखाने के लिए जिनमें कोई चैट इंतज़ार कर रही है, चल रही है, बिना देखे खत्म हुई है या पिछले 2 घंटों में बदली है, **पिछले 2 घंटों में सक्रिय** पर क्लिक करें (यह सेटिंग इस डिवाइस पर रहती है)। **नया टास्क** (या `n`) बोर्ड पर दिख रहे प्रोजेक्ट में dsh की अपनी नई चैट खोलता है (**सभी प्रोजेक्ट** चुने होने पर उस प्रोजेक्ट में, जिसे dsh का नया सेशन चुनता है), ताकि आप किसी भी चैट की तरह फ़ाइलें जोड़ सकें, कमांड इस्तेमाल कर सकें और मॉडल चुन सकें। आपका पहला संदेश जाते ही बोर्ड अपने-आप लौट आता है। तब तक चैट **प्रगति में** कॉलम में सबसे ऊपर **नया टास्क** के रूप में इंतज़ार करती है: पहला संदेश लिखने के लिए उस पर क्लिक करें। जिस प्रोजेक्ट में कोई चैट आपका इंतज़ार कर रही है, प्रोजेक्ट सूची में उसके आगे नारंगी बिंदु दिखता है (जब कोई भी चैट इंतज़ार कर रही हो, तब ऊपर प्रोजेक्ट के नाम के पास भी यह दिखता है)। dsh चैट को नाम देता है और चैट का मॉडल उसी संदेश से ज़्यादा से ज़्यादा 3 टैग लिखता है। चैट खोलने के लिए कार्ड पर क्लिक करें। बोर्ड पर ही जवाब देने के लिए नारंगी कार्ड (या उसके **जवाब दें**) पर क्लिक करें; पूरी चैट के लिए पैनल में **चैट खोलें** है: **अस्वीकार करें** या **एक बार अनुमति दें**, प्लान के लिए **मंज़ूर करें** या **बदलावों का अनुरोध करें**, या सवाल के लिए विकल्प और अपना टेक्स्ट। किसी खत्म हुए कार्ड को बोर्ड से हटाने के लिए उसके **×** पर क्लिक करें, या **हाल में पूरे हुए** खोलकर उन कार्डों को बोर्ड से हटाने के लिए **पूरा हुआ** के ऊपर **सब हटाएं** पर क्लिक करें: यह पहले दिखाता है कि किस प्रोजेक्ट के कितने कार्ड हटेंगे, और बिना पढ़े (हरे) कार्ड बने रहते हैं। उसके बाद 8 सेकंड तक **पहले जैसा करें** कार्ड वापस लाता है; **पूरा हुआ** के नीचे **हटाए गए (N)** बोर्ड से हटे कार्डों की सूची दिखाता है, और **बोर्ड पर वापस रखें** किसी एक कार्ड को फिर से **पूरा हुआ** में दिखाता है। कोई चैट डिलीट नहीं होती: चैट dsh के साइडबार में बनी रहती हैं, बोर्ड रीस्टार्ट के बाद भी यह याद रखता है (Tether वही बोर्ड दिखाता है), और जो चैट फिर से चलती है, वह बोर्ड पर लौट आती है। **प्रगति में** के किसी कार्ड पर पॉइंटर रखें (या कीबोर्ड फ़ोकस उस पर ले जाएं), तो उसकी प्रगति दिखती है: चैट कितनी देर से चल रही है, उसकी करने वाले कामों की सूची का चरण, अभी चल रहा टूल और एजेंट की आखिरी लाइन। सेटिंग → Composer Plus → टास्क बोर्ड में **होवर पर प्रगति** से **तेज़ (AI के बिना)** (डिफ़ॉल्ट: सिर्फ़ चैट पढ़ता है) या **AI सारांश** (चैट के मॉडल को एक छोटी कॉल एक या दो वाक्य भी लिखती है) चुनें। | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="स्क्रीनशॉट: टास्क बोर्ड"></a> |
|
|
78
|
-
| **असिस्टेंट** | <a id="feature-assistant"></a>डिफ़ॉल्ट रूप से चालू (इसे **सेटिंग → Composer Plus** में बंद करें)। बाएं साइडबार में **असिस्टेंट** पर क्लिक करें (**टास्क बोर्ड** के ठीक नीचे): यह एक स्थायी चैट खोलता है, जिसे आप ChatGPT या Grok चैट की तरह अपने निजी असिस्टेंट के रूप में इस्तेमाल करते हैं। पहली क्लिक `~/Assistant` फ़ोल्डर बनाती है, उसे “Assistant” प्रोजेक्ट के रूप में जोड़ती है और चैट को workspace-write अनुमति मोड और dsh के डिफ़ॉल्ट मॉडल के साथ शुरू करती है; उसके बाद हर क्लिक वही चैट खोलती है (आर्काइव की गई चैट वापस आती है, डिलीट की गई चैट फिर से बनती है)। इससे रिमाइंडर के लिए कहें (“2 मिनट में मुझे पानी पीना याद दिलाओ”): यह dsh के शेड्यूल किए गए टास्क इस्तेमाल करता है, इसलिए रिमाइंडर उस समय चैट को चलाता है, और मोबाइल कनेक्ट चालू होने पर Tether अपनी “Turn finished” सूचना भेजता है। इससे वेब पर खोजने के लिए कहें, या अपनी दूसरी चैट के बारे में पूछें: यह सभी प्रोजेक्ट की चैट की सूची दिखा सकता है (चल रही, आपका इंतज़ार कर रही या निष्क्रिय) और किसी एक चैट के सबसे नए संदेश पढ़ सकता है। यह किसी चैट को संदेश भी भेज सकता है, किसी प्रोजेक्ट में नई चैट शुरू कर सकता है, चल रही चैट रोक सकता है या किसी चैट को आर्काइव कर सकता है: इन चार कामों में से हर एक पहले dsh का मंज़ूरी कार्ड दिखाता है (Tether में भी), और जब तक आप **एक बार अनुमति दें** पर क्लिक नहीं करते, कुछ नहीं होता। इसमें डिलीट करने का कोई टूल नहीं है। ये टूल और इसके छोटे निर्देश सिर्फ़ इसी चैट में हैं; किसी वेब पेज या दूसरी चैट में पढ़ा गया टेक्स्ट डेटा माना जाता है, आदेश नहीं। हर बार बताने के बजाय अपनी प्रोफ़ाइल इस प्रोजेक्ट की मेमोरी में रखें (**प्रोजेक्ट मेमोरी**, विषय “profil”)। | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="स्क्रीनशॉट: असिस्टेंट"></a> |
|
|
78
|
+
| **असिस्टेंट** | <a id="feature-assistant"></a>डिफ़ॉल्ट रूप से चालू (इसे **सेटिंग → Composer Plus** में बंद करें)। बाएं साइडबार में **असिस्टेंट** पर क्लिक करें (**टास्क बोर्ड** के ठीक नीचे): यह एक स्थायी चैट खोलता है, जिसे आप ChatGPT या Grok चैट की तरह अपने निजी असिस्टेंट के रूप में इस्तेमाल करते हैं। पहली क्लिक `~/Assistant` फ़ोल्डर बनाती है, उसे “Assistant” प्रोजेक्ट के रूप में जोड़ती है और चैट को workspace-write अनुमति मोड और dsh के डिफ़ॉल्ट मॉडल के साथ शुरू करती है; उसके बाद हर क्लिक वही चैट खोलती है (आर्काइव की गई चैट वापस आती है, डिलीट की गई चैट फिर से बनती है)। जब तक चैट में कोई संदेश नहीं है, इनपुट के ऊपर एक छोटा कार्ड बताता है कि असिस्टेंट क्या करता है और तीन उदाहरण अनुरोध दिखाता है; आपका पहला संदेश जाते ही यह हट जाता है। इससे रिमाइंडर के लिए कहें (“2 मिनट में मुझे पानी पीना याद दिलाओ”): यह dsh के शेड्यूल किए गए टास्क इस्तेमाल करता है, इसलिए रिमाइंडर उस समय चैट को चलाता है, और मोबाइल कनेक्ट चालू होने पर Tether अपनी “Turn finished” सूचना भेजता है। इससे ऐसे बात करें, जैसे बैकग्राउंड में काम करने वाले किसी दोस्त से: ज़्यादा समय लेने वाला काम (रिसर्च, कई चरण) उसके अपने बैकग्राउंड सबएजेंट को जाता है, चैट एक पंक्ति में बताती है कि उसने क्या शुरू किया और तुरंत खाली हो जाती है। पहला विषय चलते समय ही दूसरा विषय शुरू करें: हर विषय को अपना सबएजेंट मिलता है, और हर नतीजा तैयार होने पर इसी चैट में आता है। इससे वेब पर खोजने के लिए कहें, या अपनी दूसरी चैट के बारे में पूछें: यह सभी प्रोजेक्ट की चैट की सूची दिखा सकता है (चल रही, आपका इंतज़ार कर रही या निष्क्रिय) और किसी एक चैट के सबसे नए संदेश पढ़ सकता है। यह किसी चैट को संदेश भी भेज सकता है, किसी प्रोजेक्ट में नई चैट शुरू कर सकता है, चल रही चैट रोक सकता है या किसी चैट को आर्काइव कर सकता है: इन चार कामों में से हर एक पहले dsh का मंज़ूरी कार्ड दिखाता है (Tether में भी), और जब तक आप **एक बार अनुमति दें** पर क्लिक नहीं करते, कुछ नहीं होता। इसमें डिलीट करने का कोई टूल नहीं है। ये टूल और इसके छोटे निर्देश सिर्फ़ इसी चैट में हैं; किसी वेब पेज या दूसरी चैट में पढ़ा गया टेक्स्ट डेटा माना जाता है, आदेश नहीं। हर बार बताने के बजाय अपनी प्रोफ़ाइल इस प्रोजेक्ट की मेमोरी में रखें (**प्रोजेक्ट मेमोरी**, विषय “profil”)। | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="स्क्रीनशॉट: असिस्टेंट"></a> |
|
|
79
|
+
| **चैट से अलग असिस्टेंट** | <a id="feature-assistantapart"></a>डिफ़ॉल्ट रूप से चालू (इसे **सेटिंग → Composer Plus** में बंद करें)। असिस्टेंट चैट बाएं साइडबार की चैट सूची से हट जाती है, इसलिए वह आपकी प्रोजेक्ट चैट के बीच नहीं रहती: इसे **असिस्टेंट** से खोलें। जब तक उसके प्रोजेक्ट “Assistant” में कोई दूसरी चैट नहीं है, वह प्रोजेक्ट भी हट जाता है; साइडबार की खोज चैट को फिर भी ढूंढ लेती है। **असिस्टेंट** पंक्ति पर एक बिंदु असिस्टेंट की स्थिति दिखाता है: काम कर रहा है (बैकग्राउंड विषय चलते समय भी), आपका इंतज़ार कर रहा है (नारंगी: मंज़ूरी, सवाल या प्लान रिव्यू) या नया जवाब (हरा)। जब असिस्टेंट चैट खुली होती है, तो **असिस्टेंट** पंक्ति खुली पंक्ति की तरह दिखती है। बंद करने पर चैट सूची में लौट आती है और पंक्ति पर कोई बिंदु नहीं होता। | <a href="assets/features/assistantApart.webp"><img src="assets/features/assistantApart.webp" width="160" alt="स्क्रीनशॉट: चैट से अलग असिस्टेंट"></a> |
|
|
80
|
+
| **असिस्टेंट में सिर्फ़ संदेश** | <a id="feature-assistantchatview"></a>डिफ़ॉल्ट रूप से चालू (इसे **सेटिंग → Composer Plus** में बंद करें)। असिस्टेंट चैट किसी बॉट से चैट जैसी दिखती है: टूल कॉल, रीज़निंग, चरणों के समूह और “Completed in” पंक्ति छिप जाते हैं, और आपको अपने संदेश, उसके जवाब, गड़बड़ियां और मंज़ूरी कार्ड दिखते हैं। दूसरी चैट नहीं बदलतीं। असिस्टेंट के काम के चरण फिर से देखने के लिए इसे बंद करें। | <a href="assets/features/assistantChatView.webp"><img src="assets/features/assistantChatView.webp" width="160" alt="स्क्रीनशॉट: असिस्टेंट में सिर्फ़ संदेश"></a> |
|
|
81
|
+
| **असिस्टेंट हमेशा खाली** | <a id="feature-assistantfree"></a>डिफ़ॉल्ट रूप से चालू (इसे **सेटिंग → Composer Plus** में बंद करें)। असिस्टेंट चैट तुरंत जवाब देती है और कभी किसी लंबे काम में व्यस्त नहीं रहती: वह सिर्फ़ अपने छोटे टूल (आपकी चैट, रिमाइंडर, मेमोरी और सबएजेंट) कॉल करती है। हर दूसरा चरण, जैसे वेब खोज, वेब पेज, फ़ाइल या कमांड, बैकग्राउंड सबएजेंट को जाता है; चैट एक पंक्ति में बताती है कि उसने क्या शुरू किया और आपके अगले संदेश के लिए खाली रहती है, और नतीजा तैयार होने पर चैट में वापस आता है। इसके सबएजेंट हमेशा की तरह काम करते हैं। जब असिस्टेंट चैट के पास सबएजेंट टूल नहीं होता (उसके अनुमति मोड या प्रोफ़ाइल की वजह से), तो यह नियम कुछ नहीं करता और **सेटिंग** में यह लिखा दिखता है। | <a href="assets/features/assistantFree.webp"><img src="assets/features/assistantFree.webp" width="160" alt="स्क्रीनशॉट: असिस्टेंट हमेशा खाली"></a> |
|
|
82
|
+
| **असिस्टेंट से चैट की खबरें** | <a id="feature-assistantnotify"></a>डिफ़ॉल्ट रूप से बंद: हर खबर की पंक्ति असिस्टेंट चैट का एक मॉडल टर्न है, इसलिए यह टोकन खर्च करती है। इसे **सेटिंग → Composer Plus** में चालू करें। फिर जब कोई दूसरी चैट लंबा टर्न (1 मिनट या ज़्यादा) पूरा करती है, विफल होती है, या 30 सेकंड तक आपका इंतज़ार करती है (मंज़ूरी, सवाल या प्लान रिव्यू), तो असिस्टेंट अपनी चैट में आपको बताता है: हर चैट के लिए एक छोटी पंक्ति, चैट के शीर्षक और प्रोजेक्ट के साथ। खबरें 15 सेकंड तक जमा होती हैं और ज़्यादा से ज़्यादा हर 2 मिनट में एक बार आती हैं; जब असिस्टेंट काम कर रहा होता है, तो वे उस टर्न के खत्म होने तक रुकती हैं। जिस चैट को आपने रोका, छोटा टर्न और असिस्टेंट की अपनी चैट कोई खबर नहीं देते। **मोबाइल कनेक्ट (iPhone)** चालू होने पर Tether को असिस्टेंट की सामान्य “Turn finished” सूचना मिलती है। | <a href="assets/features/assistantNotify.webp"><img src="assets/features/assistantNotify.webp" width="160" alt="स्क्रीनशॉट: असिस्टेंट से चैट की खबरें"></a> |
|
|
79
83
|
| **प्रोजेक्ट मेमोरी** | <a id="feature-projectmemory"></a>डिफ़ॉल्ट रूप से बंद: इसे **सेटिंग → Composer Plus** में चालू करें। हर प्रोजेक्ट फ़ोल्डर की अपनी मेमोरी होती है, जिसे उस प्रोजेक्ट की आगे की चैट पढ़ती हैं, जैसे DS Bot हर Bot के लिए एक मेमोरी रखता है। हर पूरे हुए टर्न के बाद चैट के मॉडल को एक कॉल नए संदेश पढ़ती है (रोलबैक किए गए नहीं), आपकी लंबे समय तक रहने वाली पसंद, फ़ैसले और तथ्य छोटे नोट के रूप में रखती है, और पुराने नोट बदलती या हटाती है। एजेंट खुद भी नोट सेव कर, हटा और खोज सकता है (`memory_remember`, `memory_forget`, `memory_recall`)। कोई नोट ग्लोबल भी हो सकता है: उसे हर प्रोजेक्ट पढ़ता है। नई चैट को नोट उसके सिस्टम प्रॉम्प्ट में मिलते हैं; बाद में सेव हुआ नोट अगली चैट से दिखता है। फ़ाइलें dsh के होम फ़ोल्डर में Markdown हैं (`storages/dsh-composer-plus/memory/`), कभी प्रोजेक्ट फ़ोल्डर में नहीं। उसी पंक्ति में **मेमोरी खोलें** हर सेव किया गया नोट प्रोजेक्ट के हिसाब से (और ग्लोबल मेमोरी) दिखाता है, फ़िल्टर के साथ। अपने शब्दों में लिखें कि क्या बदलना है (जैसे "मैंने yarn छोड़कर pnpm अपनाया"), फिर **बदलावों का प्रीव्यू**: dsh का डिफ़ॉल्ट मॉडल बदलाव सुझाता है, और सिर्फ़ **लागू करें** उन्हें सेव करता है। Tether में: चैट शीर्षक मेनू → Project memory। | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="स्क्रीनशॉट: प्रोजेक्ट मेमोरी"></a> |
|
|
80
84
|
| **मेमोरी वर्शन इतिहास** | <a id="feature-memoryhistory"></a>**प्रोजेक्ट मेमोरी** चालू रहने पर डिफ़ॉल्ट रूप से चालू। मेमोरी की हर सेव से पहले (एजेंट, टर्न के बाद की समीक्षा, **मेमोरी खोलें**) नोट्स की पहले जैसी एक कॉपी रखी जाती है। **मेमोरी खोलें** में कोई प्रोजेक्ट या **ग्लोबल मेमोरी** चुनें, फिर **इतिहास**: तारीख के अनुसार वर्शन और हर वर्शन के बाद मेमोरी किसने बदली। कोई वर्शन चुनें तो रीस्टोर से क्या बदलेगा उसका diff दिखता है, फिर **रीस्टोर करें**। रीस्टोर से पहले के नोट्स भी रखे जाते हैं, इसलिए आप उसे पूर्ववत कर सकते हैं। हर मेमोरी के नवीनतम 50 वर्शन रहते हैं। Tether में: चैट शीर्षक मेनू → Project memory → History। | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="स्क्रीनशॉट: मेमोरी वर्शन इतिहास"></a> |
|
|
81
85
|
| **मेमोरी को AGENTS.md में एक्सपोर्ट करें** | <a id="feature-memoryexport"></a>**मेमोरी खोलें** में कोई प्रोजेक्ट चुनें, फिर **AGENTS.md में एक्सपोर्ट करें**: उस प्रोजेक्ट के नोट्स उसके फ़ोल्डर की `AGENTS.md` के एक चिह्नित भाग में लिखे जाते हैं, ताकि आप उन्हें commit करके अपनी टीम और दूसरे एजेंट टूल के साथ साझा कर सकें। पहले बदलाव diff के रूप में दिखता है; केवल **AGENTS.md लिखें** से सेव होता है। अगला एक्सपोर्ट केवल यह भाग बदलता है। ग्लोबल मेमोरी, स्रोत और तारीखें नहीं लिखी जातीं। Tether में: चैट शीर्षक मेनू → Project memory → Export to AGENTS.md। | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="स्क्रीनशॉट: मेमोरी को AGENTS.md में एक्सपोर्ट करें"></a> |
|
|
@@ -104,7 +108,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
104
108
|
| **विकल्प बटन** | <a id="feature-optionpicks"></a>जब कोई जवाब विकल्पों की सूची पर खत्म होता है ("विकल्प" शीर्षक या बोल्ड "विकल्प" पंक्ति के नीचे 1 से 9 आइटम की क्रमांकित सूची; "अगले कदम" और ऐप की भाषाओं में यही शब्द भी), तो जवाब के नीचे हर विकल्प के लिए एक बटन दिखता है। क्लिक करने पर पूरे विकल्प के साथ "Option N: …" आपके संदेश के रूप में भेजा जाता है, जैसे आपने उसे टाइप किया हो। "(अनुशंसित)" वाला विकल्प चिह्नित होता है। बटन केवल सबसे नए जवाब के नीचे दिखते हैं, जब चैट खाली हो और संदेश बॉक्स खाली हो; पहले से चुने गए जवाब और रोलबैक से वापस लिए गए जवाब में बटन नहीं होते। बटन दिखते समय अगले संदेश का अनुमान कोई सुझाव नहीं देता। एजेंट के प्रश्न कार्ड पर 1–9 कुंजियां क्लिक की तरह वह विकल्प चुनती हैं (जवाब वाले फ़ील्ड में नहीं, और प्रश्न दिखने के बाद पहले 0.8 सेकंड में नहीं)। | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="स्क्रीनशॉट: विकल्प बटन"></a> |
|
|
105
109
|
| **ऐप्लिकेशन की भाषा** | <a id="feature-language"></a>सेटिंग → Composer Plus → **ऐप्लिकेशन की भाषा** पूरे dsh इंटरफ़ेस को Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt या हिन्दी में बदल देता है (नीचे देखें)। | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="स्क्रीनशॉट: ऐप्लिकेशन की भाषा"></a> |
|
|
106
110
|
| **मोबाइल कनेक्ट (iPhone)** | <a id="feature-mobileconnect"></a>[Tether](tether/) ऐप से अपने iPhone पर dsh का उपयोग करें, उसी Wi-Fi पर या [Tailscale](https://tailscale.com) के ज़रिए। इसे **सेटिंग → Composer Plus** में चालू करें (यह डिफ़ॉल्ट रूप से बंद रहता है, क्योंकि यह इस Mac पर एक नेटवर्क पोर्ट खोलता है)। फिर साइडबार में नीचे बाईं ओर **मोबाइल कनेक्ट** पर क्लिक करें: iPhone के कैमरा से (**Open in Tether** पर टैप करें) या Tether में **Scan code** से QR कोड स्कैन करें, **Connect** पर टैप करें और **Approve** पर क्लिक करें। पहले Tether इंस्टॉल करें: इसके बिना कैमरा यह कोड नहीं खोल सकता। फ़ोन आपकी चैट दिखाता है, संदेश भेजता है (फ़ोटो के साथ भी: कंपोज़र का **+** → Camera, Photos या Paste image), मंज़ूरियों और सवालों के जवाब देता है, और मॉडल व एजेंट बदलता है। आप जितने चाहें उतने Mac पेयर कर सकते हैं: ऐप में ऊपर बाईं ओर Mac का नाम उनके बीच बदलता है। **मोबाइल कनेक्ट** पैनल पेयर किए गए iPhone उनके पिछले कनेक्शन के समय के साथ दिखाता है: **Remove** किसी एक को तुरंत हटा देता है। “Tailscale only” लोकल नेटवर्क से कनेक्शन मना कर देता है (साझा Wi-Fi के लिए), और एक्सेस लॉग दिखाता है कि किसने कनेक्ट करने की कोशिश की। Tether में “Settings → Privacy” ऐप को Face ID से लॉक करता है। | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="स्क्रीनशॉट: मोबाइल कनेक्ट (iPhone)"></a> |
|
|
107
|
-
| **रिमोट कंप्यूटर** | <a id="feature-remotecomputers"></a>[Tailscale](https://tailscale.com) के ज़रिए अपने दूसरे Mac का dsh खोलें और उन्हें इसी dsh विंडो में इस्तेमाल करें। इसे हर Mac पर **सेटिंग → Composer Plus** में चालू करें (यह डिफ़ॉल्ट रूप से बंद रहता है, क्योंकि यह नेटवर्क पोर्ट खोलता है)। जिस Mac को आप खोलना चाहते हैं, उस पर **दूसरे कंप्यूटर को यह Mac खोलने दें** चालू करें, **पेयरिंग लिंक बनाएं** पर क्लिक करें और लिंक कॉपी करें। इस Mac पर बाएं साइडबार के कंप्यूटर पिकर में (ब्रांड नाम के दाईं ओर, **नया सेशन** के ऊपर) **कंप्यूटर जोड़ें…** चुनें, लिंक पेस्ट करें, एक **नाम** लिखें (यह Mac या किसी दूसरे कंप्यूटर का नाम नहीं) और **कनेक्ट करें** पर क्लिक करें। फिर दूसरे Mac पर **मंज़ूर करें** पर क्लिक करें। इसके बाद पिकर में **यह Mac** और आपके कंप्यूटर दिखते हैं: किसी एक को चुनें, तो उसका dsh इस पूरी विंडो में दिखता है, उसकी अपनी चैट, साइडबार, टूल और फ़ाइलों के साथ, जबकि यह Mac पीछे चलता रहता है। पिकर उसी जगह रहता है और उस पर **इस Mac पर वापस जाएं** लिखा होता है: वापस आने के लिए उस पर क्लिक करें। एक से ज़्यादा कंप्यूटर होने पर क्लिक से मेनू खुलता है, जहां आप **यह Mac** या कोई दूसरा कंप्यूटर चुनते हैं। सेटिंग पैनल में आप कंप्यूटर का नाम बदल सकते हैं और उन्हें हटा सकते हैं। यह पैनल उन कंप्यूटर की सूची भी दिखाता है जो यह Mac खोल सकते हैं (**हटाएं** किसी एक को तुरंत डिस्कनेक्ट कर देता है)। | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="स्क्रीनशॉट: रिमोट कंप्यूटर"></a> |
|
|
111
|
+
| **रिमोट कंप्यूटर** | <a id="feature-remotecomputers"></a>[Tailscale](https://tailscale.com) के ज़रिए अपने दूसरे Mac का dsh खोलें और उन्हें इसी dsh विंडो में इस्तेमाल करें। इसे हर Mac पर **सेटिंग → Composer Plus** में चालू करें (यह डिफ़ॉल्ट रूप से बंद रहता है, क्योंकि यह नेटवर्क पोर्ट खोलता है)। जिस Mac को आप खोलना चाहते हैं, उस पर **दूसरे कंप्यूटर को यह Mac खोलने दें** चालू करें, **पेयरिंग लिंक बनाएं** पर क्लिक करें और लिंक कॉपी करें। इस Mac पर बाएं साइडबार के कंप्यूटर पिकर में (ब्रांड नाम के दाईं ओर, **नया सेशन** के ऊपर) **कंप्यूटर जोड़ें…** चुनें, लिंक पेस्ट करें, एक **नाम** लिखें (यह Mac या किसी दूसरे कंप्यूटर का नाम नहीं) और **कनेक्ट करें** पर क्लिक करें। फिर दूसरे Mac पर **मंज़ूर करें** पर क्लिक करें। इसके बाद पिकर में **यह Mac** और आपके कंप्यूटर दिखते हैं: किसी एक को चुनें, तो उसका dsh इस पूरी विंडो में दिखता है, उसकी अपनी चैट, साइडबार, टूल और फ़ाइलों के साथ, जबकि यह Mac पीछे चलता रहता है। पिकर उसी जगह रहता है और उस पर **इस Mac पर वापस जाएं** लिखा होता है: वापस आने के लिए उस पर क्लिक करें। अगर आपके पास सिर्फ़ एक दूसरा कंप्यूटर है, तो पिकर पर एक क्लिक से आप इस Mac और उस कंप्यूटर के बीच तुरंत स्विच करते हैं (कोई मेनू नहीं खुलता); पूरा मेनू (**कंप्यूटर जोड़ें…**) खोलने के लिए पिकर पर राइट-क्लिक करें। एक से ज़्यादा कंप्यूटर होने पर क्लिक से मेनू खुलता है, जहां आप **यह Mac** या कोई दूसरा कंप्यूटर चुनते हैं। सेटिंग पैनल में आप कंप्यूटर का नाम बदल सकते हैं और उन्हें हटा सकते हैं। यह पैनल उन कंप्यूटर की सूची भी दिखाता है जो यह Mac खोल सकते हैं (**हटाएं** किसी एक को तुरंत डिस्कनेक्ट कर देता है)। | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="स्क्रीनशॉट: रिमोट कंप्यूटर"></a> |
|
|
108
112
|
| **अपने-आप अपडेट** | <a id="feature-autoupdate"></a>dsh शुरू होने पर प्लगइन [GitHub की नवीनतम रिलीज़](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) जांचता है। अगर वह नई है और npm पर पहले से है, तो प्लगइन वही वर्शन dsh के अपने प्लगइन मैनेजर से इंस्टॉल करता है (सेटिंग → प्लगइन वाला ही रास्ता) और आपको सूचित करता है। इसे लोड करने के लिए dsh रीस्टार्ट करें। **सेटिंग → Composer Plus → Composer Plus अपडेट** वर्शन दिखाता है और उसमें **अपडेट जांचें** / **अभी अपडेट करें** बटन हैं। नए वर्शन के साथ dsh पहली बार शुरू होने पर **Composer Plus N में नया क्या है** विंडो उस वर्शन के रिलीज़ नोट्स **ऐप्लिकेशन की भाषा** में चुनी गई भाषा में एक बार दिखाती है (नोट्स नए वर्शन के साथ आते हैं, कोई अतिरिक्त नेटवर्क कॉल नहीं; जिस भाषा के नोट्स नहीं हैं, उसमें अंग्रेज़ी नोट्स दिखते हैं); **बंद करें** या `Esc` से यह बंद होती है। नोट्स के नीचे एक पंक्ति GitHub पर स्टार देने को कहती है, 30 दिनों में ज़्यादा से ज़्यादा एक बार (कोई नेटवर्क कॉल नहीं); **GitHub पर स्टार दें** या **फिर से न पूछें** पर क्लिक करने के बाद यह फिर नहीं दिखती। सेटिंग → प्लगइन या कॉपी किए गए फ़ोल्डर से अपडेट करने के बाद भी यह विंडो हर नए वर्शन पर एक बार दिखती है; पहली बार इंस्टॉल करने पर नहीं। अपडेट वाली पंक्ति में **इस वर्शन में नया क्या है** इसे फिर से खोलता है। जब डिस्क पर चल रहे वर्शन से नया वर्शन हो, तो पंक्ति dsh को रीस्टार्ट करने को कहती है। | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="स्क्रीनशॉट: अपने-आप अपडेट"></a> |
|
|
109
113
|
| **चालू/बंद फ़िल्टर** | <a id="feature-featurefilter"></a>**सेटिंग → Composer Plus** में **सुविधाएं खोजें** के पास: **सभी** सभी सुविधाएं दिखाता है, **चालू** केवल वे सुविधाएं जिनका स्विच चालू है, और **बंद** केवल वे जिनका स्विच बंद है। फ़ैसला हर पंक्ति का अपना स्विच करता है, dsh के Host में रखे स्विच भी (जैसे **मोबाइल कनेक्ट**)। यह खोज के साथ काम करता है: कोई शब्द लिखें और **बंद** चुनें, तो वह सुविधा मिलती है जिसे आपने बंद किया था। **चालू** या **बंद** चुने रहने पर जिस पंक्ति का स्विच आप बदलते हैं, वह तब तक दिखती है जब तक आप फिर से कोई फ़िल्टर नहीं चुनते, ताकि फ़ोकस उसके स्विच पर रहे। **चालू** और **बंद** में **ऐप्लिकेशन की भाषा** और **Composer Plus अपडेट** पंक्तियाँ छिप जाती हैं (उनका कोई स्विच नहीं है)। सेटिंग हर बार **सभी** के साथ खुलती है। | <a href="assets/features/featureFilter.webp"><img src="assets/features/featureFilter.webp" width="160" alt="स्क्रीनशॉट: चालू/बंद फ़िल्टर"></a> |
|
|
110
114
|
| **इश्यू रिपोर्ट करें** | <a id="feature-issuereport"></a>सेटिंग → Composer Plus → **इश्यू रिपोर्ट करें…** (परिचय के नीचे), या साइडबार में किसी चैट पर राइट-क्लिक करें (या उसका **…** मेन्यू खोलें) → **Composer Plus इश्यू रिपोर्ट करें…**। एक प्रकार चुनें: **बग**, **सुविधा का अनुरोध**, **सुधार**, **अनुवाद** या **सवाल**। उसे अपने शब्दों और अपनी भाषा में बताएं, फिर **ड्राफ़्ट लिखें** पर क्लिक करें (या `Cmd/Ctrl+Enter`)। dsh के डिफ़ॉल्ट मॉडल को एक कॉल अंग्रेज़ी में इश्यू लिखती है: प्रकार के प्रीफ़िक्स वाला शीर्षक (जैसे `[Bug]`) और उस प्रकार के सेक्शन (बग के लिए: What happened, Steps to reproduce, Expected, Actual), साथ में Composer Plus, dsh और सिस्टम के वर्शन वाली एक पंक्ति। शीर्षक और विवरण पढ़ें और संपादित करें; **फिर से लिखें** नया ड्राफ़्ट लिखता है। **इश्यू खोलें** उसे आपके GitHub CLI (`gh`) लॉगिन से Composer Plus की GitHub रिपॉज़िटरी में खोलता है और उसका लिंक दिखाता है। इश्यू सार्वजनिक होता है: जो टेक्स्ट कुंजी या पासवर्ड जैसा दिखता है, वह अस्वीकार होता है। जब `gh` उसे नहीं खोल पाता, तो **इसके बजाय GitHub पर खोलें** GitHub का अपना पेज ड्राफ़्ट भरे हुए खोलता है। | <a href="assets/features/issueReport.webp"><img src="assets/features/issueReport.webp" width="160" alt="स्क्रीनशॉट: इश्यू रिपोर्ट करें"></a> |
|
|
@@ -199,7 +203,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
199
203
|
- **नई चैट में जारी रखें:** जब तक आप क्लिक नहीं करते, कुछ नहीं चलता। फिर Host हिस्सा चैट (जैसे लक्ष्य जांच उसे पढ़ती है: रीज़निंग और रोलबैक किए गए कदम नहीं) चैट के अपने मॉडल को भेजता है और हैंडऑफ़ नोट दिखाता है; सिर्फ़ **नई चैट शुरू करें** नई चैट बनाता है। प्रोजेक्ट में कुछ नहीं लिखा जाता।
|
|
200
204
|
- **कॉन्टेक्स्ट का ब्योरा:** Host पर सिर्फ़ चैट लॉग पढ़ता है; कोई मॉडल कॉल नहीं, कोई प्रोजेक्ट फ़ाइल नहीं।
|
|
201
205
|
- **टास्क बोर्ड:** बोर्ड इस विंडो में dsh की अपनी सूचियों से dsh की अपनी चैट दिखाता है; यह अपना कोई चैट डेटा नहीं जोड़ता। **नया टास्क** dsh की अपनी नई चैट खोलता है, और पहला संदेश आप dsh के कंपोज़र में लिखते हैं, इसलिए मंज़ूरी, सैंडबॉक्स और चैट का मॉडल हमेशा की तरह लागू होते हैं। Host वाला हिस्सा उस चैट के पहले संदेश को कार्ड के प्रॉम्प्ट के रूप में रखता है और उसे (उसके पहले 4,000 अक्षर, और कुछ नहीं) उसी चैट के मॉडल को एक और अनुरोध में, बिना टूल के, ज़्यादा से ज़्यादा 3 टैग के लिए भेजता है। हर टास्क का प्रॉम्प्ट, टैग और शुरू होने का समय `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` में रखा जाता है (सिर्फ़ मालिक की फ़ाइल, सबसे नए 2,000), साथ ही उन चैट की ID भी, जिन्हें आपने **×** या **सब हटाएं** से बोर्ड से हटाया है (सबसे नई 5,000); स्विच उसके बगल में `board-switch.json` में रहता है। किसी प्रोजेक्ट फ़ोल्डर में कुछ नहीं लिखा जाता। **जवाब दें** आपका जवाब dsh के अपने इंतज़ार कर रहे अनुरोध को उसी तरह भेजता है, जैसे चैट का अपना कार्ड भेजता है। पुराने वर्शन की पुरानी टास्क सूची (`board.json`) डिस्क पर जैसी थी वैसी ही रहती है और पढ़ी नहीं जाती। **होवर पर प्रगति** इस Mac पर चैट का लॉग पढ़ती है। **तेज़ (AI के बिना)** (डिफ़ॉल्ट) में कुछ नहीं भेजा जाता। **AI सारांश** में, जब तक किसी चल रहे कार्ड का प्रगति बॉक्स दिखता है (या जब तक Tether का बोर्ड खुला है, ज़्यादा से ज़्यादा 8 चल रहे कार्ड के लिए), Host हिस्सा उस चैट का सबसे नया हिस्सा (ज़्यादा से ज़्यादा लगभग 6,000 अक्षर: आपके संदेश, एजेंट के टेक्स्ट जवाब, उसके टूल कॉल और उनके नतीजों का आख़िरी हिस्सा; रीज़निंग और रोलबैक किए गए संदेश नहीं) बिना टूल के एक अनुरोध में चैट के मॉडल को भेजता है। यह दोबारा तभी भेजता है जब चैट आगे बढ़ी हो, और हर चैट के लिए ज़्यादा से ज़्यादा 20 सेकंड में एक बार। नोट सिर्फ़ मेमोरी में रहता है; सेटिंग `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` में रहती है (सिर्फ़ मालिक की फ़ाइल)।
|
|
202
|
-
- **असिस्टेंट:** असिस्टेंट चैट `~/Assistant` में एक सामान्य dsh चैट है; किसी भी चैट की तरह इसकी मॉडल कॉल dsh के डिफ़ॉल्ट मॉडल को जाती हैं। इसके टूल इस Mac पर आपकी दूसरी चैट के लॉग पढ़ते हैं (शीर्षक, प्रोजेक्ट, स्थिति, और chat_read से उनके सबसे नए संदेश) और उन्हें उस मॉडल को सिर्फ़ तब देते हैं जब वह कोई टूल कॉल करता है। किसी चैट को संदेश भेजना, चैट शुरू करना, रोकना और आर्काइव करना, हर एक आपकी मंज़ूरी का इंतज़ार करता है। चैट ID `$DSH_HOME/storages/dsh-composer-plus/assistant.json` में और स्विच `assistant-switch.json` में रखा जाता है (सिर्फ़ मालिक की फ़ाइलें)। रिमाइंडर और ऑटोमेशन dsh के अपने शेड्यूल किए गए टास्क हैं। चैट जो मॉडल अनुरोध और वेब खोजें करती है, उनके सिवा कुछ भी इस Mac से बाहर नहीं जाता।
|
|
206
|
+
- **असिस्टेंट:** असिस्टेंट चैट `~/Assistant` में एक सामान्य dsh चैट है; किसी भी चैट की तरह इसकी मॉडल कॉल dsh के डिफ़ॉल्ट मॉडल को जाती हैं। इसके टूल इस Mac पर आपकी दूसरी चैट के लॉग पढ़ते हैं (शीर्षक, प्रोजेक्ट, स्थिति, और chat_read से उनके सबसे नए संदेश) और उन्हें उस मॉडल को सिर्फ़ तब देते हैं जब वह कोई टूल कॉल करता है। किसी चैट को संदेश भेजना, चैट शुरू करना, रोकना और आर्काइव करना, हर एक आपकी मंज़ूरी का इंतज़ार करता है। चैट ID `$DSH_HOME/storages/dsh-composer-plus/assistant.json` में और स्विच `assistant-switch.json` में रखा जाता है (सिर्फ़ मालिक की फ़ाइलें)। रिमाइंडर और ऑटोमेशन dsh के अपने शेड्यूल किए गए टास्क हैं। चैट जो मॉडल अनुरोध और वेब खोजें करती है, उनके सिवा कुछ भी इस Mac से बाहर नहीं जाता। असिस्टेंट को बॉट की तरह चलाने वाले स्विच अपनी स्थिति `assistant-free.json` और `assistant-notify.json` में रखते हैं (सिर्फ़ मालिक की फ़ाइलें)। **असिस्टेंट से चैट की खबरें** किसी दूसरी चैट के बारे में एक छोटी पंक्ति (उसका शीर्षक, प्रोजेक्ट और उसके आख़िरी जवाब या गड़बड़ी के ज़्यादा से ज़्यादा 300 अक्षर) असिस्टेंट चैट में डालता है, इसलिए वह टेक्स्ट भी असिस्टेंट के मॉडल को जाता है; इंतज़ार कर रही खबरें सिर्फ़ RAM में रहती हैं।
|
|
203
207
|
- **सुरक्षित फ़ाइलें:** सूची और स्विच `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)। जांच हर फ़ाइल टूल कॉल का सिर्फ़ पाथ (और उसका असली पाथ) पढ़ती है, फ़ाइल को कभी नहीं।
|
|
204
208
|
- **ब्लॉक की गई कमांड:** नियम और स्विच `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` में रहते हैं (सिर्फ़ मालिक की फ़ाइल)। जांच हर `bash` और `pwsh` कॉल का सिर्फ़ कमांड टेक्स्ट पढ़ती है; यह न कुछ चलाती है, न कुछ भेजती है।
|
|
205
209
|
- **सीक्रेट इनपुट:** मान केवल जवाब के अनुरोध में कार्ड से (या Tether से, उस गेटवे के ज़रिए जो अनुरोध की सामग्री लॉग नहीं करता) Host तक जाता है। Host उसे `$DSH_HOME/storages/dsh-composer-plus/secrets/<यादृच्छिक नाम>` में लिखता है (फ़ोल्डर 0700, फ़ाइल 0600); प्रोजेक्ट, चैट लॉग या टूल परिणाम में कुछ नहीं जाता। Host उस चैट के बाद के टूल परिणामों में मान को `[secret]` से बदलने के लिए उसे मेमोरी में रखता है। फ़ाइल और यह प्रति चैट का टर्न खत्म होने पर और dsh शुरू होने पर हटा दी जाती हैं। स्विच पास की `secrets.json` फ़ाइल में है। एजेंट इस फ़ाइल के साथ जो कमांड चलाता है, वह मान को वहाँ भेज सकती है जहाँ वह कमांड भेजती है: यही इसका उद्देश्य है।
|
|
@@ -226,7 +230,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
226
230
|
- **चैट पंक्ति पर ब्रांच लेबल नहीं है:** साइडबार “एक ही सूची में” व्यू में नहीं है (“वर्कस्पेस” और “वर्कस्पेस ट्री” में किसी भी चैट पंक्ति पर लेबल नहीं दिखता), यह वर्शन इंस्टॉल करने के बाद से उस चैट में कोई टर्न नहीं हुआ, उसका फ़ोल्डर git रिपॉज़िटरी नहीं है, या **चैट पंक्तियों पर Git ब्रांच** बंद है। अपडेट के बाद dsh रीस्टार्ट करें (ब्रांच Host वाला हिस्सा दर्ज करता है)।
|
|
227
231
|
- **लक्ष्य जांच बताती है कि टेस्ट कोड 127 या "not found" के साथ बंद हुआ:** Finder या Dock से शुरू किए गए dsh का PATH आपके टर्मिनल से छोटा हो सकता है, इसलिए उसे `npm`, `pnpm` या `cargo` नहीं मिलता। dsh को टर्मिनल से शुरू करें, या **लक्ष्य जांच** → **संपादित करें** में पूरे पाथ के साथ अपनी टेस्ट कमांड सेट करें। **अभी चलाएं** नतीजा तुरंत दिखाता है।
|
|
228
232
|
- **लक्ष्य बंद नहीं होता और एजेंट काम करता रहता है:** **लक्ष्य जांच** को कोई विफल टेस्ट या अधूरा काम मिला; लक्ष्य के नीचे की पंक्ति वजह दिखाती है (ब्योरा देखने के लिए नतीजे पर पॉइंटर ले जाएं)। वजह या टेस्ट कमांड ठीक करें, या `/goal` या लक्ष्य बार से लक्ष्य खुद पूरा करें (उसकी जांच नहीं होती)।
|
|
229
|
-
- **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.
|
|
233
|
+
- **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.25.0`), ऊपर इंस्टॉल वाला नोट देखें।
|
|
230
234
|
- **अभी बैकअप लें कहता है "बैकअप की दूसरी कार्रवाई चल रही है":** किसी दूसरी dsh विंडो में या रेस्क्यू कंसोल में कोई कार्रवाई चल रही है (दोनों बैकअप फ़ोल्डर में एक लॉक फ़ाइल, `.composer-plus.lock`, साझा करते हैं)। उसके पूरा होने का इंतज़ार करें। अगर कोई कार्रवाई नहीं चल रही, तो अगली क्लिक पर बंद हो चुकी प्रोसेस का लॉक ले लिया जाता है।
|
|
231
235
|
- **रेस्क्यू कंसोल कहता है "dsh is running":** पहले dsh बंद करें। अगर dsh सच में बंद है, तो संदेश में बताई गई फ़ाइल किसी क्रैश के बाद बची रह गई है: उसे हटाएं और फिर से कोशिश करें।
|
|
232
236
|
- **बहाली के बाद dsh शुरू नहीं होता या कोई प्लगइन नहीं है:** किसी प्रोफ़ाइल के प्लगइन पैकेज फिर से इंस्टॉल करने होंगे। बहाली के बाद रेस्क्यू कंसोल यह करने का विकल्प देता है; या `$DSH_HOME/profiles/` के नीचे के हर उस फ़ोल्डर में `pnpm install` चलाएं, जिसकी सूची वह दिखाता है। जो सीक्रेट vault में नहीं थे (दूसरा कंप्यूटर), उन्हें फिर से डालना होगा: कंसोल उनकी सूची दिखाता है।
|
|
@@ -260,7 +264,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
260
264
|
- **प्रश्न कार्ड को विंडो में फ़िट करें** केवल dsh का प्रश्न कार्ड बदलता है, योजना समीक्षा कार्ड नहीं। यह कार्ड को dsh के मार्कअप (`data-question-key`, `data-question-scroll`) से ढूंढता है; अगर कोई dsh अपडेट यह मार्कअप बदलता है, तो कार्ड वैसा ही दिखता है जैसा dsh उसे बनाता है। कार्ड की ऊंचाई चैट के बजाय विंडो के अनुसार चलती है: किसी संकरे साइड पैनल की चैट में, ऊंचा कार्ड अब भी चैट के ऊपर तक जा सकता है।
|
|
261
265
|
- **चैट हेडर को विंडो में फ़िट करें** dsh के चैट हेडर को dsh के बनाए क्लास नामों (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`) से ढूंढता है, क्योंकि dsh इसके लेआउट के लिए कोई हुक नहीं देता। अगर dsh का अपडेट ये नाम बदल दे, तो हेडर वैसा ही दिखता है जैसा dsh बनाता है। बहुत संकरे चैट कॉलम में हेडर दो या तीन पंक्तियां ले सकता है, इसलिए संदेशों के ऊपर की जगह कम हो जाती है।
|
|
262
266
|
- **मोबाइल कनेक्ट** सिर्फ़ macOS पर काम करता है (यह `en0`, `openssl`, `swift` और `dns-sd` इस्तेमाल करता है)। यह तय पोर्ट 19390 और 19391 इस्तेमाल करता है, इसलिए हर Mac पर एक समय में सिर्फ़ एक dsh इसे चला सकता है (फ़ोन की Mac सूची में हर Mac एक एंट्री है)। `apns.json` में APNs कुंजी होने पर (देखें `tether/README.md`) Mac सूचनाएं Apple की पुश सेवा से भेजता है, इसलिए Tether बंद होने पर भी वे आती हैं; Mac जागा हुआ हो और dsh खुला हो। कुंजी के बिना फ़ोन को सूचनाएं सिर्फ़ तब मिलती हैं, जब Tether खुला हो या अभी-अभी बैकग्राउंड में गया हो। जब तक आप Tether में "Settings → Notifications → Send notifications" चालू नहीं करते, Tether सूचनाएं नहीं भेजता। Tether यह स्विच और इसके घंटे हर पेयर किए गए Mac के लिए अलग रखता है। यह स्विच हर Mac पर डिफ़ॉल्ट रूप से बंद रहता है, और इसे चालू करने पर iOS अनुमति मांगता है। iOS ऐप अभी App Store पर नहीं है: इसे Xcode से `tether/ios` से बनाएं। "Tailscale only" के लिए भी Mac पर Wi-Fi या Ethernet पता ज़रूरी है (गेटवे सिर्फ़ ऐसे पते के साथ शुरू होता है)। एक्सेस लॉग हर Mac का अलग होता है और सिर्फ़ सबसे नई 200 कोशिशें रखता है; एक मिनट के अंदर दोहराई गई कोशिश उसी पंक्ति की गिनती एक बढ़ाती है। हर सूचना में Mac और चैट का प्रोजेक्ट (`Studio Mac · recipe-box`), चैट का शीर्षक और टेक्स्ट दिखता है: Turn finished में एजेंट का आख़िरी जवाब दिखता है। APNs की के साथ यह टेक्स्ट Apple की पुश सेवा से होकर जाता है। Tether का ऐप लॉक iPhone की लॉक स्क्रीन पर सूचनाओं के प्रीव्यू नहीं छिपाता: उन्हें iOS सेटिंग में बंद करें। Tether के हरे बिंदु Mac के हिसाब से चलते हैं: जिस चैट को आप dsh में खोलते हैं, उसका बिंदु फ़ोन पर भी हट जाता है। जिस चैट को आप Tether में खोलते हैं, उसका बिंदु सिर्फ़ फ़ोन पर हटता है। Mac पर dsh का अपना बिंदु तब तक रहता है, जब तक आप चैट को वहां नहीं खोलते।
|
|
263
|
-
- **रिमोट कंप्यूटर** के लिए दोनों Mac पर Tailscale चाहिए, और जिस Mac को आप खोलते हैं, उस पर Composer Plus और यह फ़ीचर चालू होना चाहिए। वह Mac स्लीप में नहीं होना चाहिए और उस पर dsh चलना चाहिए। पिकर सिर्फ़ तब दिखता है, जब बायां साइडबार खुला हो (तब नहीं, जब उसमें सिर्फ़ आइकन दिखते हों)। अगर दूसरे Mac के पेज पर अपना पिकर नहीं है (वहां Composer Plus 1.23.0 से पुराना है), तो इस Mac का पिकर उसी जगह उस पेज के ऊपर दिखता है। अगर वहां 1.23.0 है, तो पिकर में उस Mac का नाम दिखता है: वापस आने के लिए उसके मेनू में **यह Mac** चुनें। आपने जो भी कंप्यूटर खोला है, उसका पेज तब तक मेमोरी में रहता है, जब तक आप यह फ़ीचर बंद न करें या dsh रीस्टार्ट न करें। डेस्कटॉप ऐप में दूसरे Mac का पेज एक एम्बेड किया हुआ पेज है: dsh के अपने कीबोर्ड शॉर्टकट (जैसे नई चैट) उसमें काम नहीं करते, और वहां फ़ाइल डाउनलोड, माइक्रोफ़ोन और सूचनाएं भी काम नहीं करतीं। यह पोर्ट 19392 इस्तेमाल करता है (हर Mac पर सिर्फ़ एक dsh दूसरे कंप्यूटर को अंदर आने दे सकता है)। दूसरे Mac के पेज से पिकर सिर्फ़ इस Mac के कंप्यूटरों के बीच बदलता है: आप दूसरे Mac के ज़रिए तीसरा Mac नहीं खोल सकते।
|
|
267
|
+
- **रिमोट कंप्यूटर** के लिए दोनों Mac पर Tailscale चाहिए, और जिस Mac को आप खोलते हैं, उस पर Composer Plus और यह फ़ीचर चालू होना चाहिए। वह Mac स्लीप में नहीं होना चाहिए और उस पर dsh चलना चाहिए। पिकर सिर्फ़ तब दिखता है, जब बायां साइडबार खुला हो (तब नहीं, जब उसमें सिर्फ़ आइकन दिखते हों)। अगर दूसरे Mac के पेज पर अपना पिकर नहीं है (वहां Composer Plus 1.23.0 से पुराना है), तो इस Mac का पिकर उसी जगह उस पेज के ऊपर दिखता है। अगर वहां 1.23.0 है, तो पिकर में उस Mac का नाम दिखता है: वापस आने के लिए उसके मेनू में **यह Mac** चुनें। आपने जो भी कंप्यूटर खोला है, उसका पेज तब तक मेमोरी में रहता है, जब तक आप यह फ़ीचर बंद न करें या dsh रीस्टार्ट न करें। अगर कंप्यूटर ने जवाब नहीं दिया (वह स्लीप में था या Tailscale बंद था), तो उसका पेज नहीं रखा जाता: उसे फिर से चुनें, पेज फिर से लोड होगा। डेस्कटॉप ऐप में दूसरे Mac का पेज एक एम्बेड किया हुआ पेज है: dsh के अपने कीबोर्ड शॉर्टकट (जैसे नई चैट) उसमें काम नहीं करते, और वहां फ़ाइल डाउनलोड, माइक्रोफ़ोन और सूचनाएं भी काम नहीं करतीं। यह पोर्ट 19392 इस्तेमाल करता है (हर Mac पर सिर्फ़ एक dsh दूसरे कंप्यूटर को अंदर आने दे सकता है)। दूसरे Mac के पेज से पिकर सिर्फ़ इस Mac के कंप्यूटरों के बीच बदलता है: आप दूसरे Mac के ज़रिए तीसरा Mac नहीं खोल सकते। एक क्लिक में बदलने के लिए सिर्फ़ वे कंप्यूटर गिने जाते हैं जो पेयर किए गए हैं और जिन तक पहुंचा जा सकता है (जिस कंप्यूटर को फिर से पेयर करना है, वह नहीं गिना जाता); ऐसा सिर्फ़ एक कंप्यूटर होने पर **कंप्यूटर जोड़ें…** राइट-क्लिक से खुलने वाले मेनू में (टच स्क्रीन पर: दबाकर रखें) या **सेटिंग → Composer Plus → रिमोट कंप्यूटर** में मिलता है।
|
|
264
268
|
- सेशन लिंक चैट के अंदर काम करता है; उस पर क्लिक करने से चैट नहीं खुलती। **संदेश लिंक कॉपी करें** से बना लिंक अपना संदेश सिर्फ़ dsh 0.2.1 और बाद के वर्शन में खोलता है, और सिर्फ़ किसी चैट के संदेश से (dsh 0.2.0 में यूज़र टेक्स्ट के नियम नहीं हैं, इसलिए वहां लिंक कॉपी तो होता है, पर सादे टेक्स्ट की तरह दिखता है)। जो संदेश किसी रोलबैक ने हटाया, या जिसे कॉम्पैक्ट करने से dsh के लोड किए गए इतिहास से हटा दिया गया, वह नहीं दिख सकता: तब लिंक यही बताता है। 🔗 बटन dsh की संदेश पंक्तियों से जुड़ते हैं; अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो वे नहीं दिखते।
|
|
265
269
|
- **सभी को पढ़ा हुआ मार्क करें** dsh के अपने अपठित बिंदुओं को dsh के ऐसे हिस्से से बदलता है, जो सार्वजनिक API नहीं है (dsh के सेशन स्टेटस की `completionUnread` सूची)। अगर dsh का कोई अपडेट इसका नाम बदलता है, तो आइटम नहीं दिखता। आइटम dsh के प्रोजेक्ट वाले "…" मेन्यू में जाता है, जिसमें प्लगइन के लिए कोई slot नहीं है; अगर dsh वह मेन्यू बदलता है, तो भी आइटम नहीं दिखता।
|
|
266
270
|
- **कतार वाले संदेश को उसी जगह एडिट करें** उस संदेश को नहीं बदलता जो इस बीच भेजा जाने लगा, और उस संदेश को ओवरराइट नहीं करता जो इस बीच बदल गया (जैसे iPhone पर Tether में): एक सूचना यह बताती है। नई इमेज के लिए ऐसा मॉडल चाहिए जो इमेज लेता हो (dsh की अपनी इमेज सीमाएं लागू होती हैं), और नई फ़ाइल का अपलोड पूरा होने के बाद ही संदेश सेव हो सकता है। सिर्फ़ आपके अपने कतार वाले संदेश एडिट होते हैं: कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब एडिट नहीं होता। प्लगइन अपडेट के बाद सिर्फ़ टेक्स्ट वाले एडिट तुरंत काम करते हैं: इमेज या फ़ाइल वाला संदेश सेव करने से पहले dsh रीस्टार्ट करें (Host वाला हिस्सा शुरू होने पर लोड होता है)।
|
|
@@ -296,7 +300,8 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
296
300
|
- **तुर्की स्किल पैक** एक थर्ड-पार्टी स्किल इंस्टॉल करता है: इसके नियम Composer Plus से नहीं, लेखक के GitHub रिपॉज़िटरी से आते हैं, और नया संस्करण हमारी समीक्षा के बिना अगली दैनिक जाँच से उपयोग होता है। जाँच केवल यह साबित करती है कि फ़ाइलें वही हैं जो GitHub उस commit के लिए दिखाता है, यह नहीं कि नियम अच्छे हैं। स्किल कब लोड हो, यह मॉडल तय करता है (आप इसे नाम से भी बुला सकते हैं); नियम केवल तुर्की पाठ पर लागू होते हैं। Host वाला हिस्सा वही भाषा उपयोग करता है जो किसी ब्राउज़र ने आख़िर में बताई: दो ब्राउज़र अलग भाषाएँ उपयोग करें तो सबसे नई सूचना मान्य होती है। बिना लॉगिन GitHub प्रति घंटे 60 API कॉल की अनुमति देता है; अस्वीकृत जाँच इंस्टॉल की गई कॉपी रखती है और सेटिंग में कारण दिखाती है।
|
|
297
301
|
- **कोडबेस सुलझाएं** में स्किल की एक तय कॉपी है (caldoai/skills, कमिट f3cf477): मूल स्किल का बदलाव सिर्फ़ Composer Plus के नए वर्शन के साथ आता है। यह स्किल एक लंबा लक्ष्य चलाती है जो कई फ़ाइलें बदल सकता है, और इसके सब-एजेंट और जाँच बहुत टोकन खर्च करते हैं। जहाँ प्रोजेक्ट में टेस्ट नहीं हैं, वहाँ यह बिना पता चले व्यवहार बदल सकती है: इसे अलग ब्रांच पर शुरू करें और मर्ज से पहले diff पढ़ें। प्रोजेक्ट में, किसी कस्टम स्किल फ़ोल्डर में या `~/.dsh/skills` में उसी नाम की स्किल हो तो वह इसकी जगह ले लेती है। स्विच बंद रहने पर `/untangle-codebase` मॉडल को सामान्य टेक्स्ट की तरह जाता है।
|
|
298
302
|
- **टास्क बोर्ड** वे चैट दिखाता है जिन्हें dsh इस विंडो में अपनी सूची में दिखाता है: किसी प्रोजेक्ट के बाहर की चैट सिर्फ़ **सभी प्रोजेक्ट** में दिखती है, और हर चैट की अपनी ब्रांच का फ़ोल्डर (`<project>/.worktrees/<name>`) अपने प्रोजेक्ट में गिना जाता है। कार्ड का कॉलम चैट की लाइव स्थिति है, इसलिए कार्ड खींचे नहीं जा सकते: टर्न खत्म होने पर चैट **पूरा हुआ** में जाती है, एरर या रोकने के बाद भी, और फिर से चलने पर **प्रगति में** लौट आती है। हरा बिंदु dsh का अपना पूरा होने वाला बिंदु है, जिसे dsh सिर्फ़ इसी विंडो में रखता है: पेज फिर से लोड होने के बाद खत्म हुई चैट इसके बिना दिखती हैं। **पूरा हुआ** सबसे नई 50 चैट दिखाता है (**N पुराने टास्क दिखाएं** बाकी चैट दिखाता है)। **प्रोजेक्ट खोजें** किसी प्रोजेक्ट को सिर्फ़ उसके नाम से ढूंढता है, उसके फ़ोल्डर पाथ से नहीं। **पिछले 2 घंटों में सक्रिय** किसी प्रोजेक्ट को तब छिपाता है जब उसकी हर चैट 2 घंटे से पुरानी, निष्क्रिय और पढ़ी हुई हो; बोर्ड फिर भी वह प्रोजेक्ट दिखाता है जो आपने चुना है। **नया टास्क** इस विंडो की नई चैट में से सिर्फ़ सबसे नई चैट याद रखता है: अगर आप पहला संदेश जाने से पहले कोई दूसरी चैट खोलते हैं, तो वह चैट तब तक **प्रगति में** कॉलम में सबसे ऊपर **नया टास्क** के रूप में रहती है जब तक आप उसमें नहीं लिखते, लेकिन बोर्ड अपने-आप सिर्फ़ सबसे नई चैट के लिए लौटता है। पेज फिर से लोड होने के बाद बिना संदेश वाली नई चैट बोर्ड पर नहीं होती (dsh उसे अपने खाली नए सेशन के रूप में रखता है)। टैग हर टास्क के लिए उसके पहले संदेश से एक मॉडल कॉल से आते हैं: वे गलत हो सकते हैं, और जो चैट आपने बोर्ड पर शुरू नहीं की, उसके कोई टैग नहीं होते। शीर्षक dsh का अपना चैट शीर्षक है (dsh की शीर्षक सर्विस, चैट के मॉडल के साथ); जब तक वह नहीं आता, कार्ड पहले संदेश की पहली लाइन दिखाता है। **×** और **सब हटाएं** कार्ड को सिर्फ़ बोर्ड से हटाते हैं: कोई चैट डिलीट नहीं होती। **पहले जैसा करें** सिर्फ़ 8 सेकंड तक और सिर्फ़ इसी विंडो में दिखता है; बाद में **हटाए गए (N)** → **बोर्ड पर वापस रखें** किसी कार्ड को वापस लाता है, और जो चैट फिर से चलती है, वह अपने-आप लौट आती है। **सब हटाएं** पहले पूछता है और दिख रहे प्रोजेक्ट के पढ़े हुए खत्म हुए कार्ड हटाता है (**सभी प्रोजेक्ट** चुने होने पर सभी प्रोजेक्ट के), **N पुराने टास्क दिखाएं** के पीछे वाले कार्ड भी; बिना पढ़ा (हरा) कार्ड बना रहता है। dsh अपना हरा बिंदु सिर्फ़ इसी विंडो में रखता है, इसलिए पेज फिर से लोड होने के बाद सब हटाएं ऐसा कार्ड भी हटा सकता है जिसका जवाब आपने नहीं पढ़ा। यह सूची इस Mac पर हर विंडो और Tether के लिए रखी जाती है; जब इसमें 5,000 चैट हो जाती हैं, तो सबसे पुरानी चैट लौट आती हैं। **जवाब दें** चैट के सिर्फ़ सबसे नए अनुरोध का जवाब देता है: अगर उस अनुरोध का जवाब कहीं और (दूसरी विंडो, Tether, ऑटो रिव्यू) दिया जा चुका है या चैट कुछ नया पूछती है, तो पैनल यह बताता है और कुछ नहीं भेजता। पुराने वर्शन में टिप्पणियों और एजेंट टूल वाली टास्क सूची थी; वह अब नहीं है, और पुरानी `board.json` नहीं दिखाई जाती। विचार और रूप emanuele-em के [Kanzo](https://github.com/emanuele-em/kanzo) (AGPL-3.0) से लिए गए हैं; Composer Plus उसका कोई कोड इस्तेमाल नहीं करता। `Cmd+Shift+K` एक dsh शॉर्टकट है: Linux पर ब्राउज़र में इसकी कोई डिफ़ॉल्ट कुंजी नहीं होती (dsh के कीबोर्ड शॉर्टकट पेज में सेट करें), और कोई ब्राउज़र एक्सटेंशन या दूसरा ऐप इसे पहले ले सकता है। कार्ड **पूरा हुआ** से तब हटता है जब dsh का अपना हरा बिंदु चला जाता है (आपने चैट खोली), या, जो चैट बोर्ड के पीछे खुली चैट रहते हुए खत्म हुई, उसके लिए तब जब वह चैट ऊपर किसी पैनल के बिना दिखती है। पढ़ा गया यह हाल dsh के अपने बिंदुओं की तरह सिर्फ़ इसी dsh विंडो में रहता है: रीलोड के बाद या दूसरी विंडो में हर खत्म हुई चैट पढ़ी गई मानी जाती है, इसलिए वह **हाल में पूरे हुए** में होती है।
|
|
299
|
-
- **असिस्टेंट** में इस Mac की सभी विंडो के लिए एक ही चैट है। यह workspace-write अनुमति मोड में चलता है: यह फ़ाइलें सिर्फ़ `~/Assistant` में लिखता है, और उसके बाहर की कोई कमांड पहले पूछती है। जब आप चैट को बिना मंज़ूरी वाले मोड (पूरी एक्सेस) में बदलते हैं, तो dsh हर मंज़ूरी अस्वीकार कर देता है, इसलिए असिस्टेंट किसी चैट को संदेश नहीं भेज सकता, चैट शुरू नहीं कर सकता, रोक नहीं सकता या आर्काइव नहीं कर सकता। मंज़ूरी कार्ड सिर्फ़ इन छह टूल की रक्षा करता है: उस मोड वाली किसी भी चैट की तरह, असिस्टेंट की शेल कमांड अब भी नेटवर्क तक पहुंच सकती है। dsh 0.2.0 और 0.2.1 पर dsh के शेड्यूल टूल सिर्फ़ असिस्टेंट चैट के अपने रिमाइंडर देखते हैं, दूसरी चैट के ऑटोमेशन नहीं; dsh 0.2.2 से वे हर शेड्यूल किए गए टास्क की सूची दिखाते हैं और उसे बदलते हैं। chats_list आर्काइव की गई, खाली और सबएजेंट चैट को, और खुद असिस्टेंट चैट को छोड़ देता है; “आपका इंतज़ार कर रही” का मतलब है कि चल रही चैट में कोई खुली मंज़ूरी, सवाल या प्लान रिव्यू है। chat_read उपयोगकर्ता के संदेश और एजेंट के जवाब देता है (टूल आउटपुट नहीं), ज़्यादा से ज़्यादा 50 संदेश और लगभग 24,000 अक्षर। chat_archive ऐसी चैट को मना कर देता है जो अभी चल रही है या जिसके सक्रिय रिमाइंडर हैं। मॉडल अब भी पढ़े गए टेक्स्ट से गुमराह हो सकता है: मंज़ूरी कार्ड आख़िरी जांच है, इसलिए **एक बार अनुमति दें** पर क्लिक करने से पहले उसे पढ़ें।
|
|
303
|
+
- **असिस्टेंट** में इस Mac की सभी विंडो के लिए एक ही चैट है। यह workspace-write अनुमति मोड में चलता है: यह फ़ाइलें सिर्फ़ `~/Assistant` में लिखता है, और उसके बाहर की कोई कमांड पहले पूछती है। जब आप चैट को बिना मंज़ूरी वाले मोड (पूरी एक्सेस) में बदलते हैं, तो dsh हर मंज़ूरी अस्वीकार कर देता है, इसलिए असिस्टेंट किसी चैट को संदेश नहीं भेज सकता, चैट शुरू नहीं कर सकता, रोक नहीं सकता या आर्काइव नहीं कर सकता। मंज़ूरी कार्ड सिर्फ़ इन छह टूल की रक्षा करता है: उस मोड वाली किसी भी चैट की तरह, असिस्टेंट की शेल कमांड अब भी नेटवर्क तक पहुंच सकती है। dsh 0.2.0 और 0.2.1 पर dsh के शेड्यूल टूल सिर्फ़ असिस्टेंट चैट के अपने रिमाइंडर देखते हैं, दूसरी चैट के ऑटोमेशन नहीं; dsh 0.2.2 से वे हर शेड्यूल किए गए टास्क की सूची दिखाते हैं और उसे बदलते हैं। chats_list आर्काइव की गई, खाली और सबएजेंट चैट को, और खुद असिस्टेंट चैट को छोड़ देता है; “आपका इंतज़ार कर रही” का मतलब है कि चल रही चैट में कोई खुली मंज़ूरी, सवाल या प्लान रिव्यू है। chat_read उपयोगकर्ता के संदेश और एजेंट के जवाब देता है (टूल आउटपुट नहीं), ज़्यादा से ज़्यादा 50 संदेश और लगभग 24,000 अक्षर। chat_archive ऐसी चैट को मना कर देता है जो अभी चल रही है या जिसके सक्रिय रिमाइंडर हैं। मॉडल अब भी पढ़े गए टेक्स्ट से गुमराह हो सकता है: मंज़ूरी कार्ड आख़िरी जांच है, इसलिए **एक बार अनुमति दें** पर क्लिक करने से पहले उसे पढ़ें। समानांतर विषय dsh का सबएजेंट टूल इस्तेमाल करते हैं: जिस प्रोफ़ाइल या अनुमति मोड में यह टूल नहीं है, उसमें पुराना तरीका चलता है (एक समय में एक विषय, अगला संदेश कतार में इंतज़ार करता है या चल रहे टर्न को स्टीयर करता है)। कौन-सा काम लंबा है, यह मॉडल तय करता है, इसलिए छोटा सवाल भी एक टर्न ले सकता है। हर विषय का सबएजेंट अपने टोकन के साथ चलता है; dsh रीस्टार्ट होने पर चल रहा विषय रुक जाता है (उसका नतीजा वापस नहीं आता)। नतीजा असिस्टेंट चैट के एक नए टर्न के रूप में आता है, इसलिए जब आप किसी टर्न के बीच में टाइप कर रहे होते हैं, तब वह इंतज़ार करता है।
|
|
304
|
+
- **चैट से अलग असिस्टेंट** और **असिस्टेंट में सिर्फ़ संदेश** dsh की अपनी पंक्तियों को एक स्टाइल नियम से छिपाते हैं, जो उन्हें dsh के साइडबार और चैट मार्कअप (`data-row-key`, `data-chat-flow-kind`) से ढूंढता है: जब कोई dsh अपडेट वह मार्कअप बदलता है, तो असिस्टेंट चैट फिर से सूची में दिखती है, या उसके काम के चरण फिर से दिखते हैं। पंक्तियां छिपाई जाती हैं, हटाई नहीं जातीं: साइडबार में dsh का कीबोर्ड नेविगेशन किसी छिपी पंक्ति तक फिर भी पहुंच सकता है। **असिस्टेंट हमेशा खाली** असिस्टेंट चैट की हर उस टूल कॉल को मना कर देता है जो उसके छोटे टूल में से नहीं है; फिर मॉडल वह चरण किसी सबएजेंट को देता है, पर वह पहले मना की गई कॉल आज़मा सकता है, जिसमें एक मॉडल चरण खर्च होता है। जब कोई मंज़ूरी कार्ड आपका इंतज़ार करता है, तब असिस्टेंट चैट अब भी व्यस्त गिनी जाती है। जब उसके सबसे नए अनुरोध में सबएजेंट टूल नहीं होता (ऐसा अनुमति मोड या प्रोफ़ाइल जिसमें यह टूल नहीं है), तो नियम कुछ नहीं करता। **असिस्टेंट से चैट की खबरें** खबरों के हर समूह के लिए असिस्टेंट चैट का एक मॉडल टर्न शुरू करता है, इसलिए यह टोकन खर्च करता है; **मोबाइल कनेक्ट (iPhone)** चालू होने पर एक पूरी हुई चैट के लिए आपके फ़ोन को दो सूचनाएं मिल सकती हैं (चैट की अपनी और असिस्टेंट की)। इंतज़ार कर रही खबरें dsh रीस्टार्ट होने पर खो जाती हैं। यह सिर्फ़ इस Mac की चैट देखता है।
|
|
300
305
|
- **रोकने के बाद भेजा संदेश पहले चलाएँ** केवल चैट रोकने के बाद काम करता है (या किसी विफल टर्न के बाद, या ऐसी चैट खोलने पर जिसमें अभी कतार है): किसी टर्न के चलते समय भेजा गया संदेश पहले की तरह कतार के अंत में प्रतीक्षा करता है। यह केवल आपके अपने कतार वाले संदेशों से आगे जाता है: अगर कतार में कोई लक्ष्य राउंड या किसी सवाल का जवाब प्रतीक्षा कर रहा है, तो dsh का अपना क्रम रहता है। यह dsh का एक ऐसा हिस्सा पढ़ता है जो सार्वजनिक API नहीं है (रोका गया टर्न अभी ख़त्म हो रहा है या नहीं); अगर किसी dsh अपडेट में उसका नाम बदलता है, तो संदेश उस टर्न के ख़त्म होने के बाद ही आगे जाता है। सबएजेंट चैट dsh का अपना क्रम रखती हैं।
|
|
301
306
|
- **प्रोजेक्ट मेमोरी** चैट के पहले फ़ोल्डर (dsh के प्रोजेक्ट फ़ोल्डर) की होती है: जो चैट `cd` से फ़ोल्डर बदलती है, वह अपने पहले प्रोजेक्ट की मेमोरी ही रखती है, और वही फ़ोल्डर उन्हीं फ़ाइलों तक जाने वाले दूसरे पाथ से खोला जाए तो वह भी यही मेमोरी साझा करता है। चैट शुरू होते समय अपना मेमोरी हिस्सा स्थिर कर देती है, इसलिए बाद में सेव हुआ नोट अगली चैट से दिखता है (`memory_recall` उसे तुरंत ढूंढ लेता है)। समीक्षा सिर्फ़ वही रखती है, जो मॉडल रखना तय करता है: वह कोई तथ्य छोड़ सकती है या कोई गलत बात रख सकती है; उन्हें **मेमोरी खोलें** में जांचें और वहीं बदलें, या dsh बंद होने पर फ़ाइलें हाथ से बदलें। **मेमोरी खोलें** चुने गए प्रोजेक्ट के नोट और ग्लोबल नोट (सभी नोट चुनने पर सभी प्रोजेक्ट; ज़्यादा से ज़्यादा लगभग 60,000 अक्षर, बाकी सिर्फ़ गिने जाते हैं और उस अनुरोध में नहीं बदल सकते) और आपका लिखा हुआ टेक्स्ट चैट के मॉडल को नहीं, dsh के डिफ़ॉल्ट मॉडल को भेजता है। प्रीव्यू Mac पर 30 मिनट तक और dsh के दोबारा शुरू होने तक रहता है; अगर इस बीच समीक्षा या एजेंट नोट बदल दे, तो **लागू करें** मना कर देता है और आपको फिर से प्रीव्यू लेना होता है। **लागू करें** किसी प्रीव्यू के सभी बदलाव सेव करता है या एक भी नहीं: अगर कोई बदलाव सेव नहीं हो पाता (जैसे MEMORY.md भर गई हो), तो नोट पहले जैसे रहते हैं और कारण दिखता है। आपके संदेश वाले हर पूरे टर्न पर एक मॉडल कॉल लगती है; विफल कॉल अगले टर्न के बाद वही संदेश फिर पढ़ती है। सब-एजेंट चैट की समीक्षा नहीं होती। यह विचार और फ़ाइल फ़ॉर्मैट [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0) से लिए गए हैं; Composer Plus उसका कोई कोड इस्तेमाल नहीं करता और DS Bot की अपनी मेमोरी को कभी नहीं पढ़ता या लिखता।
|
|
302
307
|
- **मेमोरी वर्शन इतिहास** हर मेमोरी (हर प्रोजेक्ट और ग्लोबल मेमोरी) के नवीनतम 50 वर्शन रखता है; पुराने हटा दिए जाते हैं। एक वर्शन में एक नोट नहीं, उस प्रोजेक्ट की पूरी मेमोरी होती है। **रीस्टोर करें** उस वर्शन की सभी फ़ाइलें (विषय सहित) वापस रखता है, और वर्शन खोलने के बाद मेमोरी बदल गई हो तो मना कर देता है; रीस्टोर से पहले की मेमोरी एक नया वर्शन बन जाती है, इसलिए आप उसे पूर्ववत कर सकते हैं। स्विच बंद रहने पर कोई नया वर्शन नहीं रखा जाता और **रीस्टोर करें** मना कर देता है; रखे गए वर्शन बने रहते हैं। इस सुविधा से पहले का कोई वर्शन नहीं है: इतिहास इंस्टॉल करने के बाद की पहली सेव से शुरू होता है।
|
|
@@ -352,6 +357,8 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
|
|
|
352
357
|
|
|
353
358
|
**क्या मुझे ऐसी निजी असिस्टेंट चैट मिल सकती है जो मुझे याद दिलाए और मेरी दूसरी चैट संभाले?** हां, **असिस्टेंट** से (डिफ़ॉल्ट रूप से चालू): बाएं साइडबार में **असिस्टेंट** पर क्लिक करें। यह dsh के शेड्यूल किए गए टास्क से रिमाइंडर सेट करता है, वेब पर खोजता है, आपकी चैट की सूची दिखाता है और उन्हें पढ़ता है, और किसी चैट को संदेश भेजना या चैट शुरू करना, रोकना या आर्काइव करना सिर्फ़ आपकी मंज़ूरी के बाद करता है। अपनी प्रोफ़ाइल इसकी प्रोजेक्ट मेमोरी में, विषय “profil” में रखें।
|
|
354
359
|
|
|
360
|
+
**क्या असिस्टेंट मेरी चैट सूची से बाहर रहकर बॉट की तरह काम कर सकता है?** हां। **चैट से अलग असिस्टेंट** उसकी चैट को साइडबार की सूची से हटाता है और उसकी स्थिति **असिस्टेंट** पंक्ति पर दिखाता है (आपका इंतज़ार करते समय नारंगी)। **असिस्टेंट में सिर्फ़ संदेश** उसके काम के चरण छिपाता है। **असिस्टेंट हमेशा खाली** उससे हर लंबा चरण बैकग्राउंड सबएजेंट को दिलवाता है, इसलिए वह तुरंत जवाब देता है। **असिस्टेंट से चैट की खबरें** (डिफ़ॉल्ट रूप से बंद, टोकन खर्च करता है) चालू होने पर, जब कोई दूसरी चैट पूरी होती है, विफल होती है या आपका इंतज़ार करती है, तो असिस्टेंट आपको बताता है।
|
|
361
|
+
|
|
355
362
|
**क्या dsh, dsh-backup की तरह, मेरी चैट और सेटिंग का बैकअप ले सकता है?** हां: **सेटिंग → Composer Plus → बैकअप → अभी बैकअप लें**। यह उसी फ़ॉर्मैट का आर्काइव उसी फ़ोल्डर (`~/Desktop/dsh-backups`) में लिखता है, इसलिए dsh-backup के आर्काइव भी दिखते हैं और बहाल हो सकते हैं, और आप dsh-backup हटा सकते हैं। तय समय पर बैकअप के लिए **अपने-आप बैकअप** चालू करें।
|
|
356
363
|
|
|
357
364
|
**dsh अब शुरू नहीं होता। बैकअप कैसे बहाल करें?** बैकअप फ़ोल्डर (`~/Desktop/dsh-backups`) खोलें और `Composer Plus Rescue.command` पर डबल-क्लिक करें (Linux: `composer-plus-rescue.sh`, Windows: `Composer Plus Rescue.cmd`)। `3) Restore a backup` चुनें, कोई एक बैकअप चुनें और `RESTORE` टाइप करें। यह dsh के बिना काम करता है।
|
|
@@ -506,6 +513,8 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/
|
|
|
506
513
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
507
514
|
# Assistant: on by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
|
|
508
515
|
SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
|
|
516
|
+
# Assistant welcome card: shows above the input on the first open of the assistant chat, goes with the switch and with the first message, not in other chats
|
|
517
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-assistant-welcome.mjs /path/to/dsh/lib/bin.js
|
|
509
518
|
```
|
|
510
519
|
|
|
511
520
|
```sh
|