dsh-composer-plus 1.16.0 → 1.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.de.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Starte dsh danach neu. (Die CLI kann nicht in das Desktop-Profil installieren; dieses Profil verwaltet die App.)
31
31
 
32
- > Das pnpm von dsh überspringt Versionen, die jünger als 24 Stunden sind. Gib direkt nach einem Release die Version mit an: `dsh-composer-plus@1.16.0`.
32
+ > Das pnpm von dsh überspringt Versionen, die jünger als 24 Stunden sind. Gib direkt nach einem Release die Version mit an: `dsh-composer-plus@1.16.1`.
33
33
 
34
34
  ## Funktionen
35
35
 
@@ -182,7 +182,7 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
182
182
  - **Kein Branch-Etikett an einer Chatzeile:** Der Chat hatte seit der Installation dieser Version keine Runde, sein Ordner ist kein git-Repository, oder **Git-Branch in Chatzeilen** ist aus. Starte dsh nach einem Update neu (die Host-Hälfte zeichnet den Branch auf).
183
183
  - **Zielprüfung meldet, dass der Test mit Code 127 oder „not found“ beendet wurde:** Ein dsh, das aus dem Finder oder dem Dock gestartet wurde, kann einen kürzeren PATH als dein Terminal haben und findet daher `npm`, `pnpm` oder `cargo` nicht. Starte dsh aus einem Terminal, oder lege unter **Zielprüfung** → **Bearbeiten** deinen eigenen Testbefehl mit dem vollständigen Pfad fest. **Jetzt ausführen** zeigt das Ergebnis sofort.
184
184
  - **Das Ziel schließt sich nicht und der Agent arbeitet weiter:** **Zielprüfung** hat einen fehlschlagenden Test oder fehlende Arbeit gefunden. Die Zeile unter dem Ziel zeigt den Grund (fahre mit der Maus über das Ergebnis, um die Details zu sehen). Behebe die Ursache oder den Testbefehl, oder schließe das Ziel selbst mit `/goal` oder der Zielleiste ab (das wird nicht geprüft).
185
- - **Die Installation schlägt direkt nach einem Release fehl:** Gib die Version mit an (`dsh-composer-plus@1.16.0`), siehe den Hinweis zur Installation oben.
185
+ - **Die Installation schlägt direkt nach einem Release fehl:** Gib die Version mit an (`dsh-composer-plus@1.16.1`), siehe den Hinweis zur Installation oben.
186
186
  - **Jetzt sichern meldet „Eine andere Sicherungsaktion läuft“:** Eine Aktion läuft in einem anderen dsh-Fenster oder in der Rettungskonsole (sie teilen sich eine Sperrdatei, `.composer-plus.lock`, im Sicherungsordner). Warte, bis sie fertig ist. Läuft keine Aktion, wird die Sperre eines beendeten Prozesses beim nächsten Klick übernommen.
187
187
  - **Die Rettungskonsole meldet „dsh is running“:** Beende zuerst dsh. Ist dsh wirklich geschlossen, ist die in der Meldung genannte Datei von einem Absturz übrig: Entferne sie und versuche es erneut.
188
188
  - **Nach einer Wiederherstellung startet dsh nicht oder ein Plugin fehlt:** Die Plugin-Pakete eines Profils müssen neu installiert werden. Die Rettungskonsole bietet das nach einer Wiederherstellung an; oder führe `pnpm install` in jedem Ordner unter `$DSH_HOME/profiles/` aus, den sie auflistet. Geheimnisse, die nicht im vault waren (anderer Computer), müssen neu eingegeben werden: Die Konsole listet sie auf.
@@ -216,7 +216,7 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
216
216
  - **Chats, die diese Datei geändert haben** kennt wie **Dieser Chat** nur die Datei-Tools von dsh (`write`, `edit`, `str_replace_editor`): Eine Änderung durch einen Befehl (`bash`) wird nicht aufgeführt. Die Liste liest die neuesten 300 Chats des Repositorys (nach ihrem Erstellungszeitpunkt) und sagt es, wenn es mehr gibt. Sie zeigt höchstens 100 Zeilen. Eine umbenannte Datei steht unter dem Namen, den das Tool geschrieben hat. Ein Chat, dessen Ordner außerhalb des Repositorys liegt (auch über einen anderen Pfad zu denselben Dateien), zählt nicht. Das erste Öffnen nach einem Start von dsh liest alle Chatprotokolle des Repositorys (etwa 4 s für 275 Chats). Spätere Aufrufe lesen nur die Chats, die sich seitdem geändert haben.
217
217
  - **Git-Branch in Chatzeilen** zeigt den Branch des Chat-Ordners zu Beginn oder am Ende der letzten Runde, nicht den aktuellen Branch: Ein Branch-Wechsel außerhalb einer Runde erscheint erst nach der nächsten Runde. Chats von vor dieser Version zeigen bis zu ihrer nächsten Runde kein Etikett. Das Etikett sitzt im Markup der Chatzeilen von dsh (dsh hat dort keinen Platz dafür). Wenn ein dsh-Update dieses Markup ändert, erscheint kein Etikett. Wenn die Projektzeile über dem Chat denselben Namen wie der Branch hat (zum Beispiel ein Ordner von „Ein Branch pro Chat“), zeigt die Chatzeile kein Etikett, aber „In einer Liste“ zeigt es weiterhin.
218
218
  - **Ein Branch pro Chat** im Planmodus: dsh sendet `/plan <Nachricht>` als Befehl, nicht als Nachricht. Deshalb fängt Composer Plus das Absenden des Befehls im Eingabefeld von dsh ab (keine öffentliche API). Ändert ein dsh-Update das, läuft `/plan <Nachricht>` mit gewähltem **Neuer Branch** im offenen Bildschirm „Neuer Chat“ als eigener Befehl von dsh. Kann der Host im neuen Chat den Planmodus nicht einschalten, bleibt der Branch-Ordner, und die Nachricht wird nicht gesendet. So ändert der neue Chat keine Dateien im Standardmodus.
219
- - **Ein Branch pro Chat**: Wenn der Branch-Ordner eines Chats (`<project>/.worktrees/<name>`) gelöscht wird, zum Beispiel wenn der eigene Agent des Chats den Worktree entfernt und den Branch löscht, verschiebt der nächste Schritt des Chats den Chat aus diesem Ordner. Das Projekt des Branch-Ordners verschwindet aus der Seitenleiste, und der Chat erscheint unter Ohne Gruppe und bleibt offen. Ab dsh 0.2.1 läuft der Chat im Hauptordner des Projekts weiter, und das Modell bekommt einen Hinweis auf den neuen Ordner. Unter dsh 0.2.0 behält der Chat den gelöschten Ordner: Ein Befehl dort schlägt fehl, bis Sie einen neuen Chat beginnen. Die Verschiebung geschieht erst beim nächsten Schritt des Chats. Daher bleibt das Projekt eines gelöschten Branches, das kein Chat nutzt, in der Seitenleiste: Entfernen Sie es mit dem Projektmenü von dsh. Während ein Chat verschoben wird, antwortet **Neuer Branch** im selben Repository mit „erneut versuchen“. Mit ausgeschaltetem Schalter zeigt dsh wieder seinen eigenen Fehler („working-directory: directory does not exist“).
219
+ - **Ein Branch pro Chat**: Wenn der Branch-Ordner eines Chats (`<project>/.worktrees/<name>`) gelöscht wird, zum Beispiel wenn der eigene Agent des Chats den Worktree entfernt und den Branch löscht, verschiebt der nächste Schritt des Chats den Chat aus diesem Ordner. Das Projekt des Branch-Ordners verschwindet aus der Seitenleiste, und der Chat erscheint unter Ohne Gruppe und bleibt offen. Ab dsh 0.2.1 läuft der Chat im Hauptordner des Projekts weiter, und das Modell bekommt einen Hinweis auf den neuen Ordner. Unter dsh 0.2.0 behält der Chat den gelöschten Ordner: Ein Befehl dort schlägt fehl, bis Sie einen neuen Chat beginnen. Auch das Projekt eines gelöschten Branches, das kein Chat nutzt, verschwindet aus der Seitenleiste: Composer Plus prüft die Branch-Ordner beim Start und alle 30 Sekunden, auch ohne Filter der Seitenleiste. Während ein Chat verschoben wird, antwortet **Neuer Branch** im selben Repository mit „erneut versuchen“. Mit ausgeschaltetem Schalter zeigt dsh wieder seinen eigenen Fehler („working-directory: directory does not exist“).
220
220
  - **Branches im Arbeitsbereichsbaum** schreibt ohne Klick in git: Wenn es einen Chat verschiebt, setzt es den Projektordner auf seinen vorherigen Branch zurück (`git switch`) und fügt einen Worktree hinzu (`git worktree add`). Es löscht nie einen Branch, einen Worktree oder eine Datei. dsh kann den Ordner eines Chats nicht ändern, daher ist ein verschobener Chat eine Kopie (dshs eigener Fork, mit neuer ID), und der alte Chat wird archiviert. Die Kopie setzt die angehaltene Aufgabe fort; ein Tool-Aufruf, der lief, als der Branch erschien, endet mit einer Ablehnung, und der Agent führt ihn im neuen Ordner erneut aus. Ein Ziel des alten Chats zieht nicht mit. Nur ein Chat, dessen Ordner der Hauptordner des Repositorys ist, wird verschoben, und nur für einen Branch, den er in diesem Durchgang erstellt und ausgecheckt hat (`git switch -c`, `git checkout -b`): Ein nur mit `git branch` erstellter Branch, ein Ordner mit nicht committeten Änderungen, ein verknüpfter Worktree oder ein Unterordner verschieben nichts. Im Baum erscheinen nur Worktrees direkt in `<project>/.worktrees/` mit einem Branch; ein losgelöster (detached) Worktree oder einer an anderer Stelle erscheint nicht. Die Kopie öffnet sich nur von selbst, wenn ihr Chat der geöffnete war (das Plugin liest das aus dshs Zeile in der Seitenleiste); sonst ist sie im Branch-Projekt.
221
221
  - **Im Chat suchen** durchsucht nur, was die Seite zeigt: die geladenen Nachrichten und Antworten (scrolle nach oben oder klicke auf **Ältere laden** für ältere), nicht geschlossene Tool-Schritte und nicht den eingeklappten Text in der Ausgabe eines Tools. Die Suche zählt höchstens 2.000 Treffer (dann „2000+“). Sie nutzt die Highlight-API des Browsers (Chromium 105 und neuer; die Desktop-App hat sie): In einem älteren Browser funktionieren die Zählung und das Springen ohne die Farbe. `Cmd+F` auf einem Mac (`Ctrl+F` unter Windows und Linux) öffnet sie nur, solange ein Chat auf dem Bildschirm ist. Anderswo funktioniert die eigene Suche des Browsers wie bisher. Auf einem Mac behält `Ctrl+F` in Textfeldern seine macOS-Funktion (der Cursor geht ein Zeichen weiter).
222
222
  - **Wartenden Chat bei Inaktivität öffnen** kennt nur, was das Fenster von dsh sieht: Arbeit in einer anderen App zählt nicht. Ist dsh im Hintergrund, kann es also nach 30 Sekunden einen wartenden Chat öffnen. dsh kommt dabei nicht in den Vordergrund. Lesen ohne Taste, Klick oder Mausbewegung zählt als Inaktivität. Es achtet nur auf Chats mit dem orangefarbenen Punkt von dsh (eine Frage, eine Genehmigung oder eine Planprüfung); die Anfrage eines Subagenten erscheint in seinem übergeordneten Chat. Solange ein wartender Chat auf dem Bildschirm ist, öffnet sich kein anderer; ein Chat, den du ohne Antwort verlassen hast, kann sich nach den nächsten 30 Sekunden ohne Benutzung wieder öffnen. Die 30 Sekunden lassen sich nicht ändern.
package/README.es.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Después, reinicia dsh. (La CLI no puede instalar en el perfil de escritorio: de eso se encarga la app).
31
31
 
32
- > El pnpm de dsh omite las versiones publicadas hace menos de 24 horas. Justo después de una versión nueva, añade la versión: `dsh-composer-plus@1.16.0`.
32
+ > El pnpm de dsh omite las versiones publicadas hace menos de 24 horas. Justo después de una versión nueva, añade la versión: `dsh-composer-plus@1.16.1`.
33
33
 
34
34
  ## Funciones
35
35
 
@@ -182,7 +182,7 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
182
182
  - **No hay etiqueta de rama en una fila de chat:** el chat no tuvo ningún turno desde que instalaste esta versión, su carpeta no es un repositorio git o **Rama de Git en las filas de chat** está desactivada. Después de una actualización, reinicia dsh (la parte Host registra la rama).
183
183
  - **Comprobación del objetivo dice que la prueba terminó con el código 127 o «not found»:** dsh iniciado desde el Finder o el Dock puede tener un PATH más corto que tu terminal, así que no encuentra `npm`, `pnpm` ni `cargo`. Inicia dsh desde una terminal, o define tu propio comando de prueba con la ruta completa en **Comprobación del objetivo** → **Editar**. **Ejecutar ahora** muestra el resultado al momento.
184
184
  - **El objetivo no se cierra y el agente sigue trabajando:** **Comprobación del objetivo** encontró una prueba fallida o trabajo pendiente; la fila bajo el objetivo muestra el motivo (pasa el puntero por el resultado para ver los detalles). Corrige la causa o el comando de prueba, o completa el objetivo tú mismo con `/goal` o con la barra del objetivo (eso no se comprueba).
185
- - **La instalación falla justo después de una versión nueva:** añade la versión (`dsh-composer-plus@1.16.0`); consulta la nota de instalación de más arriba.
185
+ - **La instalación falla justo después de una versión nueva:** añade la versión (`dsh-composer-plus@1.16.1`); consulta la nota de instalación de más arriba.
186
186
  - **Hacer copia ahora dice «Ya hay otra acción de copia de seguridad en curso»:** hay una acción en marcha en otra ventana de dsh o en la consola de rescate (comparten un archivo de bloqueo, `.composer-plus.lock`, en la carpeta de copias de seguridad). Espera a que termine. Si no hay ninguna acción en marcha, el siguiente clic toma el bloqueo de un proceso cerrado.
187
187
  - **La consola de rescate dice «dsh is running»:** primero sal de dsh. Si dsh está realmente cerrado, el archivo que nombra el mensaje quedó de un cierre inesperado: elimínalo y vuelve a intentarlo.
188
188
  - **Después de una restauración, dsh no se inicia o falta un plugin:** hay que volver a instalar los paquetes de plugins de un perfil. La consola de rescate lo ofrece después de una restauración; o ejecuta `pnpm install` en cada carpeta de `$DSH_HOME/profiles/` que indique. Los secretos que no estaban en el vault (otro equipo) hay que introducirlos de nuevo: la consola los enumera.
@@ -216,7 +216,7 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
216
216
  - **Chats que cambiaron este archivo** solo conoce las herramientas de archivos de dsh (`write`, `edit`, `str_replace_editor`), como **Este chat**: un cambio hecho por un comando (`bash`) no aparece. Lee los 300 chats más recientes del repositorio (según cuándo se crearon) y lo indica cuando hay más; muestra como máximo 100 filas. Un archivo renombrado aparece con el nombre que escribió la herramienta. No cuenta un chat cuya carpeta está fuera del repositorio (tampoco a través de otra ruta a los mismos archivos). La primera vez que se abre después de iniciar dsh, lee todos los registros de chat del repositorio (unos 4 s para 275 chats); las siguientes veces solo lee los chats que cambiaron desde entonces.
217
217
  - **Rama de Git en las filas de chat** muestra la rama de la carpeta del chat cuando su último turno empezó o terminó, no la rama actual: un cambio de rama fuera de un turno aparece después del siguiente turno. Los chats de antes de esta versión no muestran etiqueta hasta su siguiente turno. La etiqueta va en el marcado de las filas de chat de dsh (dsh no tiene un espacio ahí); si una actualización de dsh cambia ese marcado, no aparece ninguna etiqueta. Si la fila de proyecto sobre el chat tiene el mismo nombre que la rama (por ejemplo, una carpeta de «Una rama por chat»), la fila del chat no muestra la etiqueta, pero «En una sola lista» sí la muestra.
218
218
  - **Una rama por chat** en modo plan: dsh envía `/plan <mensaje>` como un comando, no como un mensaje, así que Composer Plus intercepta el envío del comando en el editor de dsh (no es una API pública). Si una actualización de dsh lo cambia, `/plan <mensaje>` con **Nueva rama** elegida se ejecuta en el Chat nuevo abierto como comando propio de dsh. Cuando el Host no puede activar el modo plan en el chat nuevo, la carpeta de la rama se queda y el mensaje no se envía, así que el chat nuevo no cambia archivos en el modo predeterminado.
219
- - **Una rama por chat**: cuando se elimina la carpeta de la rama de un chat (`<project>/.worktrees/<name>`), por ejemplo cuando el propio agente del chat quita el worktree y elimina la rama, el siguiente paso del chat lo saca de esa carpeta. El proyecto de la carpeta de la rama desaparece de la barra lateral, y el chat aparece en Sin agrupar y sigue abierto. En dsh 0.2.1 y posteriores, el chat continúa en la carpeta principal del proyecto, y el modelo recibe una nota sobre la nueva carpeta. En dsh 0.2.0, el chat conserva la carpeta eliminada: un comando allí falla hasta que empieces un chat nuevo. El cambio ocurre solo en el siguiente paso del chat, así que el proyecto de una rama eliminada que ningún chat usa se queda en la barra lateral: quítalo con el menú de proyecto de dsh. Mientras un chat se mueve, **Nueva rama** en el mismo repositorio responde «inténtalo de nuevo». Con el interruptor apagado, vuelve a aparecer el error propio de dsh («working-directory: directory does not exist»).
219
+ - **Una rama por chat**: cuando se elimina la carpeta de la rama de un chat (`<project>/.worktrees/<name>`), por ejemplo cuando el propio agente del chat quita el worktree y elimina la rama, el siguiente paso del chat lo saca de esa carpeta. El proyecto de la carpeta de la rama desaparece de la barra lateral, y el chat aparece en Sin agrupar y sigue abierto. En dsh 0.2.1 y posteriores, el chat continúa en la carpeta principal del proyecto, y el modelo recibe una nota sobre la nueva carpeta. En dsh 0.2.0, el chat conserva la carpeta eliminada: un comando allí falla hasta que empieces un chat nuevo. El proyecto de una rama eliminada que ningún chat usa también desaparece de la barra lateral: Composer Plus revisa las carpetas de ramas al iniciar y cada 30 segundos, también sin ningún filtro de la barra lateral. Mientras un chat se mueve, **Nueva rama** en el mismo repositorio responde «inténtalo de nuevo». Con el interruptor apagado, vuelve a aparecer el error propio de dsh («working-directory: directory does not exist»).
220
220
  - **Ramas en el árbol de espacios de trabajo** escribe en git sin un clic: cuando mueve un chat, devuelve la carpeta del proyecto a su rama anterior (`git switch`) y añade un worktree (`git worktree add`). Nunca borra una rama, un worktree ni un archivo. dsh no puede cambiar la carpeta de un chat, así que un chat movido es una copia (la bifurcación propia de dsh, con un id nuevo) y el chat anterior se archiva. La copia sigue con la tarea detenida; una llamada a herramienta que se ejecutaba cuando apareció la rama termina con un rechazo, y el agente la vuelve a ejecutar en la carpeta nueva. Un objetivo del chat anterior no se mueve con él. Solo se mueve un chat cuya carpeta es la carpeta principal del repositorio, y solo por una rama que creó y a la que cambió en ese turno (`git switch -c`, `git checkout -b`): una rama hecha solo con `git branch`, una carpeta con cambios sin confirmar, un worktree vinculado o una subcarpeta no mueven nada. En el árbol solo aparecen los worktrees que están directamente en `<project>/.worktrees/` y tienen una rama; un worktree separado (detached) o uno en otro lugar no aparece. La copia se abre sola solo cuando su chat era el abierto (el plugin lo lee de la fila de la barra lateral de dsh); si no, está en el proyecto de la rama.
221
221
  - **Buscar en el chat** solo busca en lo que muestra la página: los mensajes y respuestas cargados (desplázate hacia arriba o haz clic en **Cargar anteriores** para ver los más antiguos), no en los pasos de herramientas cerrados ni en el texto plegado dentro de la salida de una herramienta. Cuenta como máximo 2.000 coincidencias (después, «2000+»). Usa la API de resaltado del navegador (Chromium 105 y posteriores; la app de escritorio la tiene): en un navegador más antiguo, el recuento y los saltos funcionan sin el color. `Cmd+F` en un Mac (`Ctrl+F` en Windows y Linux) solo lo abre mientras hay un chat en pantalla; en otros lugares, la búsqueda propia del navegador funciona como antes. En un Mac, `Ctrl+F` mantiene su uso de macOS en los campos de texto (el cursor avanza un carácter).
222
222
  - **Abrir el chat en espera si estás inactivo** solo conoce lo que ve la ventana de dsh: el trabajo en otra app no cuenta, así que con dsh en segundo plano puede abrir un chat en espera a los 30 segundos. No trae dsh al frente. Leer sin pulsar una tecla, hacer clic ni mover el ratón cuenta como inactividad. Solo mira los chats con el punto naranja de dsh (una pregunta, una aprobación o una revisión del plan); la solicitud de un subagente se muestra en su chat principal. Mientras un chat en espera está en pantalla, no se abre otro; un chat que dejaste sin responder puede volver a abrirse tras los siguientes 30 segundos sin uso. Los 30 segundos no se pueden cambiar.
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.16.0`.
32
+ > Le pnpm de dsh ignore les versions publiées depuis moins de 24 heures. Juste après une nouvelle version, ajoutez le numéro de version : `dsh-composer-plus@1.16.1`.
33
33
 
34
34
  ## Fonctionnalités
35
35
 
@@ -182,7 +182,7 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
182
182
  - **Pas de pastille de branche sur une ligne de discussion :** 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).
183
183
  - **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.
184
184
  - **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é).
185
- - **L’installation échoue juste après une nouvelle version :** ajoutez la version (`dsh-composer-plus@1.16.0`) ; voir la note d’installation plus haut.
185
+ - **L’installation échoue juste après une nouvelle version :** ajoutez la version (`dsh-composer-plus@1.16.1`) ; voir la note d’installation plus haut.
186
186
  - **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.
187
187
  - **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.
188
188
  - **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.
@@ -216,7 +216,7 @@ Testé sur dsh `0.2.0-rc.2` (bureau et web) et `0.2.1-rc.2` (web). La CI exécut
216
216
  - **Discussions qui ont modifié ce fichier** ne connaît que les outils de fichiers de dsh (`write`, `edit`, `str_replace_editor`), comme **Cette discussion** : une modification faite par une commande (`bash`) n’est pas listée. La liste lit les 300 discussions les plus récentes du dépôt (selon leur date de création) et le signale quand il y en a plus ; elle affiche au plus 100 lignes. Un fichier renommé est listé sous le nom que l’outil a écrit. Une discussion dont le dossier est hors du dépôt (y compris par un autre chemin vers les mêmes fichiers) n’est pas comptée. La première ouverture après le démarrage de dsh lit tous les journaux de discussion du dépôt (environ 4 s pour 275 discussions) ; les ouvertures suivantes ne lisent que les discussions modifiées depuis.
217
217
  - **Branche Git sur les lignes de discussion** affiche la branche du dossier de la discussion au début ou à la fin de son dernier tour, pas la branche actuelle : un changement de branche hors d’un tour s’affiche après le tour suivant. Les discussions antérieures à cette version n’affichent pas de pastille avant leur prochain tour. La pastille se place dans le balisage des lignes de discussion de dsh (dsh n’a pas d’emplacement prévu à cet endroit) ; si une mise à jour de dsh change ce balisage, aucune pastille ne s’affiche. Si la ligne de projet au-dessus de la discussion porte le même nom que la branche (par exemple un dossier « Une branche par discussion »), la ligne de discussion n’affiche pas de pastille, mais « Dans une seule liste » l’affiche toujours.
218
218
  - **Une branche par discussion** en mode plan : dsh envoie `/plan <message>` comme une commande, pas comme un message, donc Composer Plus intercepte l’envoi de la commande dans la zone de saisie de dsh (pas une API publique). Si une mise à jour de dsh change cela, `/plan <message>` avec **Nouvelle branche** choisie s’exécute dans la Nouvelle discussion ouverte comme commande propre à dsh. Quand l’hôte ne peut pas activer le mode plan dans la nouvelle discussion, le dossier de la branche reste et le message n’est pas envoyé : la nouvelle discussion ne modifie donc pas de fichiers dans le mode par défaut.
219
- - **Une branche par discussion** : quand le dossier de branche d'une discussion (`<project>/.worktrees/<name>`) est supprimé, par exemple quand l'agent de la discussion retire le worktree et supprime la branche, l'étape suivante de la discussion la sort de ce dossier. Le projet du dossier de branche disparaît de la barre latérale, et la discussion apparaît sous Sans groupe et reste ouverte. Avec dsh 0.2.1 et plus, la discussion continue dans le dossier principal du projet, et le modèle reçoit une note sur le nouveau dossier. Avec dsh 0.2.0, la discussion garde le dossier supprimé : une commande y échoue jusqu'à ce que vous commenciez une nouvelle discussion. Le déplacement a lieu seulement à l'étape suivante de la discussion : le projet d'une branche supprimée qu'aucune discussion n'utilise reste donc dans la barre latérale. Retirez-le avec le menu de projet de dsh. Pendant qu'une discussion se déplace, **Nouvelle branche** dans le même dépôt répond « réessayez ». Interrupteur désactivé, l'erreur de dsh revient (« working-directory: directory does not exist »).
219
+ - **Une branche par discussion** : quand le dossier de branche d'une discussion (`<project>/.worktrees/<name>`) est supprimé, par exemple quand l'agent de la discussion retire le worktree et supprime la branche, l'étape suivante de la discussion la sort de ce dossier. Le projet du dossier de branche disparaît de la barre latérale, et la discussion apparaît sous Sans groupe et reste ouverte. Avec dsh 0.2.1 et plus, la discussion continue dans le dossier principal du projet, et le modèle reçoit une note sur le nouveau dossier. Avec dsh 0.2.0, la discussion garde le dossier supprimé : une commande y échoue jusqu'à ce que vous commenciez une nouvelle discussion. Le projet d'une branche supprimée qu'aucune discussion n'utilise disparaît aussi de la barre latérale : Composer Plus vérifie les dossiers de branche au démarrage et toutes les 30 secondes, aussi sans filtre de la barre latérale. Pendant qu'une discussion se déplace, **Nouvelle branche** dans le même dépôt répond « réessayez ». Interrupteur désactivé, l'erreur de dsh revient (« working-directory: directory does not exist »).
220
220
  - **Branches dans l’arborescence des espaces de travail** écrit dans git sans clic : quand il déplace une discussion, il remet le dossier du projet sur sa branche précédente (`git switch`) et ajoute un worktree (`git worktree add`). Il ne supprime jamais une branche, un worktree ni un fichier. dsh ne peut pas changer le dossier d’une discussion : une discussion déplacée est donc une copie (le fork propre à dsh, avec un nouvel id) et l’ancienne discussion est archivée. La copie reprend la tâche arrêtée ; un appel d’outil en cours quand la branche est apparue se termine par un refus, et l’agent le relance dans le nouveau dossier. Un objectif de l’ancienne discussion ne suit pas. Seule une discussion dont le dossier est le dossier principal du dépôt est déplacée, et seulement pour une branche qu’elle a créée et sur laquelle elle est passée pendant ce tour (`git switch -c`, `git checkout -b`) : une branche créée avec `git branch` seul, un dossier avec des modifications non validées, un worktree lié ou un sous-dossier ne déplacent rien. Seuls les worktrees placés directement dans `<project>/.worktrees/` et liés à une branche apparaissent dans l’arborescence ; un worktree détaché ou placé ailleurs n’apparaît pas. La copie ne s’ouvre d’elle-même que si sa discussion était celle qui était ouverte (le plugin le lit dans la ligne de la barre latérale de dsh) ; sinon, elle est dans le projet de la branche.
221
221
  - **Rechercher dans la discussion** ne cherche que dans ce que la page affiche : les messages et les réponses chargés (faites défiler vers le haut ou cliquez sur **Charger les précédents** pour les plus anciens), ni dans les étapes d’outil fermées, ni dans le texte replié de la sortie d’un outil. La recherche compte au plus 2 000 résultats (puis « 2000+ »). Elle utilise l’API de surlignage du navigateur (Chromium 105 et plus récent ; l’app de bureau l’a) : dans un navigateur plus ancien, le compteur et les déplacements fonctionnent sans la couleur. `Cmd+F` sur un Mac (`Ctrl+F` sous Windows et Linux) ne l’ouvre que lorsqu’une discussion est à l’écran ; ailleurs, la recherche du navigateur fonctionne comme avant. Sur un Mac, `Ctrl+F` garde son rôle macOS dans les champs de texte (le curseur avance d’un caractère).
222
222
  - **Ouvrir la discussion en attente en cas d’inactivité** ne connaît que ce que voit la fenêtre de dsh : le travail dans une autre app ne compte pas, donc quand dsh est en arrière-plan, elle peut ouvrir une discussion en attente au bout de 30 secondes. Elle ne fait pas passer dsh au premier plan. Lire sans toucher une touche, cliquer ni bouger la souris compte comme de l’inactivité. Elle ne regarde que les discussions avec le point orange de dsh (une question, une approbation ou une revue du plan) ; la demande d’un sous-agent s’affiche dans sa discussion parente. Tant qu’une discussion en attente est à l’écran, aucune autre ne s’ouvre ; une discussion quittée sans réponse peut se rouvrir après les 30 secondes suivantes sans utilisation. Les 30 secondes ne sont pas modifiables.
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.16.0`।
32
+ > dsh का pnpm 24 घंटे से नए वर्शन छोड़ देता है। रिलीज़ के तुरंत बाद वर्शन भी लिखें: `dsh-composer-plus@1.16.1`।
33
33
 
34
34
  ## सुविधाएं
35
35
 
@@ -182,7 +182,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
182
182
  - **चैट पंक्ति पर ब्रांच लेबल नहीं है:** यह वर्शन इंस्टॉल करने के बाद से उस चैट में कोई टर्न नहीं हुआ, उसका फ़ोल्डर git रिपॉज़िटरी नहीं है, या **चैट पंक्तियों पर Git ब्रांच** बंद है। अपडेट के बाद dsh रीस्टार्ट करें (ब्रांच Host वाला हिस्सा दर्ज करता है)।
183
183
  - **लक्ष्य जांच बताती है कि टेस्ट कोड 127 या "not found" के साथ बंद हुआ:** Finder या Dock से शुरू किए गए dsh का PATH आपके टर्मिनल से छोटा हो सकता है, इसलिए उसे `npm`, `pnpm` या `cargo` नहीं मिलता। dsh को टर्मिनल से शुरू करें, या **लक्ष्य जांच** → **संपादित करें** में पूरे पाथ के साथ अपनी टेस्ट कमांड सेट करें। **अभी चलाएं** नतीजा तुरंत दिखाता है।
184
184
  - **लक्ष्य बंद नहीं होता और एजेंट काम करता रहता है:** **लक्ष्य जांच** को कोई विफल टेस्ट या अधूरा काम मिला; लक्ष्य के नीचे की पंक्ति वजह दिखाती है (ब्योरा देखने के लिए नतीजे पर पॉइंटर ले जाएं)। वजह या टेस्ट कमांड ठीक करें, या `/goal` या लक्ष्य बार से लक्ष्य खुद पूरा करें (उसकी जांच नहीं होती)।
185
- - **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.16.0`), ऊपर इंस्टॉल वाला नोट देखें।
185
+ - **रिलीज़ के तुरंत बाद इंस्टॉल विफल होता है:** वर्शन जोड़ें (`dsh-composer-plus@1.16.1`), ऊपर इंस्टॉल वाला नोट देखें।
186
186
  - **अभी बैकअप लें कहता है "बैकअप की दूसरी कार्रवाई चल रही है":** किसी दूसरी dsh विंडो में या रेस्क्यू कंसोल में कोई कार्रवाई चल रही है (दोनों बैकअप फ़ोल्डर में एक लॉक फ़ाइल, `.composer-plus.lock`, साझा करते हैं)। उसके पूरा होने का इंतज़ार करें। अगर कोई कार्रवाई नहीं चल रही, तो अगली क्लिक पर बंद हो चुकी प्रोसेस का लॉक ले लिया जाता है।
187
187
  - **रेस्क्यू कंसोल कहता है "dsh is running":** पहले dsh बंद करें। अगर dsh सच में बंद है, तो संदेश में बताई गई फ़ाइल किसी क्रैश के बाद बची रह गई है: उसे हटाएं और फिर से कोशिश करें।
188
188
  - **बहाली के बाद dsh शुरू नहीं होता या कोई प्लगइन नहीं है:** किसी प्रोफ़ाइल के प्लगइन पैकेज फिर से इंस्टॉल करने होंगे। बहाली के बाद रेस्क्यू कंसोल यह करने का विकल्प देता है; या `$DSH_HOME/profiles/` के नीचे के हर उस फ़ोल्डर में `pnpm install` चलाएं, जिसकी सूची वह दिखाता है। जो सीक्रेट vault में नहीं थे (दूसरा कंप्यूटर), उन्हें फिर से डालना होगा: कंसोल उनकी सूची दिखाता है।
@@ -216,7 +216,7 @@ dsh `0.2.0-rc.2` (डेस्कटॉप और वेब) और `0.2.1-rc.2`
216
216
  - **इस फ़ाइल को बदलने वाली चैट**, **यह चैट** की तरह, सिर्फ़ dsh के फ़ाइल टूल (`write`, `edit`, `str_replace_editor`) जानती है: किसी कमांड (`bash`) से हुआ बदलाव सूची में नहीं आता। यह रिपॉज़िटरी की सबसे नई 300 चैट पढ़ती है (बनने के समय के हिसाब से) और ज़्यादा होने पर यह बताती है; यह ज़्यादा से ज़्यादा 100 पंक्तियां दिखाती है। नाम बदली गई फ़ाइल उसी नाम से दिखती है, जो टूल ने लिखा। जिस चैट का फ़ोल्डर रिपॉज़िटरी के बाहर है (उन्हीं फ़ाइलों तक किसी दूसरे पाथ से भी), वह नहीं गिनी जाती। dsh शुरू होने के बाद पहली बार खोलने पर यह रिपॉज़िटरी के सभी चैट लॉग पढ़ती है (275 चैट के लिए लगभग 4 सेकंड); बाद में खोलने पर यह सिर्फ़ वे चैट पढ़ती है, जो तब से बदली हैं।
217
217
  - **चैट पंक्तियों पर Git ब्रांच** चैट के फ़ोल्डर की वह ब्रांच दिखाता है, जो उसके आख़िरी टर्न के शुरू या ख़त्म होने के समय थी, अभी की ब्रांच नहीं: टर्न के बाहर ब्रांच बदलने पर वह अगले टर्न के बाद दिखती है। इस वर्शन से पहले की चैट में अगले टर्न तक लेबल नहीं दिखता। लेबल dsh की चैट पंक्ति के मार्कअप में बैठता है (dsh में वहां कोई जगह (slot) नहीं है); अगर dsh का कोई अपडेट वह मार्कअप बदलता है, तो लेबल नहीं दिखता। अगर चैट के ऊपर वाली प्रोजेक्ट पंक्ति का नाम ब्रांच के नाम जैसा ही है (जैसे “हर चैट की अपनी ब्रांच” वाला फ़ोल्डर), तो चैट पंक्ति पर लेबल नहीं दिखता, लेकिन “एक ही सूची में” व्यू में लेबल अब भी दिखता है।
218
218
  - **हर चैट की अपनी ब्रांच** प्लान मोड में: dsh `/plan <संदेश>` को संदेश की तरह नहीं, कमांड की तरह भेजता है, इसलिए Composer Plus dsh के कंपोज़र में कमांड का सबमिट खुद संभालता है (यह सार्वजनिक API नहीं है)। अगर किसी dsh अपडेट से यह बदलता है, तो **नई ब्रांच** चुनी होने पर `/plan <संदेश>` खुली नई चैट में dsh के अपने कमांड की तरह चलता है। जब Host नई चैट में प्लान मोड चालू नहीं कर पाता, तो ब्रांच फ़ोल्डर बना रहता है और संदेश नहीं भेजा जाता, ताकि नई चैट डिफ़ॉल्ट मोड में फ़ाइलें न बदले।
219
- - **हर चैट की अपनी ब्रांच**: जब किसी चैट का ब्रांच फ़ोल्डर (`<project>/.worktrees/<name>`) डिलीट होता है, जैसे जब चैट का अपना एजेंट worktree हटाकर ब्रांच डिलीट करता है, तो चैट का अगला चरण चैट को उस फ़ोल्डर से बाहर ले जाता है। ब्रांच फ़ोल्डर का प्रोजेक्ट साइडबार से हट जाता है, और चैट बिना समूह के नीचे दिखती है और खुली रहती है। dsh 0.2.1 और बाद में चैट मुख्य प्रोजेक्ट फ़ोल्डर में जारी रहती है, और मॉडल को नए फ़ोल्डर के बारे में एक नोट मिलता है। dsh 0.2.0 में चैट डिलीट हुए फ़ोल्डर में रहती है: वहाँ चलने वाला कमांड तब तक विफल होता है जब तक आप नई चैट शुरू नहीं करते। यह बदलाव केवल चैट के अगले चरण में होता है, इसलिए डिलीट हुई ब्रांच का ऐसा प्रोजेक्ट जिसे कोई चैट इस्तेमाल नहीं करती, साइडबार में रहता है: उसे dsh के अपने प्रोजेक्ट मेनू से हटाएँ। जब कोई चैट हट रही हो, तो उसी रिपॉज़िटरी में **नई ब्रांच** "फिर से कोशिश करें" बताती है। स्विच बंद होने पर dsh की अपनी त्रुटि फिर दिखती है ("working-directory: directory does not exist")।
219
+ - **हर चैट की अपनी ब्रांच**: जब किसी चैट का ब्रांच फ़ोल्डर (`<project>/.worktrees/<name>`) डिलीट होता है, जैसे जब चैट का अपना एजेंट worktree हटाकर ब्रांच डिलीट करता है, तो चैट का अगला चरण चैट को उस फ़ोल्डर से बाहर ले जाता है। ब्रांच फ़ोल्डर का प्रोजेक्ट साइडबार से हट जाता है, और चैट बिना समूह के नीचे दिखती है और खुली रहती है। dsh 0.2.1 और बाद में चैट मुख्य प्रोजेक्ट फ़ोल्डर में जारी रहती है, और मॉडल को नए फ़ोल्डर के बारे में एक नोट मिलता है। dsh 0.2.0 में चैट डिलीट हुए फ़ोल्डर में रहती है: वहाँ चलने वाला कमांड तब तक विफल होता है जब तक आप नई चैट शुरू नहीं करते। डिलीट हुई ब्रांच का ऐसा प्रोजेक्ट जिसे कोई चैट इस्तेमाल नहीं करती, वह भी साइडबार से हट जाता है: Composer Plus शुरू होने पर और हर 30 सेकंड में ब्रांच फ़ोल्डर जाँचता है, साइडबार के किसी फ़िल्टर के बिना भी। जब कोई चैट हट रही हो, तो उसी रिपॉज़िटरी में **नई ब्रांच** "फिर से कोशिश करें" बताती है। स्विच बंद होने पर dsh की अपनी त्रुटि फिर दिखती है ("working-directory: directory does not exist")।
220
220
  - **वर्कस्पेस ट्री में ब्रांच** बिना क्लिक के git में लिखता है: चैट ले जाते समय यह प्रोजेक्ट फ़ोल्डर को उसकी पिछली ब्रांच पर लौटाता है (`git switch`) और एक worktree जोड़ता है (`git worktree add`)। यह कभी कोई ब्रांच, worktree या फ़ाइल नहीं हटाता। dsh किसी चैट का फ़ोल्डर नहीं बदल सकता, इसलिए ले जाई गई चैट एक कॉपी होती है (dsh का अपना फ़ोर्क, नई id के साथ) और पुरानी चैट आर्काइव हो जाती है। कॉपी रुका हुआ काम जारी रखती है; ब्रांच आने के समय चल रही टूल कॉल अस्वीकार होकर ख़त्म होती है, और एजेंट उसे नए फ़ोल्डर में फिर चलाता है। पुरानी चैट का लक्ष्य साथ नहीं जाता। सिर्फ़ वही चैट जाती है जिसका फ़ोल्डर रिपॉज़िटरी का मुख्य फ़ोल्डर है, और सिर्फ़ उस ब्रांच के लिए जिसे उसने उसी टर्न में बनाया और जिस पर स्विच किया (`git switch -c`, `git checkout -b`): सिर्फ़ `git branch` से बनी ब्रांच, अनकमिटेड बदलाव वाला फ़ोल्डर, लिंक्ड worktree या सब-फ़ोल्डर कुछ नहीं ले जाते। ट्री में सिर्फ़ वे worktree दिखते हैं जो सीधे `<project>/.worktrees/` में हैं और जिनकी ब्रांच है; अलग (detached) worktree या कहीं और का worktree नहीं दिखता। कॉपी अपने-आप तभी खुलती है जब उसकी चैट खुली हुई चैट थी (प्लगइन यह dsh की साइडबार पंक्ति से पढ़ता है); वरना वह ब्रांच प्रोजेक्ट में होती है।
221
221
  - **चैट में खोजें** सिर्फ़ वही खोजता है, जो पेज दिखाता है: लोड हो चुके संदेश और जवाब (पुराने संदेशों के लिए ऊपर स्क्रॉल करें या **पहले के लोड करें** पर क्लिक करें), बंद टूल स्टेप नहीं और किसी टूल के आउटपुट में फ़ोल्ड किया गया टेक्स्ट भी नहीं। यह ज़्यादा से ज़्यादा 2,000 मिलान गिनता है (उसके बाद "2000+")। यह ब्राउज़र का हाइलाइट API इस्तेमाल करता है (Chromium 105 और बाद के वर्शन; डेस्कटॉप ऐप में यह है): पुराने ब्राउज़र में गिनती और एक मिलान से दूसरे पर जाना काम करता है, पर रंग नहीं दिखता। Mac पर `Cmd+F` (Windows और Linux पर `Ctrl+F`) इसे सिर्फ़ तब खोलता है, जब स्क्रीन पर कोई चैट हो; बाकी जगहों पर ब्राउज़र की अपनी खोज पहले की तरह काम करती है। Mac पर `Ctrl+F` टेक्स्ट फ़ील्ड में अपना macOS काम करता रहता है (कर्सर एक अक्षर आगे जाता है)।
222
222
  - **निष्क्रिय होने पर इंतज़ार कर रही चैट खोलें** सिर्फ़ वही जानता है जो dsh की विंडो देखती है: दूसरे ऐप में काम गिना नहीं जाता, इसलिए dsh के बैकग्राउंड में होने पर यह 30 सेकंड बाद इंतज़ार कर रही चैट खोल सकता है। यह dsh को सामने नहीं लाता। कोई कुंजी दबाए, क्लिक किए या माउस हिलाए बिना पढ़ना निष्क्रिय माना जाता है। यह सिर्फ़ dsh के नारंगी बिंदु वाली चैट देखता है (सवाल, मंज़ूरी या प्लान रिव्यू); सबएजेंट का अनुरोध उसकी पैरेंट चैट में दिखता है। जब तक इंतज़ार कर रही कोई चैट स्क्रीन पर है, कोई दूसरी चैट नहीं खुलती; जिस चैट से आप जवाब दिए बिना हटे, वह अगले 30 सेकंड तक उपयोग न होने पर फिर से खुल सकती है। 30 सेकंड को बदला नहीं जा सकता।
package/README.id.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Lalu mulai ulang dsh. (CLI tidak dapat memasang plugin ke profil desktop; profil itu dikelola oleh aplikasi.)
31
31
 
32
- > pnpm milik dsh melewati versi yang berumur kurang dari 24 jam. Tepat setelah rilis, tambahkan versinya: `dsh-composer-plus@1.16.0`.
32
+ > pnpm milik dsh melewati versi yang berumur kurang dari 24 jam. Tepat setelah rilis, tambahkan versinya: `dsh-composer-plus@1.16.1`.
33
33
 
34
34
  ## Fitur
35
35
 
@@ -182,7 +182,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
182
182
  - **Tidak ada label branch di baris obrolan:** obrolan itu belum memiliki giliran sejak Anda memasang versi ini, foldernya bukan repositori git, atau **Branch Git di baris obrolan** nonaktif. Setelah pembaruan, mulai ulang dsh (bagian Host mencatat branch).
183
183
  - **Pemeriksaan tujuan menyebut pengujian keluar dengan kode 127 atau "not found":** dsh yang dimulai dari Finder atau Dock dapat memiliki PATH yang lebih pendek daripada terminal Anda, sehingga tidak menemukan `npm`, `pnpm`, atau `cargo`. Mulai dsh dari terminal, atau atur perintah pengujian Anda sendiri dengan jalur lengkap di **Pemeriksaan tujuan** → **Edit**. **Jalankan sekarang** langsung menampilkan hasilnya.
184
184
  - **Tujuan tidak ditutup dan agen terus bekerja:** **Pemeriksaan tujuan** menemukan pengujian yang gagal atau pekerjaan yang belum selesai; baris di bawah tujuan menampilkan alasannya (arahkan penunjuk ke hasil untuk melihat detailnya). Perbaiki penyebabnya atau perintah pengujiannya, atau selesaikan tujuan sendiri dengan `/goal` atau bilah tujuan (penyelesaian itu tidak diperiksa).
185
- - **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.16.0`), lihat catatan pemasangan di atas.
185
+ - **Pemasangan gagal tepat setelah rilis:** tambahkan versinya (`dsh-composer-plus@1.16.1`), lihat catatan pemasangan di atas.
186
186
  - **Cadangkan sekarang menyatakan "Tindakan pencadangan lain sedang berjalan":** ada tindakan yang berjalan di jendela dsh lain atau di konsol penyelamat (keduanya berbagi file kunci, `.composer-plus.lock`, di folder cadangan). Tunggu sampai tindakan itu selesai. Jika tidak ada tindakan yang berjalan, kunci milik proses yang sudah ditutup diambil alih pada klik berikutnya.
187
187
  - **Konsol penyelamat menyatakan "dsh is running":** keluar dari dsh terlebih dahulu. Jika dsh memang sudah tertutup, file yang disebut dalam pesan itu tersisa dari crash: hapus file itu dan coba lagi.
188
188
  - **Setelah pemulihan, dsh tidak mau dimulai atau ada plugin yang hilang:** paket plugin sebuah profil harus dipasang lagi. Konsol penyelamat menawarkannya setelah pemulihan; atau jalankan `pnpm install` di setiap folder di bawah `$DSH_HOME/profiles/` yang dicantumkannya. Rahasia yang tidak ada di vault (komputer lain) harus dimasukkan lagi: konsol mencantumkannya.
@@ -216,7 +216,7 @@ Diuji pada dsh `0.2.0-rc.2` (desktop dan web) dan `0.2.1-rc.2` (web). CI menjala
216
216
  - **Obrolan yang mengubah file ini** hanya mengenal alat file dsh (`write`, `edit`, `str_replace_editor`), sama seperti **Obrolan ini**: perubahan yang dibuat oleh perintah (`bash`) tidak tercantum. Fitur ini membaca 300 obrolan terbaru dari repositori (menurut waktu pembuatannya) dan memberi tahu jika ada lebih banyak; fitur ini menampilkan paling banyak 100 baris. File yang diganti namanya tercantum dengan nama yang ditulis alat. Obrolan yang foldernya berada di luar repositori (juga melalui jalur lain ke file yang sama) tidak dihitung. Pembukaan pertama setelah dsh dimulai membaca semua log obrolan di repositori (sekitar 4 detik untuk 275 obrolan); pembukaan berikutnya hanya membaca obrolan yang berubah sejak itu.
217
217
  - **Branch Git di baris obrolan** menampilkan branch folder obrolan saat giliran terakhirnya dimulai atau berakhir, bukan branch saat ini: pergantian branch di luar giliran baru tampil setelah giliran berikutnya. Obrolan dari sebelum versi ini tidak menampilkan label sampai giliran berikutnya. Label ini berada di markup baris obrolan dsh (dsh tidak punya slot di sana); jika pembaruan dsh mengubah markup itu, label tidak tampil. Jika baris proyek di atas obrolan bernama sama dengan branch-nya (misalnya folder “Branch per obrolan”), baris obrolan tidak menampilkan label, tetapi “Dalam satu daftar” tetap menampilkannya.
218
218
  - **Branch per obrolan** dalam mode rencana: dsh mengirim `/plan <pesan>` sebagai perintah, bukan sebagai pesan, jadi Composer Plus mengambil alih pengiriman perintah itu di kotak pesan dsh (bukan API publik). Jika pembaruan dsh mengubahnya, `/plan <pesan>` dengan **Branch baru** dipilih berjalan di Obrolan baru yang terbuka sebagai perintah dsh sendiri. Jika Host tidak dapat menyalakan mode rencana di obrolan baru, folder branch tetap ada dan pesan tidak dikirim, jadi obrolan baru tidak mengubah file dalam mode default.
219
- - **Branch per obrolan**: saat folder branch sebuah obrolan (`<project>/.worktrees/<name>`) dihapus, misalnya saat agen obrolan itu sendiri menghapus worktree dan branch-nya, langkah berikutnya dari obrolan memindahkan obrolan keluar dari folder itu. Proyek folder branch hilang dari bilah samping, dan obrolan tampil di bawah Tanpa grup dan tetap terbuka. Di dsh 0.2.1 dan yang lebih baru, obrolan berlanjut di folder utama proyek, dan model mendapat catatan tentang folder baru. Di dsh 0.2.0, obrolan tetap memakai folder yang dihapus: perintah di sana gagal sampai Anda memulai obrolan baru. Pemindahan hanya terjadi pada langkah berikutnya dari obrolan, jadi proyek dari branch yang dihapus dan tidak dipakai obrolan mana pun tetap ada di bilah samping: hapus dengan menu proyek dsh sendiri. Selama obrolan dipindahkan, **Branch baru** di repositori yang sama menjawab "coba lagi". Saat sakelar mati, galat dsh sendiri muncul lagi ("working-directory: directory does not exist").
219
+ - **Branch per obrolan**: saat folder branch sebuah obrolan (`<project>/.worktrees/<name>`) dihapus, misalnya saat agen obrolan itu sendiri menghapus worktree dan branch-nya, langkah berikutnya dari obrolan memindahkan obrolan keluar dari folder itu. Proyek folder branch hilang dari bilah samping, dan obrolan tampil di bawah Tanpa grup dan tetap terbuka. Di dsh 0.2.1 dan yang lebih baru, obrolan berlanjut di folder utama proyek, dan model mendapat catatan tentang folder baru. Di dsh 0.2.0, obrolan tetap memakai folder yang dihapus: perintah di sana gagal sampai Anda memulai obrolan baru. Proyek dari branch yang dihapus dan tidak dipakai obrolan mana pun juga hilang dari bilah samping: Composer Plus memeriksa folder branch saat mulai dan setiap 30 detik, juga tanpa filter bilah samping. Selama obrolan dipindahkan, **Branch baru** di repositori yang sama menjawab "coba lagi". Saat sakelar mati, galat dsh sendiri muncul lagi ("working-directory: directory does not exist").
220
220
  - **Branch di pohon ruang kerja** menulis ke git tanpa klik: saat memindahkan obrolan, fitur ini mengembalikan folder proyek ke branch sebelumnya (`git switch`) dan menambahkan worktree (`git worktree add`). Fitur ini tidak pernah menghapus branch, worktree, atau file. dsh tidak bisa mengganti folder sebuah obrolan, jadi obrolan yang dipindahkan adalah salinan (fork milik dsh sendiri, dengan id baru) dan obrolan lama diarsipkan. Salinan melanjutkan tugas yang berhenti; panggilan alat yang sedang berjalan saat branch muncul berakhir dengan penolakan, dan agen menjalankannya lagi di folder baru. Tujuan (goal) obrolan lama tidak ikut pindah. Hanya obrolan yang foldernya adalah folder utama repositori yang dipindahkan, dan hanya untuk branch yang dibuatnya dan dipindahinya pada giliran itu (`git switch -c`, `git checkout -b`): branch yang dibuat hanya dengan `git branch`, folder dengan perubahan yang belum di-commit, worktree tertaut, atau subfolder tidak memindahkan apa pun. Di pohon hanya tampil worktree yang langsung berada di `<project>/.worktrees/` dan punya branch; worktree terlepas (detached) atau di tempat lain tidak tampil. Salinan terbuka sendiri hanya jika obrolannya adalah obrolan yang sedang terbuka (plugin membacanya dari baris bilah samping dsh); jika tidak, salinan ada di proyek branch.
221
221
  - **Cari di obrolan** hanya mencari apa yang ditampilkan halaman: pesan dan balasan yang sudah dimuat (gulir ke atas atau klik **Muat yang lebih lama** untuk yang lebih lama), bukan langkah alat yang tertutup dan bukan teks yang terlipat di dalam output alat. Fitur ini menghitung paling banyak 2.000 kecocokan (lalu "2000+"). Fitur ini memakai API sorotan browser (Chromium 105 dan yang lebih baru; aplikasi desktop memilikinya): di browser yang lebih lama, jumlah dan perpindahan tetap berfungsi tanpa warna. `Cmd+F` di Mac (`Ctrl+F` di Windows dan Linux) hanya membukanya saat ada obrolan di layar; di tempat lain, pencarian bawaan browser berfungsi seperti biasa. Di Mac, `Ctrl+F` tetap menjalankan fungsi macOS-nya di kolom teks (kursor maju satu karakter).
222
222
  - **Buka obrolan yang menunggu saat tidak aktif** hanya mengetahui apa yang dilihat jendela dsh: pekerjaan di aplikasi lain tidak dihitung, jadi saat dsh berada di latar belakang, fitur ini dapat membuka obrolan yang menunggu setelah 30 detik. dsh tidak dibawa ke depan. Membaca tanpa menekan tombol, mengklik, atau menggerakkan mouse dihitung sebagai tidak aktif. Fitur ini hanya melihat obrolan dengan titik oranye dsh (pertanyaan, persetujuan, atau tinjauan rencana); permintaan subagen tampil di obrolan induknya. Selama obrolan yang menunggu ada di layar, obrolan lain tidak dibuka; obrolan yang Anda tinggalkan tanpa jawaban dapat terbuka lagi setelah 30 detik berikutnya tanpa penggunaan. Waktu 30 detik tidak dapat diubah.
package/README.ja.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.16.0`。
32
+ > dsh の pnpm は、公開から 24 時間たっていないバージョンをスキップします。リリース直後は、バージョンを指定してください:`dsh-composer-plus@1.16.1`。
33
33
 
34
34
  ## 機能
35
35
 
@@ -182,7 +182,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
182
182
  - **チャット行にブランチのラベルがない:** 原因は次のいずれかです。このバージョンをインストールしてから、そのチャットにターンがない。フォルダーが git リポジトリではない。**チャット行の Git ブランチ** がオフになっている。アップデートの後は、dsh を再起動してください(ブランチはホスト側が記録します)。
183
183
  - **目標チェックで、テストが終了コード 127 または「not found」で終了したと表示される:** Finder や Dock から起動した dsh は、ターミナルより PATH が短いことがあるため、`npm`、`pnpm`、`cargo` が見つかりません。ターミナルから dsh を起動するか、**目標チェック** → **編集** で、フルパスを使った独自のテストコマンドを設定してください。**今すぐ実行** を使うと、すぐに結果が表示されます。
184
184
  - **目標が閉じず、エージェントが作業を続ける:** **目標チェック** が、失敗したテストまたは足りない作業を見つけました。目標の下の行に理由が表示されます(詳細は、結果にポインターを合わせると表示されます)。原因またはテストコマンドを直すか、`/goal` または目標バーで目標を自分で完了してください(その完了はチェックされません)。
185
- - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.16.0`)。上のインストールの注記を参照してください。
185
+ - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.16.1`)。上のインストールの注記を参照してください。
186
186
  - **今すぐバックアップ で「別のバックアップ操作を実行中です」と表示される:** 別の dsh のウィンドウ、またはレスキューコンソールで操作が実行中です(どちらも、バックアップフォルダーのロックファイル `.composer-plus.lock` を共有します)。完了するまで待ってください。実行中の操作がない場合は、次のクリックで、終了したプロセスのロックを引き継ぎます。
187
187
  - **レスキューコンソールで「dsh is running」と表示される:** まず dsh を終了してください。dsh が本当に閉じている場合、メッセージに示されたファイルはクラッシュで残ったものです。そのファイルを削除して、もう一度試してください。
188
188
  - **復元の後に dsh が起動しない、またはプラグインが見つからない:** プロファイルのプラグインパッケージを、もう一度インストールする必要があります。レスキューコンソールが、復元の後にこれを提案します。または、コンソールが一覧表示する `$DSH_HOME/profiles/` の下の各フォルダーで `pnpm install` を実行してください。vault に入っていなかったシークレット(別のコンピュータ)は、もう一度入力する必要があります。コンソールがそれらを一覧表示します。
@@ -216,7 +216,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
216
216
  - **このファイルを変更したチャット** は、**このチャット** と同じく、dsh のファイルツール(`write`、`edit`、`str_replace_editor`)だけを認識します。コマンド(`bash`)による変更は表示されません。リポジトリの最新 300 件のチャット(作成日時の順)を読み取り、それより多い場合はそのことを表示します。表示するのは最大 100 行です。名前を変更したファイルは、ツールが書き込んだ名前で表示されます。フォルダーがリポジトリの外にあるチャット(同じファイルへの別のパスを通る場合も含みます)は数えません。dsh の起動後に最初に開くときは、リポジトリのすべてのチャットのログを読み取ります(275 件のチャットで約 4 秒)。2 回目以降は、それ以降に変更されたチャットだけを読み取ります。
217
217
  - **チャット行の Git ブランチ** が表示するのは、最後のターンの開始時または終了時に、チャットのフォルダーがあったブランチです。現在のブランチではありません。ターンの外でブランチを切り替えた場合は、次のターンの後に表示されます。このバージョンより前のチャットには、次のターンまでラベルが表示されません。ラベルは dsh のチャット行のマークアップの中に置かれます(dsh にはそこにスロットがありません)。dsh のアップデートでそのマークアップが変わった場合、ラベルは表示されません。チャットの上のプロジェクト行の名前がブランチと同じ場合(「チャットごとのブランチ」のフォルダーなど)、チャット行にラベルは表示されませんが、「1つのリスト」では表示されます。
218
218
  - **チャットごとのブランチ** を計画モードで使う場合:dsh は `/plan <メッセージ>` をメッセージではなくコマンドとして送信します。そのため Composer Plus は、dsh の入力欄でコマンドの送信を横取りします(公開 API ではありません)。dsh のアップデートでこれが変わった場合、**新しいブランチ** を選んだ状態の `/plan <メッセージ>` は、開いている新しいチャットで dsh 自体のコマンドとして実行されます。ホストが新しいチャットで計画モードをオンにできない場合、ブランチのフォルダーは残り、メッセージは送信されません。そのため、新しいチャットが既定のモードでファイルを変更することはありません。
219
- - **チャットごとのブランチ**:チャットのブランチフォルダー(`<project>/.worktrees/<name>`)が削除されると(たとえばチャット自身のエージェントが worktree を取り除いてブランチを削除したとき)、チャットの次のステップでチャットはそのフォルダーから移ります。ブランチフォルダーのプロジェクトはサイドバーから消え、チャットは「グループなし」の下に表示され、開いたままです。dsh 0.2.1 以降では、チャットはプロジェクトのメインフォルダーで続き、モデルには新しいフォルダーについての通知が届きます。dsh 0.2.0 では、チャットは削除されたフォルダーのままです。そこでのコマンドは、新しいチャットを始めるまで失敗します。移動はチャットの次のステップでのみ起こります。そのため、どのチャットも使っていない削除済みブランチのプロジェクトはサイドバーに残ります。dsh のプロジェクトメニューで削除してください。チャットの移動中は、同じリポジトリの **新しいブランチ** が「もう一度試してください」と答えます。スイッチをオフにすると、dsh 自身のエラー(「working-directory: directory does not exist」)が再び表示されます。
219
+ - **チャットごとのブランチ**:チャットのブランチフォルダー(`<project>/.worktrees/<name>`)が削除されると(たとえばチャット自身のエージェントが worktree を取り除いてブランチを削除したとき)、チャットの次のステップでチャットはそのフォルダーから移ります。ブランチフォルダーのプロジェクトはサイドバーから消え、チャットは「グループなし」の下に表示され、開いたままです。dsh 0.2.1 以降では、チャットはプロジェクトのメインフォルダーで続き、モデルには新しいフォルダーについての通知が届きます。dsh 0.2.0 では、チャットは削除されたフォルダーのままです。そこでのコマンドは、新しいチャットを始めるまで失敗します。どのチャットも使っていない削除済みブランチのプロジェクトもサイドバーから消えます。Composer Plus は起動時と 30 秒ごとにブランチフォルダーを確認します。サイドバーのフィルターは必要ありません。チャットの移動中は、同じリポジトリの **新しいブランチ** が「もう一度試してください」と答えます。スイッチをオフにすると、dsh 自身のエラー(「working-directory: directory does not exist」)が再び表示されます。
220
220
  - **ワークスペースのツリー内のブランチ** はクリックなしで git に書き込みます。チャットを移すとき、プロジェクトフォルダーを元のブランチに戻し(`git switch`)、worktree を追加します(`git worktree add`)。ブランチ、worktree、ファイルを削除することはありません。dsh はチャットのフォルダーを変更できないため、移されたチャットはコピー(新しい id を持つ dsh 自身のフォーク)で、元のチャットはアーカイブされます。コピーは止まった作業を続けます。ブランチが現れたときに実行中だったツール呼び出しは拒否で終わり、エージェントは新しいフォルダーで再実行します。元のチャットの目標は移りません。移るのは、フォルダーがリポジトリのメインフォルダーであるチャットだけで、そのターンで作成して切り替えたブランチ(`git switch -c`、`git checkout -b`)の場合だけです。`git branch` だけで作ったブランチ、未コミットの変更があるフォルダー、リンクされた worktree、サブフォルダーでは何も移りません。ツリーに表示されるのは、`<project>/.worktrees/` の直下にありブランチを持つ worktree だけです。デタッチされた worktree や別の場所の worktree は表示されません。コピーが自動で開くのは、元のチャットが開いていたチャットだった場合だけです(プラグインは dsh のサイドバーの行からそれを読み取ります)。それ以外の場合、コピーはブランチのプロジェクトにあります。
221
221
  - **チャット内を検索** が検索するのは、ページに表示されている内容だけです。対象は読み込まれたメッセージと返信です(古いものは、上にスクロールするか、**以前の履歴を読み込む** をクリックします)。閉じているツールのステップや、ツールの出力の中で折りたたまれているテキストは対象外です。数える一致は最大 2,000 件です(それを超えると「2000+」)。ブラウザーのハイライト API を使います(Chromium 105 以降。デスクトップアプリには搭載されています)。古いブラウザーでは、件数と移動は動作しますが、色は付きません。Mac では `Cmd+F`(Windows と Linux では `Ctrl+F`)でこれが開くのは、画面にチャットがあるときだけです。それ以外の場所では、ブラウザー自体の検索がこれまでどおり動作します。Mac の `Ctrl+F` は、テキスト欄での macOS の動作(カーソルを 1 文字進める)のままです。
222
222
  - **操作がないときに待機中のチャットを開く** が分かるのは、dsh のウィンドウで見える操作だけです。ほかのアプリでの作業は数えないため、dsh がバックグラウンドにあると、30 秒後に待機中のチャットを開くことがあります。dsh は前面に出ません。キー入力、クリック、マウスの移動をせずに読んでいるだけの状態は、操作なしと見なします。対象は dsh のオレンジ色の点が付いたチャット(質問、承認、計画のレビュー)だけです。サブエージェントのリクエストは親のチャットに表示されます。待機中のチャットが画面にある間は、ほかのチャットを開きません。回答せずに離れたチャットは、次に 30 秒間操作がないときに再び開くことがあります。30 秒は変更できません。
package/README.ko.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.16.0`.
32
+ > dsh의 pnpm은 게시된 지 24시간이 지나지 않은 버전을 건너뜁니다. 릴리스 직후에는 버전을 붙여서 설치하세요: `dsh-composer-plus@1.16.1`.
33
33
 
34
34
  ## 기능
35
35
 
@@ -182,7 +182,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
182
182
  - **채팅 행에 브랜치 배지가 없음:** 이 버전을 설치한 뒤 그 채팅에 턴이 없었거나, 폴더가 git 저장소가 아니거나, **채팅 행의 Git 브랜치**가 꺼져 있습니다. 업데이트한 뒤에는 dsh를 다시 시작하세요(브랜치는 Host 쪽이 기록합니다).
183
183
  - **목표 확인에 테스트가 종료 코드 127 또는 "not found"로 끝났다고 표시됨:** Finder나 Dock에서 시작한 dsh는 터미널보다 PATH가 짧을 수 있어서 `npm`, `pnpm`, `cargo`를 찾지 못합니다. 터미널에서 dsh를 시작하거나, **목표 확인** → **편집**에서 전체 경로를 쓴 테스트 명령을 직접 정하세요. **지금 실행**을 누르면 결과가 바로 표시됩니다.
184
184
  - **목표가 닫히지 않고 에이전트가 계속 작업함:** **목표 확인**이 실패한 테스트나 남은 작업을 찾았습니다. 목표 아래의 행에 이유가 표시됩니다(자세한 내용은 결과에 포인터를 올려 보세요). 원인이나 테스트 명령을 고치거나, `/goal` 또는 목표 바로 목표를 직접 완료하세요(이 완료는 확인하지 않습니다).
185
- - **릴리스 직후 설치 실패:** 버전을 붙여서 설치하세요(`dsh-composer-plus@1.16.0`). 위의 설치 안내를 참고하세요.
185
+ - **릴리스 직후 설치 실패:** 버전을 붙여서 설치하세요(`dsh-composer-plus@1.16.1`). 위의 설치 안내를 참고하세요.
186
186
  - **지금 백업에서 "다른 백업 작업이 실행 중입니다"라고 표시됨:** 다른 dsh 창이나 복구 콘솔에서 작업이 실행 중입니다(둘은 백업 폴더의 잠금 파일 `.composer-plus.lock`을 함께 씁니다). 작업이 끝날 때까지 기다리세요. 실행 중인 작업이 없으면, 다음에 클릭할 때 종료된 프로세스의 잠금을 넘겨받습니다.
187
187
  - **복구 콘솔에 "dsh is running"이라고 표시됨:** 먼저 dsh를 종료하세요. dsh가 정말 닫혀 있다면, 메시지에 나온 파일은 비정상 종료로 남은 것입니다. 그 파일을 삭제하고 다시 시도하세요.
188
188
  - **복원 후 dsh가 시작되지 않거나 플러그인이 없음:** 프로필의 플러그인 패키지를 다시 설치해야 합니다. 복구 콘솔이 복원 후에 이를 제안합니다. 또는 콘솔이 나열하는 `$DSH_HOME/profiles/` 아래의 각 폴더에서 `pnpm install`을 실행하세요. vault에 없던 비밀 값(다른 컴퓨터)은 다시 입력해야 합니다. 콘솔이 그 목록을 보여 줍니다.
@@ -216,7 +216,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
216
216
  - **이 파일을 변경한 채팅**은 **이 채팅**처럼 dsh의 파일 도구(`write`, `edit`, `str_replace_editor`)만 압니다. 명령(`bash`)으로 만든 변경은 목록에 나오지 않습니다. 저장소의 최신 채팅 300개(만든 시점 기준)를 읽고, 더 있으면 그렇다고 알려 줍니다. 최대 100행을 보여 줍니다. 이름이 바뀐 파일은 도구가 쓴 이름으로 표시됩니다. 폴더가 저장소 밖에 있는 채팅(같은 파일로 가는 다른 경로를 통한 경우도 포함)은 세지 않습니다. dsh를 시작한 뒤 처음 열 때는 저장소의 모든 채팅 로그를 읽습니다(채팅 275개에 약 4초). 그 뒤로 열 때는 그 이후에 바뀐 채팅만 읽습니다.
217
217
  - **채팅 행의 Git 브랜치**는 현재 브랜치가 아니라, 마지막 턴이 시작되거나 끝날 때 채팅 폴더가 있던 브랜치를 보여 줍니다. 턴 밖에서 브랜치를 바꾸면 다음 턴 뒤에 표시됩니다. 이 버전 이전의 채팅에는 다음 턴까지 배지가 표시되지 않습니다. 배지는 dsh의 채팅 행 마크업 안에 들어갑니다(dsh에는 그곳에 슬롯이 없습니다). dsh 업데이트로 그 마크업이 바뀌면 배지가 표시되지 않습니다. 채팅 위의 프로젝트 행 이름이 브랜치와 같으면(예: “채팅별 브랜치” 폴더) 채팅 행에 배지가 표시되지 않지만, “하나의 목록”에서는 계속 표시됩니다.
218
218
  - **채팅별 브랜치**를 계획 모드에서 쓸 때: dsh는 `/plan <메시지>`를 메시지가 아니라 명령으로 보냅니다. 그래서 Composer Plus가 dsh 입력란에서 명령 전송을 가로챕니다(공개 API가 아님). dsh 업데이트로 이것이 바뀌면, **새 브랜치**를 고른 상태의 `/plan <메시지>`는 열린 새 채팅에서 dsh 자체 명령으로 실행됩니다. Host가 새 채팅에서 계획 모드를 켜지 못하면 브랜치 폴더는 남고 메시지는 보내지지 않습니다. 따라서 새 채팅이 기본 모드에서 파일을 바꾸지 않습니다.
219
- - **채팅별 브랜치**: 채팅의 브랜치 폴더(`<project>/.worktrees/<name>`)가 삭제되면(예: 채팅 자신의 에이전트가 worktree를 제거하고 브랜치를 삭제할 때) 채팅의 다음 단계에서 채팅이 그 폴더 밖으로 옮겨집니다. 브랜치 폴더의 프로젝트는 사이드바에서 사라지고, 채팅은 그룹 없음 아래에 표시되며 열린 상태로 유지됩니다. dsh 0.2.1 이상에서는 채팅이 프로젝트의 기본 폴더에서 계속되고, 모델은 새 폴더에 대한 안내를 받습니다. dsh 0.2.0에서는 채팅이 삭제된 폴더를 그대로 사용합니다. 그곳에서 실행하는 명령은 새 채팅을 시작할 때까지 실패합니다. 이동은 채팅의 다음 단계에서만 일어나므로, 어떤 채팅도 사용하지 않는 삭제된 브랜치의 프로젝트는 사이드바에 남습니다. dsh의 프로젝트 메뉴로 제거하세요. 채팅이 옮겨지는 동안 같은 저장소의 **새 브랜치**는 "다시 시도하세요"라고 답합니다. 스위치를 끄면 dsh 자체 오류("working-directory: directory does not exist")가 다시 표시됩니다.
219
+ - **채팅별 브랜치**: 채팅의 브랜치 폴더(`<project>/.worktrees/<name>`)가 삭제되면(예: 채팅 자신의 에이전트가 worktree를 제거하고 브랜치를 삭제할 때) 채팅의 다음 단계에서 채팅이 그 폴더 밖으로 옮겨집니다. 브랜치 폴더의 프로젝트는 사이드바에서 사라지고, 채팅은 그룹 없음 아래에 표시되며 열린 상태로 유지됩니다. dsh 0.2.1 이상에서는 채팅이 프로젝트의 기본 폴더에서 계속되고, 모델은 새 폴더에 대한 안내를 받습니다. dsh 0.2.0에서는 채팅이 삭제된 폴더를 그대로 사용합니다. 그곳에서 실행하는 명령은 새 채팅을 시작할 때까지 실패합니다. 어떤 채팅도 사용하지 않는 삭제된 브랜치의 프로젝트도 사이드바에서 사라집니다. Composer Plus는 시작할 때와 30초마다 브랜치 폴더를 확인하며, 사이드바 필터가 없어도 됩니다. 채팅이 옮겨지는 동안 같은 저장소의 **새 브랜치**는 "다시 시도하세요"라고 답합니다. 스위치를 끄면 dsh 자체 오류("working-directory: directory does not exist")가 다시 표시됩니다.
220
220
  - **작업 공간 트리의 브랜치**은(는) 클릭 없이 git에 씁니다. 채팅을 옮길 때 프로젝트 폴더를 이전 브랜치로 되돌리고(`git switch`) worktree를 추가합니다(`git worktree add`). 브랜치, worktree, 파일은 절대 삭제하지 않습니다. dsh는 채팅의 폴더를 바꿀 수 없으므로, 옮겨진 채팅은 복사본(새 id를 가진 dsh 자체 포크)이고 이전 채팅은 보관됩니다. 복사본은 멈춘 작업을 이어서 합니다. 브랜치가 생겼을 때 실행 중이던 도구 호출은 거부로 끝나고, 에이전트는 새 폴더에서 그것을 다시 실행합니다. 이전 채팅의 목표는 함께 옮겨지지 않습니다. 폴더가 저장소의 메인 폴더인 채팅만 옮겨지며, 그 턴에서 만들고 전환한 브랜치(`git switch -c`, `git checkout -b`)일 때만 옮겨집니다. `git branch`만으로 만든 브랜치, 커밋되지 않은 변경이 있는 폴더, 연결된 worktree, 하위 폴더는 아무것도 옮기지 않습니다. 트리에는 `<project>/.worktrees/` 바로 아래에 있고 브랜치가 있는 worktree만 표시됩니다. 분리된(detached) worktree나 다른 위치의 worktree는 표시되지 않습니다. 복사본은 원래 채팅이 열려 있던 채팅일 때만 저절로 열립니다(플러그인은 dsh의 사이드바 행에서 이를 읽습니다). 그 외에는 브랜치 프로젝트에 있습니다.
221
221
  - **채팅에서 찾기**는 페이지가 보여 주는 것만 검색합니다. 불러온 메시지와 답변이 대상이며(이전 것은 위로 스크롤하거나 **이전 기록 로드**를 클릭하세요), 닫힌 도구 단계와 도구 출력 안의 접힌 텍스트는 검색하지 않습니다. 일치 항목은 최대 2,000개까지 셉니다(그 뒤에는 "2000+"). 브라우저의 하이라이트 API를 씁니다(Chromium 105 이상, 데스크톱 앱에는 있습니다). 더 오래된 브라우저에서는 개수와 이동은 작동하지만 색은 표시되지 않습니다. Mac에서는 `Cmd+F`(Windows와 Linux에서는 `Ctrl+F`)가 화면에 채팅이 있을 때만 이것을 엽니다. 다른 곳에서는 브라우저 자체의 찾기가 전처럼 작동합니다. Mac에서 `Ctrl+F`는 텍스트 필드에서 macOS 기능(커서를 한 글자 앞으로 이동)을 그대로 유지합니다.
222
222
  - **유휴 상태일 때 대기 중인 채팅 열기**는 dsh 창이 보는 동작만 압니다. 다른 앱에서 하는 작업은 세지 않으므로, dsh가 백그라운드에 있으면 30초 뒤에 대기 중인 채팅을 열 수 있습니다. dsh를 앞으로 가져오지는 않습니다. 키 입력, 클릭, 마우스 이동 없이 읽기만 하면 유휴 상태로 봅니다. dsh의 주황색 점이 있는 채팅(질문, 승인, 계획 검토)만 봅니다. 서브에이전트의 요청은 부모 채팅에 표시됩니다. 기다리는 채팅이 화면에 있는 동안에는 다른 채팅을 열지 않습니다. 답하지 않고 떠난 채팅은 다음에 30초 동안 사용하지 않으면 다시 열릴 수 있습니다. 30초는 바꿀 수 없습니다.
package/README.md CHANGED
@@ -27,7 +27,7 @@ dsh plugin --profile web add dsh-composer-plus
27
27
 
28
28
  Then restart dsh. (The CLI can't install into the desktop profile; the app manages it.)
29
29
 
30
- > dsh's pnpm skips versions younger than 24 hours. Right after a release, add the version: `dsh-composer-plus@1.16.0`.
30
+ > dsh's pnpm skips versions younger than 24 hours. Right after a release, add the version: `dsh-composer-plus@1.16.1`.
31
31
 
32
32
  ## Features
33
33
 
@@ -180,7 +180,7 @@ Tested on dsh `0.2.0-rc.2` (desktop and web) and `0.2.1-rc.2` (web). CI runs the
180
180
  - **No branch pill on a chat row:** the chat had no turn since you installed this version, its folder is not a git repository, or **Git branch on chat rows** is off. After an update, restart dsh (the Host half records the branch).
181
181
  - **Goal check says the test exited with code 127 or "not found":** dsh started from the Finder or the Dock can have a shorter PATH than your terminal, so it does not find `npm`, `pnpm` or `cargo`. Start dsh from a terminal, or set your own test command with the full path under **Goal check** → **Edit**. **Run now** shows the result at once.
182
182
  - **The goal does not close and the agent keeps working:** **Goal check** found a failing test or missing work; the row under the goal shows why (hover the result for the details). Fix the cause or the test command, or complete the goal yourself with `/goal` or the goal bar (that is not checked).
183
- - **Install fails right after a release:** add the version (`dsh-composer-plus@1.16.0`), see the install note above.
183
+ - **Install fails right after a release:** add the version (`dsh-composer-plus@1.16.1`), see the install note above.
184
184
  - **Back up now says "another backup action is running":** an action runs in another dsh window or in the rescue console (they share a lock file, `.composer-plus.lock`, in the backup folder). Wait for it. If no action runs, the lock of a closed process is taken over at the next click.
185
185
  - **The rescue console says "dsh is running":** quit dsh first. If dsh is really closed, the file named in the message is left from a crash: remove it and try again.
186
186
  - **After a restore, dsh does not start or a plugin is missing:** the plugin packages of a profile must be installed again. The rescue console offers it after a restore; or run `pnpm install` in each folder under `$DSH_HOME/profiles/` that it lists. Secrets that were not in the vault (another computer) must be entered again: the console lists them.
@@ -214,7 +214,7 @@ Tested on dsh `0.2.0-rc.2` (desktop and web) and `0.2.1-rc.2` (web). CI runs the
214
214
  - **Chats that changed this file** knows only dsh's file tools (`write`, `edit`, `str_replace_editor`), as **This chat**: a change made by a command (`bash`) is not listed. It reads the newest 300 chats of the repository (by when they were made) and says so when there are more; it shows at most 100 rows. A renamed file is listed under the name that the tool wrote. A chat whose folder is outside the repository (also through another path to the same files) is not counted. The first open after a dsh start reads every chat log of the repository (about 4 s for 275 chats); later opens read only the chats that changed since.
215
215
  - **Git branch on chat rows** shows the branch of the chat's folder when its last turn started or ended, not the branch now: a branch switch outside a turn shows after the next turn. Chats from before this version show no pill until their next turn. The pill sits in dsh's chat row markup (dsh has no slot there); if a dsh update changes that markup, no pill shows. A chat under a project row with its branch's name (a “Branch per chat” folder) shows no pill, except in “In one list”.
216
216
  - **Branch per chat** in plan mode: dsh sends `/plan <message>` as a command, not as a message, so Composer Plus takes the command's submit in dsh's composer (not a public API). If a dsh update changes it, `/plan <message>` with **New branch** chosen runs in the open New chat as dsh's own command. When the Host cannot turn on plan mode in the new chat, the branch folder stays and the message is not sent, so the new chat does not change files in the default mode.
217
- - **Branch per chat**: when a chat's branch folder (`<project>/.worktrees/<name>`) is deleted, for example when the chat's own agent removes the worktree and deletes the branch, the chat's next step moves the chat out of it. Its branch folder project goes from the sidebar, and the chat shows under Ungrouped and stays open. On dsh 0.2.1 and later the chat continues in the main project folder, and the model gets a note about the new folder. On dsh 0.2.0 the chat keeps the deleted folder: a command there fails until you start a new chat. The move happens only at the chat's next step, so a project of a deleted branch that no chat uses stays in the sidebar: remove it with dsh's own project menu. While a chat moves, **New branch** in the same repository answers "try again". With the switch off, dsh's own error shows again ("working-directory: directory does not exist").
217
+ - **Branch per chat**: when a chat's branch folder (`<project>/.worktrees/<name>`) is deleted, for example when the chat's own agent removes the worktree and deletes the branch, the chat's next step moves the chat out of it. Its branch folder project goes from the sidebar, and the chat shows under Ungrouped and stays open. On dsh 0.2.1 and later the chat continues in the main project folder, and the model gets a note about the new folder. On dsh 0.2.0 the chat keeps the deleted folder: a command there fails until you start a new chat. A project of a deleted branch that no chat uses also leaves the sidebar: Composer Plus checks the branch folders at start and every 30 seconds, also with no sidebar filter. While a chat moves, **New branch** in the same repository answers "try again". With the switch off, dsh's own error shows again ("working-directory: directory does not exist").
218
218
  - **Branches in the workspace tree** writes to git without a click: when it moves a chat, it switches the project folder back to its branch (`git switch`) and adds a worktree (`git worktree add`). It never deletes a branch, a worktree or a file. dsh cannot change the folder of a chat, so a moved chat is a copy (dsh's own fork, with a new id) and the old chat is archived. The copy continues the stopped task; a tool call that was running when the branch appeared ends with a refusal, and the agent runs it again in the new folder. A goal of the old chat does not move with it. Only a chat whose folder is the repository's main folder moves, and only for a branch that it created and switched to in that turn (`git switch -c`, `git checkout -b`): a branch made with `git branch` alone, a folder with uncommitted changes, a linked worktree or a subfolder moves nothing. Only worktrees directly in `<project>/.worktrees/` with a branch show in the tree; a detached worktree or one elsewhere does not. The copy opens by itself only when its chat was the open one (the plugin reads dsh's sidebar row for that); else it is in the branch project.
219
219
  - **Find in chat** searches only what the page shows: the messages and replies that are loaded (scroll up or click **Load earlier** for older ones), not tool steps that are closed and not the text inside a tool's output that is folded. It counts at most 2,000 matches (then "2000+"). It uses the browser's highlight API (Chromium 105 and later; the desktop app has it): in an older browser the count and the moves work without the color. `Cmd+F` on a Mac (`Ctrl+F` on Windows and Linux) opens it only while a chat is on screen; elsewhere the browser's own find works as before. On a Mac, `Ctrl+F` keeps its macOS use in text fields (the cursor moves one character forward).
220
220
  - **Open waiting chat when idle** knows only what dsh's own window sees: work in another app does not count, so while dsh is in the background it can open a waiting chat after 30 seconds. It does not bring dsh to the front. Reading without a key, a click or a mouse move counts as idle. It looks only at chats with dsh's orange dot (a question, an approval or a plan review); a subagent's request shows in its parent chat. Nothing opens while a waiting chat is on screen; a chat that you left without an answer can open again after the next 30 seconds without use. The 30 seconds cannot be changed.
package/README.pt-BR.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Depois, reinicie o dsh. (A CLI não consegue instalar no perfil desktop; quem gerencia esse perfil é o app.)
31
31
 
32
- > O pnpm do dsh ignora versões publicadas há menos de 24 horas. Logo depois de uma nova versão, informe a versão: `dsh-composer-plus@1.16.0`.
32
+ > O pnpm do dsh ignora versões publicadas há menos de 24 horas. Logo depois de uma nova versão, informe a versão: `dsh-composer-plus@1.16.1`.
33
33
 
34
34
  ## Recursos
35
35
 
@@ -182,7 +182,7 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
182
182
  - **Nenhuma etiqueta de branch em uma linha de chat:** o chat não teve nenhum turno desde que você instalou esta versão, a pasta dele não é um repositório git, ou **Branch do Git nas linhas de chat** está desativado. Depois de uma atualização, reinicie o dsh (a parte Host registra o branch).
183
183
  - **Verificação da meta diz que o teste saiu com o código 127 ou "not found":** o dsh iniciado pelo Finder ou pelo Dock pode ter um PATH mais curto que o do seu terminal, então ele não encontra `npm`, `pnpm` ou `cargo`. Inicie o dsh a partir de um terminal ou defina o seu próprio comando de teste com o caminho completo em **Verificação da meta** → **Editar**. **Executar agora** mostra o resultado na hora.
184
184
  - **A meta não fecha e o agente continua trabalhando:** **Verificação da meta** encontrou um teste com falha ou trabalho faltando; a linha abaixo da meta mostra o motivo (passe o mouse sobre o resultado para ver os detalhes). Corrija a causa ou o comando de teste, ou conclua a meta você mesmo com `/goal` ou com a barra da meta (isso não é verificado).
185
- - **A instalação falha logo depois de uma nova versão:** informe a versão (`dsh-composer-plus@1.16.0`); veja a nota de instalação acima.
185
+ - **A instalação falha logo depois de uma nova versão:** informe a versão (`dsh-composer-plus@1.16.1`); veja a nota de instalação acima.
186
186
  - **Fazer backup agora diz "Outra ação de backup está em andamento":** uma ação está em execução em outra janela do dsh ou no console de resgate (eles compartilham um arquivo de bloqueio, `.composer-plus.lock`, na pasta de backups). Aguarde até ela terminar. Se nenhuma ação estiver em execução, o próximo clique assume o bloqueio de um processo encerrado.
187
187
  - **O console de resgate diz "dsh is running":** feche o dsh primeiro. Se o dsh estiver mesmo fechado, o arquivo citado na mensagem sobrou de uma falha: remova-o e tente de novo.
188
188
  - **Depois de uma restauração, o dsh não inicia ou falta um plugin:** os pacotes de plugin de um perfil precisam ser instalados de novo. O console de resgate oferece isso depois de uma restauração; ou execute `pnpm install` em cada pasta de `$DSH_HOME/profiles/` que ele listar. Os segredos que não estavam no vault (outro computador) precisam ser informados de novo: o console os lista.
@@ -216,7 +216,7 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
216
216
  - **Chats que alteraram este arquivo** só conhece as ferramentas de arquivo do dsh (`write`, `edit`, `str_replace_editor`), como **Este chat**: uma alteração feita por um comando (`bash`) não aparece na lista. Ele lê os 300 chats mais recentes do repositório (pela data de criação) e avisa quando há mais; mostra no máximo 100 linhas. Um arquivo renomeado aparece com o nome que a ferramenta escreveu. Um chat cuja pasta fica fora do repositório (também por outro caminho para os mesmos arquivos) não é contado. A primeira abertura depois de iniciar o dsh lê todos os registros de chat do repositório (cerca de 4 s para 275 chats); as aberturas seguintes leem só os chats que mudaram desde então.
217
217
  - **Branch do Git nas linhas de chat** mostra o branch da pasta do chat quando o último turno dele começou ou terminou, não o branch atual: uma troca de branch fora de um turno aparece depois do próximo turno. Chats de antes desta versão não mostram etiqueta até o próximo turno. A etiqueta fica na marcação das linhas de chat do dsh (o dsh não tem um espaço ali); se uma atualização do dsh mudar essa marcação, nenhuma etiqueta aparece. Se a linha de projeto acima do chat tem o mesmo nome do branch (por exemplo, uma pasta de “Um branch por chat”), a linha do chat não mostra a etiqueta, mas “Em uma única lista” ainda a mostra.
218
218
  - **Um branch por chat** no modo de plano: o dsh envia `/plan <mensagem>` como comando, não como mensagem, então o Composer Plus intercepta o envio do comando no editor de mensagens do dsh (não é uma API pública). Se uma atualização do dsh mudar isso, `/plan <mensagem>` com **Novo branch** escolhido roda no Novo chat aberto como comando do próprio dsh. Quando o Host não consegue ativar o modo de plano no novo chat, a pasta do branch fica e a mensagem não é enviada, então o novo chat não altera arquivos no modo padrão.
219
- - **Um branch por chat**: quando a pasta do branch de um chat (`<project>/.worktrees/<name>`) é excluída, por exemplo quando o próprio agente do chat remove o worktree e exclui o branch, o próximo passo do chat tira o chat dessa pasta. O projeto da pasta do branch sai da barra lateral, e o chat aparece em Sem grupo e continua aberto. No dsh 0.2.1 e posteriores, o chat continua na pasta principal do projeto, e o modelo recebe uma nota sobre a nova pasta. No dsh 0.2.0, o chat mantém a pasta excluída: um comando nela falha até você começar um novo chat. A mudança acontece só no próximo passo do chat, então o projeto de um branch excluído que nenhum chat usa fica na barra lateral: remova-o com o menu de projeto do próprio dsh. Enquanto um chat é movido, **Novo branch** no mesmo repositório responde "tente de novo". Com a chave desligada, o erro do próprio dsh volta a aparecer ("working-directory: directory does not exist").
219
+ - **Um branch por chat**: quando a pasta do branch de um chat (`<project>/.worktrees/<name>`) é excluída, por exemplo quando o próprio agente do chat remove o worktree e exclui o branch, o próximo passo do chat tira o chat dessa pasta. O projeto da pasta do branch sai da barra lateral, e o chat aparece em Sem grupo e continua aberto. No dsh 0.2.1 e posteriores, o chat continua na pasta principal do projeto, e o modelo recebe uma nota sobre a nova pasta. No dsh 0.2.0, o chat mantém a pasta excluída: um comando nela falha até você começar um novo chat. O projeto de um branch excluído que nenhum chat usa também sai da barra lateral: o Composer Plus verifica as pastas de branch ao iniciar e a cada 30 segundos, também sem filtro da barra lateral. Enquanto um chat é movido, **Novo branch** no mesmo repositório responde "tente de novo". Com a chave desligada, o erro do próprio dsh volta a aparecer ("working-directory: directory does not exist").
220
220
  - **Branches na árvore de workspaces** escreve no git sem um clique: quando move um chat, volta a pasta do projeto para o branch anterior (`git switch`) e adiciona um worktree (`git worktree add`). Nunca apaga um branch, um worktree ou um arquivo. O dsh não pode mudar a pasta de um chat, então um chat movido é uma cópia (o fork do próprio dsh, com um id novo) e o chat antigo é arquivado. A cópia continua a tarefa parada; uma chamada de ferramenta que rodava quando o branch apareceu termina com uma recusa, e o agente a roda de novo na pasta nova. Um objetivo do chat antigo não vai junto. Só se move um chat cuja pasta é a pasta principal do repositório, e só por um branch que ele criou e para o qual mudou naquele turno (`git switch -c`, `git checkout -b`): um branch feito só com `git branch`, uma pasta com alterações não commitadas, um worktree vinculado ou uma subpasta não movem nada. Na árvore só aparecem worktrees diretamente em `<project>/.worktrees/` com um branch; um worktree desanexado (detached) ou em outro lugar não aparece. A cópia abre sozinha só quando o chat dela era o aberto (o plugin lê isso da linha da barra lateral do dsh); senão, ela está no projeto do branch.
221
221
  - **Buscar no chat** busca só no que a página mostra: as mensagens e respostas carregadas (role para cima ou clique em **Carregar anteriores** para ver as mais antigas), não as etapas de ferramenta fechadas nem o texto recolhido dentro da saída de uma ferramenta. Ele conta no máximo 2.000 ocorrências (depois, "2000+"). Ele usa a API de destaque do navegador (Chromium 105 ou mais recente; o app para desktop tem): em um navegador mais antigo, a contagem e os saltos funcionam sem a cor. `Cmd+F` no Mac (`Ctrl+F` no Windows e no Linux) só o abre enquanto há um chat na tela; em outros lugares, a busca do próprio navegador funciona como antes. No Mac, `Ctrl+F` mantém seu uso do macOS nos campos de texto (o cursor avança um caractere).
222
222
  - **Abrir o chat em espera quando ocioso** conhece só o que a janela do dsh vê: o trabalho em outro app não conta, então, com o dsh em segundo plano, ele pode abrir um chat em espera após 30 segundos. Ele não traz o dsh para a frente. Ler sem tocar em uma tecla, clicar ou mover o mouse conta como ocioso. Ele olha só os chats com o ponto laranja do dsh (uma pergunta, uma aprovação ou uma revisão do plano); o pedido de um subagente aparece no chat principal dele. Enquanto um chat em espera está na tela, nenhum outro abre; um chat que você deixou sem responder pode abrir de novo depois dos próximos 30 segundos sem uso. Os 30 segundos não podem ser alterados.
package/README.ru.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Затем перезапустите dsh. (CLI не может устанавливать плагины в профиль настольного приложения: им управляет само приложение.)
31
31
 
32
- > pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.16.0`.
32
+ > pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.16.1`.
33
33
 
34
34
  ## Функции
35
35
 
@@ -182,7 +182,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
182
182
  - **На строке чата нет метки ветки:** у чата не было хода с момента установки этой версии, его папка не является репозиторием git, или функция **Ветка Git в строках чатов** выключена. После обновления перезапустите dsh (ветку записывает Host-часть).
183
183
  - **Проверка цели сообщает, что тест завершился с кодом 127 или «not found»:** у dsh, запущенного из Finder или Dock, PATH может быть короче, чем в вашем терминале, поэтому он не находит `npm`, `pnpm` или `cargo`. Запустите dsh из терминала или задайте свою тестовую команду с полным путём в **Проверка цели** → **Изменить**. **Запустить сейчас** сразу показывает результат.
184
184
  - **Цель не закрывается, и агент продолжает работать:** **Проверка цели** нашла непройденный тест или недоделанную работу; строка под целью показывает причину (наведите указатель на результат, чтобы увидеть подробности). Исправьте причину или тестовую команду либо завершите цель сами командой `/goal` или через панель цели (это не проверяется).
185
- - **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.16.0`), см. примечание об установке выше.
185
+ - **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.16.1`), см. примечание об установке выше.
186
186
  - **Кнопка «Создать копию сейчас» сообщает «Уже выполняется другое действие с резервными копиями»:** действие выполняется в другом окне dsh или в аварийной консоли (они используют общий файл блокировки `.composer-plus.lock` в папке резервных копий). Дождитесь его окончания. Если никакое действие не выполняется, блокировку закрытого процесса перехватит следующее нажатие.
187
187
  - **Аварийная консоль сообщает «dsh is running»:** сначала выйдите из dsh. Если dsh действительно закрыт, файл, названный в сообщении, остался после сбоя: удалите его и повторите попытку.
188
188
  - **После восстановления dsh не запускается или не хватает плагина:** пакеты плагинов профиля нужно установить заново. Аварийная консоль предлагает это после восстановления; или выполните `pnpm install` в каждой папке внутри `$DSH_HOME/profiles/`, которую она перечисляет. Секреты, которых не было в vault (другой компьютер), нужно ввести заново: консоль перечисляет их.
@@ -216,7 +216,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
216
216
  - **Чаты, которые изменили этот файл**, как и **Этот чат**, знают только файловые инструменты dsh (`write`, `edit`, `str_replace_editor`): изменение, сделанное командой (`bash`), в списке не появляется. Список читает 300 самых новых чатов репозитория (по времени создания) и сообщает, если их больше; он показывает не более 100 строк. Переименованный файл показан под тем именем, которое записал инструмент. Чат, папка которого находится вне репозитория (в том числе через другой путь к тем же файлам), не учитывается. Первое открытие после запуска dsh читает все журналы чатов репозитория (около 4 с для 275 чатов); последующие открытия читают только чаты, изменившиеся с тех пор.
217
217
  - **Ветка Git в строках чатов** показывает ветку папки чата на момент начала или конца его последнего хода, а не текущую ветку: переключение ветки вне хода появится после следующего хода. У чатов, созданных до этой версии, метки нет до их следующего хода. Метка встроена в разметку строк чатов dsh (в dsh нет для неё отдельного места); если обновление dsh изменит эту разметку, метка не появится. Если строка проекта над чатом называется так же, как ветка (например, папка «Ветка для каждого чата»), строка чата не показывает метку, но в режиме «Одним списком» метка по-прежнему видна.
218
218
  - **Ветка для каждого чата** в режиме плана: dsh отправляет `/plan <сообщение>` как команду, а не как сообщение, поэтому Composer Plus перехватывает отправку команды в поле ввода dsh (это не публичный API). Если обновление dsh это изменит, `/plan <сообщение>` при выбранном пункте **Новая ветка** выполнится на открытом экране нового чата как собственная команда dsh. Если Host не может включить режим плана в новом чате, папка ветки остаётся, а сообщение не отправляется, поэтому новый чат не меняет файлы в режиме по умолчанию.
219
- - **Ветка для каждого чата**: когда папка ветки чата (`<project>/.worktrees/<name>`) удалена, например когда агент самого чата удаляет worktree и ветку, следующий шаг чата выводит чат из этой папки. Проект папки ветки исчезает с боковой панели, а чат появляется в разделе «Без группы» и остаётся открытым. В dsh 0.2.1 и новее чат продолжается в основной папке проекта, и модель получает заметку о новой папке. В dsh 0.2.0 чат остаётся в удалённой папке: команда там завершается с ошибкой, пока вы не начнёте новый чат. Перенос происходит только на следующем шаге чата, поэтому проект удалённой ветки, который не использует ни один чат, остаётся на боковой панели: удалите его через меню проекта dsh. Пока чат переносится, **Новая ветка** в том же репозитории отвечает «попробуйте ещё раз». Если переключатель выключен, снова показывается собственная ошибка dsh («working-directory: directory does not exist»).
219
+ - **Ветка для каждого чата**: когда папка ветки чата (`<project>/.worktrees/<name>`) удалена, например когда агент самого чата удаляет worktree и ветку, следующий шаг чата выводит чат из этой папки. Проект папки ветки исчезает с боковой панели, а чат появляется в разделе «Без группы» и остаётся открытым. В dsh 0.2.1 и новее чат продолжается в основной папке проекта, и модель получает заметку о новой папке. В dsh 0.2.0 чат остаётся в удалённой папке: команда там завершается с ошибкой, пока вы не начнёте новый чат. Проект удалённой ветки, который не использует ни один чат, тоже исчезает с боковой панели: Composer Plus проверяет папки веток при запуске и каждые 30 секунд, также без фильтра боковой панели. Пока чат переносится, **Новая ветка** в том же репозитории отвечает «попробуйте ещё раз». Если переключатель выключен, снова показывается собственная ошибка dsh («working-directory: directory does not exist»).
220
220
  - **Ветки в дереве рабочих областей** пишет в git без клика: при переносе чата он возвращает папку проекта на прежнюю ветку (`git switch`) и добавляет worktree (`git worktree add`). Он никогда не удаляет ветку, worktree или файл. dsh не может сменить папку чата, поэтому перенесённый чат — это копия (собственный форк dsh с новым id), а старый чат архивируется. Копия продолжает остановленную задачу; вызов инструмента, который шёл в момент появления ветки, завершается отказом, и агент запускает его снова в новой папке. Цель старого чата не переносится. Переносится только чат, чья папка — главная папка репозитория, и только ради ветки, которую он создал и на которую переключился в этом ходе (`git switch -c`, `git checkout -b`): ветка, созданная только через `git branch`, папка с незакоммиченными изменениями, связанный worktree или подпапка ничего не переносят. В дереве показываются только worktree прямо в `<project>/.worktrees/` с веткой; отсоединённый (detached) worktree или worktree в другом месте не показывается. Копия открывается сама, только если её чат был открытым (плагин читает это из строки боковой панели dsh); иначе она находится в проекте ветки.
221
221
  - **Поиск в чате** ищет только в том, что показывает страница: в загруженных сообщениях и ответах (для более старых прокрутите вверх или нажмите **Загрузить более ранние**), но не в закрытых шагах инструментов и не в свёрнутом тексте вывода инструмента. Он считает не более 2 000 совпадений (дальше — «2000+»). Он использует API подсветки браузера (Chromium 105 и новее; в настольном приложении он есть): в более старом браузере счётчик и переходы работают без цвета. `Cmd+F` на Mac (`Ctrl+F` в Windows и Linux) открывает его, только пока на экране есть чат; в других местах встроенный поиск браузера работает как раньше. На Mac `Ctrl+F` сохраняет своё действие macOS в текстовых полях (курсор сдвигается на один символ вперёд).
222
222
  - **Открывать ожидающий чат при бездействии** знает только то, что видит окно dsh: работа в другом приложении не считается, поэтому, когда dsh в фоне, функция может открыть ожидающий чат через 30 секунд. Окно dsh при этом не выходит на передний план. Чтение без нажатия клавиш, щелчков и движений мыши считается бездействием. Функция смотрит только на чаты с оранжевой точкой dsh (вопрос, одобрение или проверка плана); запрос субагента показывается в его родительском чате. Пока ожидающий чат на экране, другой не открывается; чат, из которого вы ушли без ответа, может открыться снова после следующих 30 секунд бездействия. 30 секунд изменить нельзя.
package/README.tr.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz; bu profili uygulama yönetir.)
31
31
 
32
- > dsh’nin pnpm’i, yayımlanmasının üzerinden 24 saat geçmemiş sürümleri atlar. Bir yayından hemen sonra sürümü ekleyin: `dsh-composer-plus@1.16.0`.
32
+ > dsh’nin pnpm’i, yayımlanmasının üzerinden 24 saat geçmemiş sürümleri atlar. Bir yayından hemen sonra sürümü ekleyin: `dsh-composer-plus@1.16.1`.
33
33
 
34
34
  ## Özellikler
35
35
 
@@ -182,7 +182,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
182
182
  - **Bir sohbet satırında dal etiketi yok:** bu sürümü yüklediğinizden beri sohbette hiç tur olmadı, sohbetin klasörü bir git deposu değil ya da **Sohbet satırlarında Git dalı** kapalı. Bir güncellemeden sonra dsh’yi yeniden başlatın (dalı Host tarafı kaydeder).
183
183
  - **Hedef kontrolü, testin 127 koduyla ya da "not found" ile çıktığını söylüyor:** Finder’dan veya Dock’tan başlatılan dsh’nin PATH’i terminalinizdekinden daha kısa olabilir. Bu yüzden dsh `npm`, `pnpm` veya `cargo` aracını bulamaz. dsh’yi bir terminalden başlatın ya da **Hedef kontrolü** → **Düzenle** içinde tam yolu olan kendi test komutunuzu belirleyin. **Şimdi çalıştır** sonucu hemen gösterir.
184
184
  - **Hedef kapanmıyor ve ajan çalışmaya devam ediyor:** **Hedef kontrolü** başarısız bir test ya da eksik bir iş buldu. Hedefin altındaki satır nedenini gösterir (ayrıntılar için imleci sonucun üzerine getirin). Nedeni ya da test komutunu düzeltin veya hedefi `/goal` ya da hedef çubuğuyla kendiniz tamamlayın (bu tamamlama kontrol edilmez).
185
- - **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.16.0`) ve yukarıdaki kurulum notuna bakın.
185
+ - **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.16.1`) ve yukarıdaki kurulum notuna bakın.
186
186
  - **Şimdi yedekle, "Başka bir yedekleme işlemi sürüyor" diyor:** başka bir dsh penceresinde ya da kurtarma konsolunda bir işlem çalışıyor (ikisi, yedek klasöründeki `.composer-plus.lock` kilit dosyasını paylaşır). İşlemin bitmesini bekleyin. Çalışan bir işlem yoksa, kapanmış bir sürecin kilidi bir sonraki tıklamada devralınır.
187
187
  - **Kurtarma konsolu "dsh is running" diyor:** önce dsh’den çıkın. dsh gerçekten kapalıysa mesajda adı geçen dosya bir çökmeden kalmıştır: dosyayı silin ve yeniden deneyin.
188
188
  - **Geri yüklemeden sonra dsh açılmıyor ya da bir eklenti eksik:** bir profilin eklenti paketlerinin yeniden yüklenmesi gerekir. Kurtarma konsolu bunu geri yüklemeden sonra önerir. Ya da konsolun listelediği, `$DSH_HOME/profiles/` altındaki her klasörde `pnpm install` komutunu çalıştırın. Vault’ta olmayan gizli bilgiler (başka bir bilgisayar) yeniden girilmelidir: konsol bunları listeler.
@@ -216,7 +216,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
216
216
  - **Bu dosyayı değiştiren sohbetler**, **Bu sohbet** gibi yalnızca dsh’nin dosya araçlarını (`write`, `edit`, `str_replace_editor`) tanır: bir komutun (`bash`) yaptığı değişiklik listelenmez. Deponun en yeni 300 sohbetini okur (oluşturulma zamanına göre) ve daha fazlası varsa bunu belirtir. En çok 100 satır gösterir. Yeniden adlandırılan bir dosya, aracın yazdığı adla listelenir. Klasörü deponun dışında olan bir sohbet (aynı dosyalara başka bir yoldan ulaşsa bile) sayılmaz. dsh açıldıktan sonraki ilk açılış, deponun tüm sohbet günlüklerini okur (275 sohbet için yaklaşık 4 sn). Sonraki açılışlar yalnızca o zamandan beri değişen sohbetleri okur.
217
217
  - **Sohbet satırlarında Git dalı**, şu anki dalı değil, sohbetin son turu başladığında ya da bittiğinde sohbetin klasörünün bulunduğu dalı gösterir: bir tur dışında yapılan dal değişikliği bir sonraki turdan sonra görünür. Bu sürümden önceki sohbetlerde bir sonraki turlarına kadar etiket görünmez. Etiket, dsh’nin sohbet satırı yapısına yerleşir (dsh’de orada bir yuva yoktur). Bir dsh güncellemesi bu yapıyı değiştirirse etiket görünmez. Sohbetin üstündeki proje satırının adı dalın adıyla aynıysa (örneğin bir “Sohbet başına dal” klasöründe), sohbet satırında dal etiketi görünmez; “Tek listede” görünümünde etiket yine görünür.
218
218
  - **Sohbet başına dal** plan modunda: dsh, `/plan <mesaj>` metnini mesaj olarak değil, komut olarak gönderir. Bu yüzden Composer Plus, komutun gönderilmesini dsh’nin mesaj alanında yakalar (herkese açık API değildir). Bir dsh güncellemesi bunu değiştirirse **Yeni dal** seçiliyken `/plan <mesaj>`, açık Yeni sohbet ekranında dsh’nin kendi komutu olarak çalışır. Host yeni sohbette plan modunu açamazsa dal klasörü kalır ve mesaj gönderilmez. Böylece yeni sohbet, varsayılan modda dosyaları değiştirmez.
219
- - **Sohbet başına dal**: bir sohbetin dal klasörü (`<project>/.worktrees/<name>`) silinince (örneğin sohbetin kendi ajanı worktree'yi kaldırıp dalı silince) sohbetin bir sonraki adımı sohbeti bu klasörden çıkarır. Dal klasörünün projesi kenar çubuğundan kalkar; sohbet Gruplanmamış altında görünür ve açık kalır. dsh 0.2.1 ve sonrasında sohbet ana proje klasöründe devam eder ve model yeni klasörü bildiren bir not alır. dsh 0.2.0'da sohbet silinen klasörde kalır: orada çalışan bir komut, yeni bir sohbet başlatana kadar hata verir. Taşıma yalnız sohbetin bir sonraki adımında olur. Bu yüzden hiçbir sohbetin kullanmadığı, silinmiş bir dalın projesi kenar çubuğunda kalır: onu dsh'nin kendi proje menüsüyle kaldırın. Bir sohbet taşınırken aynı depodaki **Yeni dal** "yeniden deneyin" yanıtını verir. Anahtar kapalıyken dsh'nin kendi hatası yine görünür ("working-directory: directory does not exist").
219
+ - **Sohbet başına dal**: bir sohbetin dal klasörü (`<project>/.worktrees/<name>`) silinince (örneğin sohbetin kendi ajanı worktree'yi kaldırıp dalı silince) sohbetin bir sonraki adımı sohbeti bu klasörden çıkarır. Dal klasörünün projesi kenar çubuğundan kalkar; sohbet Gruplanmamış altında görünür ve açık kalır. dsh 0.2.1 ve sonrasında sohbet ana proje klasöründe devam eder ve model yeni klasörü bildiren bir not alır. dsh 0.2.0'da sohbet silinen klasörde kalır: orada çalışan bir komut, yeni bir sohbet başlatana kadar hata verir. Hiçbir sohbetin kullanmadığı, silinmiş bir dalın projesi de kenar çubuğundan kalkar: Composer Plus dal klasörlerini açılışta ve 30 saniyede bir denetler. Bunun için kenar çubuğu filtresi gerekmez. Bir sohbet taşınırken aynı depodaki **Yeni dal** "yeniden deneyin" yanıtını verir. Anahtar kapalıyken dsh'nin kendi hatası yine görünür ("working-directory: directory does not exist").
220
220
  - **Çalışma alanı ağacında dallar** tıklama olmadan git’e yazar: bir sohbeti taşırken proje klasörünü önceki dalına geri alır (`git switch`) ve bir worktree ekler (`git worktree add`). Hiçbir dalı, worktree’yi veya dosyayı silmez. dsh bir sohbetin klasörünü değiştiremez. Bu yüzden taşınan sohbet bir kopyadır (dsh’nin kendi çatallaması, yeni bir kimlikle) ve eski sohbet arşivlenir. Kopya, durdurulan işe devam eder. Dal ortaya çıktığında çalışan araç çağrısı reddedilerek biter ve ajan onu yeni klasörde yeniden çalıştırır. Eski sohbetin hedefi kopyaya geçmez. Yalnızca klasörü deponun ana klasörü olan sohbet taşınır. Bu da yalnızca o turda oluşturup geçtiği dal için olur (`git switch -c`, `git checkout -b`). Yalnızca `git branch` ile yapılan dal, commit edilmemiş değişikliği olan klasör, bağlı bir worktree veya alt klasör hiçbir şeyi taşımaz. Ağaçta yalnızca doğrudan `<project>/.worktrees/` içinde olan ve dalı olan worktree’ler görünür. Ayrık (detached) bir worktree veya başka yerdeki bir worktree görünmez. Kopya, yalnızca eski sohbet açık olan sohbetse kendiliğinden açılır (eklenti bunu dsh’nin kenar çubuğu satırından okur). Aksi halde kopya dal projesindedir.
221
221
  - **Sohbette bul** yalnızca sayfanın gösterdiği içerikte arar: yüklenmiş mesajlarda ve yanıtlarda arar (eskiler için yukarı kaydırın ya da **Öncekileri yükle** düğmesine tıklayın). Kapalı araç adımlarında ve bir aracın daraltılmış çıktısındaki metinde aramaz. En çok 2.000 eşleşme sayar (sonra "2000+" gösterir). Tarayıcının vurgulama API’sini kullanır (Chromium 105 ve sonrası; masaüstü uygulamasında vardır): daha eski bir tarayıcıda sayı ve eşleşmeler arası geçiş çalışır, ama renk görünmez. Mac’te `Cmd+F`, Windows ve Linux’ta `Ctrl+F` kutuyu yalnızca ekranda bir sohbet varken açar. Mac’te `Ctrl+F`, metin alanlarındaki macOS görevini korur (imleci bir karakter ileri alır). Başka yerlerde tarayıcının kendi arama özelliği eskisi gibi çalışır.
222
222
  - **Boştayken bekleyen sohbeti aç** yalnızca dsh penceresinin gördüğü etkinliği bilir: başka bir uygulamadaki çalışma sayılmaz. Bu yüzden dsh arka plandayken bekleyen bir sohbeti 30 saniye sonra açabilir. dsh'yi öne getirmez. Tuşa basmadan, tıklamadan veya fareyi oynatmadan okumak boşta sayılır. Yalnızca dsh'nin turuncu noktasını taşıyan sohbetlere bakar (soru, onay veya plan incelemesi); bir alt ajanın isteği üst sohbetinde görünür. Bekleyen bir sohbet ekrandayken başka sohbet açılmaz; yanıt vermeden ayrıldığınız sohbet bir sonraki 30 saniyelik boşlukta yeniden açılabilir. 30 saniye değiştirilemez.
package/README.vi.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Sau đó khởi động lại dsh. (CLI không cài được vào profile desktop; ứng dụng tự quản lý profile này.)
31
31
 
32
- > pnpm của dsh bỏ qua các phiên bản ra mắt chưa đủ 24 giờ. Ngay sau một bản phát hành, hãy thêm số phiên bản: `dsh-composer-plus@1.16.0`.
32
+ > pnpm của dsh bỏ qua các phiên bản ra mắt chưa đủ 24 giờ. Ngay sau một bản phát hành, hãy thêm số phiên bản: `dsh-composer-plus@1.16.1`.
33
33
 
34
34
  ## Tính năng
35
35
 
@@ -182,7 +182,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
182
182
  - **Dòng cuộc trò chuyện không có nhãn branch:** cuộc trò chuyện chưa có lượt nào kể từ khi bạn cài phiên bản này, thư mục của nó không phải repository git, hoặc **Branch Git trên dòng cuộc trò chuyện** đang tắt. Sau khi cập nhật, hãy khởi động lại dsh (phần Host ghi lại branch).
183
183
  - **Kiểm tra mục tiêu báo bài kiểm thử thoát với mã 127 hoặc "not found":** dsh khởi động từ Finder hoặc Dock có thể có PATH ngắn hơn terminal của bạn, nên không tìm thấy `npm`, `pnpm` hoặc `cargo`. Hãy khởi động dsh từ terminal, hoặc đặt lệnh kiểm thử của riêng bạn với đường dẫn đầy đủ trong **Kiểm tra mục tiêu** → **Sửa**. **Chạy ngay** hiện kết quả ngay lập tức.
184
184
  - **Mục tiêu không đóng và tác tử tiếp tục làm việc:** **Kiểm tra mục tiêu** đã tìm thấy một bài kiểm thử thất bại hoặc phần việc còn thiếu; dòng bên dưới mục tiêu cho biết lý do (di chuột lên kết quả để xem chi tiết). Hãy sửa nguyên nhân hoặc lệnh kiểm thử, hoặc tự hoàn tất mục tiêu bằng `/goal` hoặc thanh mục tiêu (việc này không được kiểm tra).
185
- - **Cài đặt thất bại ngay sau một bản phát hành:** thêm số phiên bản (`dsh-composer-plus@1.16.0`), xem ghi chú cài đặt ở trên.
185
+ - **Cài đặt thất bại ngay sau một bản phát hành:** thêm số phiên bản (`dsh-composer-plus@1.16.1`), xem ghi chú cài đặt ở trên.
186
186
  - **Sao lưu ngay báo "Một thao tác sao lưu khác đang chạy":** một thao tác đang chạy trong cửa sổ dsh khác hoặc trong bảng điều khiển cứu hộ (chúng dùng chung tệp khóa `.composer-plus.lock` trong thư mục sao lưu). Hãy chờ thao tác đó xong. Nếu không có thao tác nào đang chạy, khóa của tiến trình đã đóng sẽ được tiếp quản ở lần nhấp tiếp theo.
187
187
  - **Bảng điều khiển cứu hộ báo "dsh is running":** trước tiên hãy thoát dsh. Nếu dsh thật sự đã đóng, tệp được nêu trong thông báo là phần còn sót lại sau một sự cố: hãy xóa tệp đó rồi thử lại.
188
188
  - **Sau khi khôi phục, dsh không khởi động hoặc thiếu một plugin:** cần cài lại các gói plugin của profile. Bảng điều khiển cứu hộ đề nghị việc này sau khi khôi phục; hoặc chạy `pnpm install` trong từng thư mục dưới `$DSH_HOME/profiles/` mà nó liệt kê. Các thông tin bí mật không có trong vault (máy tính khác) phải được nhập lại: bảng điều khiển liệt kê chúng.
@@ -216,7 +216,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
216
216
  - **Các cuộc trò chuyện đã thay đổi tệp này** chỉ biết các công cụ tệp của dsh (`write`, `edit`, `str_replace_editor`), giống **Cuộc trò chuyện này**: thay đổi do một lệnh (`bash`) tạo ra không được liệt kê. Tính năng đọc 300 cuộc trò chuyện mới nhất của repository (theo thời điểm tạo) và báo khi có nhiều hơn; tính năng hiển thị tối đa 100 dòng. Tệp đã đổi tên được liệt kê theo tên mà công cụ đã ghi. Cuộc trò chuyện có thư mục nằm ngoài repository (kể cả qua một đường dẫn khác tới cùng các tệp) không được tính. Lần mở đầu tiên sau khi khởi động dsh sẽ đọc mọi nhật ký trò chuyện của repository (khoảng 4 giây cho 275 cuộc trò chuyện); các lần mở sau chỉ đọc những cuộc trò chuyện đã thay đổi từ đó.
217
217
  - **Branch Git trên dòng cuộc trò chuyện** hiển thị branch của thư mục cuộc trò chuyện khi lượt cuối của nó bắt đầu hoặc kết thúc, không phải branch hiện tại: việc chuyển branch bên ngoài một lượt sẽ hiện sau lượt tiếp theo. Các cuộc trò chuyện từ trước phiên bản này không có nhãn cho đến lượt tiếp theo của chúng. Nhãn nằm trong markup dòng cuộc trò chuyện của dsh (dsh không có vị trí dành cho nó ở đó); nếu một bản cập nhật dsh thay đổi markup đó, nhãn không hiện. Nếu dòng dự án phía trên cuộc trò chuyện có cùng tên với branch (ví dụ thư mục của “Branch riêng cho từng cuộc trò chuyện”), dòng cuộc trò chuyện không hiển thị nhãn, nhưng “Trong một danh sách” vẫn hiển thị nhãn.
218
218
  - **Branch riêng cho từng cuộc trò chuyện** ở chế độ kế hoạch: dsh gửi `/plan <tin nhắn>` như một lệnh, không phải một tin nhắn, nên Composer Plus chặn thao tác gửi lệnh đó trong ô nhập của dsh (không phải API công khai). Nếu một bản cập nhật dsh thay đổi điều này, `/plan <tin nhắn>` khi đã chọn **Branch mới** sẽ chạy trong Cuộc trò chuyện mới đang mở như lệnh riêng của dsh. Khi Host không thể bật chế độ kế hoạch trong cuộc trò chuyện mới, thư mục branch vẫn còn và tin nhắn không được gửi, nên cuộc trò chuyện mới không thay đổi tệp ở chế độ mặc định.
219
- - **Branch riêng cho từng cuộc trò chuyện**: khi thư mục branch của một cuộc trò chuyện (`<project>/.worktrees/<name>`) bị xóa, ví dụ khi chính agent của cuộc trò chuyện gỡ worktree và xóa branch, bước tiếp theo của cuộc trò chuyện sẽ chuyển cuộc trò chuyện ra khỏi thư mục đó. Dự án của thư mục branch biến mất khỏi thanh bên, còn cuộc trò chuyện hiển thị dưới Chưa nhóm và vẫn mở. Trên dsh 0.2.1 trở lên, cuộc trò chuyện tiếp tục trong thư mục chính của dự án, và mô hình nhận được một ghi chú về thư mục mới. Trên dsh 0.2.0, cuộc trò chuyện vẫn giữ thư mục đã xóa: lệnh chạy ở đó sẽ lỗi cho đến khi bạn bắt đầu cuộc trò chuyện mới. Việc chuyển chỉ xảy ra ở bước tiếp theo của cuộc trò chuyện, nên dự án của một branch đã xóa mà không cuộc trò chuyện nào dùng vẫn ở lại thanh bên: hãy gỡ nó bằng menu dự án của dsh. Trong lúc một cuộc trò chuyện đang được chuyển, **Branch mới** trong cùng kho mã sẽ trả lời "hãy thử lại". Khi tắt công tắc, lỗi của chính dsh lại hiện ra ("working-directory: directory does not exist").
219
+ - **Branch riêng cho từng cuộc trò chuyện**: khi thư mục branch của một cuộc trò chuyện (`<project>/.worktrees/<name>`) bị xóa, ví dụ khi chính agent của cuộc trò chuyện gỡ worktree và xóa branch, bước tiếp theo của cuộc trò chuyện sẽ chuyển cuộc trò chuyện ra khỏi thư mục đó. Dự án của thư mục branch biến mất khỏi thanh bên, còn cuộc trò chuyện hiển thị dưới Chưa nhóm và vẫn mở. Trên dsh 0.2.1 trở lên, cuộc trò chuyện tiếp tục trong thư mục chính của dự án, và mô hình nhận được một ghi chú về thư mục mới. Trên dsh 0.2.0, cuộc trò chuyện vẫn giữ thư mục đã xóa: lệnh chạy ở đó sẽ lỗi cho đến khi bạn bắt đầu cuộc trò chuyện mới. Dự án của một branch đã xóa mà không cuộc trò chuyện nào dùng cũng biến mất khỏi thanh bên: Composer Plus kiểm tra các thư mục branch khi khởi động và mỗi 30 giây, kể cả khi không có bộ lọc thanh bên. Trong lúc một cuộc trò chuyện đang được chuyển, **Branch mới** trong cùng kho mã sẽ trả lời "hãy thử lại". Khi tắt công tắc, lỗi của chính dsh lại hiện ra ("working-directory: directory does not exist").
220
220
  - **Branch trong cây không gian làm việc** ghi vào git mà không cần nhấp: khi chuyển một cuộc trò chuyện, nó đưa thư mục dự án về branch trước đó (`git switch`) và thêm một worktree (`git worktree add`). Nó không bao giờ xóa branch, worktree hay tệp. dsh không thể đổi thư mục của một cuộc trò chuyện, nên cuộc trò chuyện được chuyển là một bản sao (fork của chính dsh, với id mới) và cuộc trò chuyện cũ được lưu trữ. Bản sao tiếp tục công việc đã dừng; lệnh gọi công cụ đang chạy khi branch xuất hiện kết thúc bằng một lời từ chối, và agent chạy lại nó trong thư mục mới. Mục tiêu của cuộc trò chuyện cũ không đi theo. Chỉ cuộc trò chuyện có thư mục là thư mục chính của kho mới được chuyển, và chỉ với branch mà nó đã tạo và chuyển sang trong lượt đó (`git switch -c`, `git checkout -b`): branch chỉ tạo bằng `git branch`, thư mục có thay đổi chưa commit, worktree được liên kết hoặc thư mục con đều không chuyển gì. Trong cây chỉ hiện các worktree nằm trực tiếp trong `<project>/.worktrees/` và có branch; worktree tách rời (detached) hoặc ở nơi khác thì không hiện. Bản sao chỉ tự mở khi cuộc trò chuyện của nó là cuộc trò chuyện đang mở (plugin đọc điều này từ hàng thanh bên của dsh); nếu không, nó nằm trong dự án của branch.
221
221
  - **Tìm trong cuộc trò chuyện** chỉ tìm trong những gì trang hiển thị: các tin nhắn và câu trả lời đã được tải (cuộn lên hoặc nhấp **Tải cũ hơn** để xem các tin cũ hơn), không tìm trong các bước công cụ đang đóng và không tìm trong văn bản bị thu gọn bên trong đầu ra của công cụ. Tính năng đếm tối đa 2.000 kết quả khớp (sau đó là "2000+"). Tính năng dùng API tô sáng của trình duyệt (Chromium 105 trở lên; ứng dụng máy tính có API này): trong trình duyệt cũ hơn, số đếm và việc di chuyển vẫn hoạt động nhưng không có màu. `Cmd+F` trên Mac (`Ctrl+F` trên Windows và Linux) chỉ mở tính năng khi có một cuộc trò chuyện trên màn hình; ở nơi khác, chức năng tìm của chính trình duyệt vẫn hoạt động như trước. Trên Mac, `Ctrl+F` vẫn giữ chức năng của macOS trong ô văn bản (con trỏ tiến lên một ký tự).
222
222
  - **Mở cuộc trò chuyện đang chờ khi không hoạt động** chỉ biết những gì cửa sổ dsh thấy: làm việc trong ứng dụng khác không được tính, nên khi dsh chạy nền, tính năng có thể mở một cuộc trò chuyện đang chờ sau 30 giây. dsh không được đưa lên trước. Chỉ đọc mà không bấm phím, nhấp hay di chuột được tính là không hoạt động. Tính năng chỉ xét các cuộc trò chuyện có chấm cam của dsh (câu hỏi, phê duyệt hoặc xem xét kế hoạch); yêu cầu của subagent hiện trong cuộc trò chuyện cha của nó. Khi một cuộc trò chuyện đang chờ ở trên màn hình, không mở cuộc khác; cuộc trò chuyện bạn rời đi mà chưa trả lời có thể mở lại sau 30 giây không dùng tiếp theo. Không thể thay đổi 30 giây.
package/README.zh.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  然后重启 dsh。(CLI 无法安装到桌面版 profile 中;桌面版 profile 由应用自己管理。)
31
31
 
32
- > dsh 使用的 pnpm 会跳过发布不到 24 小时的版本。刚发布新版本时,请加上版本号:`dsh-composer-plus@1.16.0`。
32
+ > dsh 使用的 pnpm 会跳过发布不到 24 小时的版本。刚发布新版本时,请加上版本号:`dsh-composer-plus@1.16.1`。
33
33
 
34
34
  ## 功能
35
35
 
@@ -182,7 +182,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
182
182
  - **对话行上没有分支标签:** 安装此版本后,该对话还没有新的一轮;或者它的文件夹不是 git 仓库;或者 **对话行显示 Git 分支** 已关闭。更新后,请重启 dsh(分支由 Host 端记录)。
183
183
  - **目标检查显示测试以代码 127 或 “not found” 退出:** 从 Finder 或程序坞启动的 dsh 的 PATH 可能比终端里的短,因此找不到 `npm`、`pnpm` 或 `cargo`。请从终端启动 dsh,或者在 **目标检查** → **编辑** 中用完整路径设置你自己的测试命令。**立即运行** 会马上显示结果。
184
184
  - **目标没有关闭,智能体一直在工作:** **目标检查** 发现了失败的测试或缺少的工作;目标下方的一行会显示原因(将鼠标悬停在结果上可查看详情)。请修正原因或测试命令,或者用 `/goal` 或目标栏自己完成目标(这不会被检查)。
185
- - **刚发布新版本时安装失败:** 请加上版本号(`dsh-composer-plus@1.16.0`),见上文的安装说明。
185
+ - **刚发布新版本时安装失败:** 请加上版本号(`dsh-composer-plus@1.16.1`),见上文的安装说明。
186
186
  - **立即备份显示“另一个备份操作正在进行”:** 另一个 dsh 窗口或救援控制台中正在运行一个操作(它们共用备份文件夹中的锁文件 `.composer-plus.lock`)。请等待它完成。如果没有操作在运行,下次点击时会接管已关闭进程留下的锁。
187
187
  - **救援控制台显示“dsh is running”:** 请先退出 dsh。如果 dsh 确实已关闭,消息中提到的文件是崩溃后留下的:删除它,然后重试。
188
188
  - **恢复后 dsh 无法启动或缺少插件:** 需要重新安装 profile 的插件包。恢复后,救援控制台会提供这一步;你也可以在它列出的 `$DSH_HOME/profiles/` 下的每个文件夹中运行 `pnpm install`。不在 vault 中的机密(另一台电脑)必须重新输入:控制台会列出它们。
@@ -216,7 +216,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
216
216
  - **改动此文件的对话** 与 **本对话** 一样,只识别 dsh 的文件工具(`write`、`edit`、`str_replace_editor`):命令(`bash`)做出的改动不会列出。它读取该仓库最新的 300 个对话(按创建时间),对话更多时会给出提示;它最多显示 100 行。重命名的文件按工具写入时的名称列出。文件夹在仓库之外的对话(包括通过另一条路径指向相同文件的情况)不计入。dsh 启动后第一次打开时,会读取该仓库的所有对话日志(275 个对话约需 4 秒);之后再打开时,只读取此后有变化的对话。
217
217
  - **对话行显示 Git 分支** 显示的是对话最后一轮开始或结束时其文件夹所在的分支,而不是当前的分支:在回合之外切换分支,要到下一轮之后才会显示。此版本之前的对话,在下一轮之前不显示标签。标签放在 dsh 的对话行标记中(dsh 在那里没有插槽);如果 dsh 更新改变了这部分标记,就不会显示标签。当对话上方的项目行与分支同名时(例如“每个对话一个分支”的文件夹),该对话行不显示分支标签,但“列表视图”中仍会显示。
218
218
  - **每个对话一个分支** 在计划模式下:dsh 把 `/plan <消息>` 作为命令而不是消息发送,因此 Composer Plus 会在 dsh 的输入框中接管该命令的提交(不是公开 API)。如果 dsh 更新改变了这一点,选择 **新分支** 时的 `/plan <消息>` 会在已打开的新对话中作为 dsh 自己的命令运行。当 Host 无法在新对话中开启计划模式时,分支文件夹会保留,消息不会发送,因此新对话不会在默认模式下修改文件。
219
- - **每个对话一个分支**:当对话的分支文件夹(`<project>/.worktrees/<name>`)被删除时(例如对话自己的智能体移除了 worktree 并删除了分支),对话的下一步会把对话移出该文件夹。它的分支文件夹项目会从侧边栏消失,对话显示在“未分组”下并保持打开。在 dsh 0.2.1 及更高版本中,对话在主项目文件夹中继续,模型会收到一条关于新文件夹的说明。在 dsh 0.2.0 上,对话保留已删除的文件夹:在那里运行的命令会失败,直到你开始一个新对话。移动只在对话的下一步发生,因此没有对话使用的已删除分支的项目会留在侧边栏中:请用 dsh 自己的项目菜单移除它。对话移动期间,同一仓库中的**新分支**会回答“请重试”。关闭开关后,dsh 自己的错误会再次出现(“working-directory: directory does not exist”)。
219
+ - **每个对话一个分支**:当对话的分支文件夹(`<project>/.worktrees/<name>`)被删除时(例如对话自己的智能体移除了 worktree 并删除了分支),对话的下一步会把对话移出该文件夹。它的分支文件夹项目会从侧边栏消失,对话显示在“未分组”下并保持打开。在 dsh 0.2.1 及更高版本中,对话在主项目文件夹中继续,模型会收到一条关于新文件夹的说明。在 dsh 0.2.0 上,对话保留已删除的文件夹:在那里运行的命令会失败,直到你开始一个新对话。没有对话使用的已删除分支的项目也会从侧边栏消失:Composer Plus 在启动时和每 30 秒检查一次分支文件夹,不需要任何侧边栏筛选。对话移动期间,同一仓库中的**新分支**会回答“请重试”。关闭开关后,dsh 自己的错误会再次出现(“working-directory: directory does not exist”)。
220
220
  - **工作区树中的分支** 会在无需点击的情况下写入 git:移动对话时,它把项目文件夹切回原来的分支(`git switch`),并添加一个 worktree(`git worktree add`)。它从不删除分支、worktree 或文件。dsh 不能更改对话的文件夹,所以被移动的对话是一个副本(dsh 自己的分叉,带有新的 id),旧对话会被归档。副本会继续已停止的任务;分支出现时正在运行的工具调用会以拒绝结束,智能体会在新文件夹中再次运行它。旧对话的目标不会随之移动。只有文件夹是仓库主文件夹的对话会移动,而且只针对它在该轮中创建并切换到的分支(`git switch -c`、`git checkout -b`):只用 `git branch` 创建的分支、有未提交改动的文件夹、链接的 worktree 或子文件夹都不会移动。只有直接位于 `<project>/.worktrees/` 中且有分支的 worktree 会显示在树中;分离的 worktree 或位于其他位置的 worktree 不会显示。只有当原对话是正在打开的对话时,副本才会自动打开(插件通过 dsh 的侧边栏行判断);否则它在分支项目中。
221
221
  - **在对话中查找** 只搜索页面显示的内容:已加载的消息和回复(向上滚动或点击 **加载更早** 可查看更早的内容),不搜索已收起的工具步骤,也不搜索工具输出中被折叠的文本。它最多统计 2,000 个匹配项(之后显示“2000+”)。它使用浏览器的高亮 API(Chromium 105 及更高版本;桌面应用支持):在较旧的浏览器中,计数和跳转仍然可用,只是没有颜色。`Cmd+F`(Mac)或 `Ctrl+F`(Windows 和 Linux)只在屏幕上有对话时打开它;在其他地方,浏览器自带的查找照常工作。在 Mac 上,`Ctrl+F` 在文本框中仍保持 macOS 的用法(光标向前移动一个字符)。
222
222
  - **空闲时打开等待中的对话** 只知道 dsh 自己的窗口看到的操作:在其他应用中的操作不算,因此 dsh 在后台时,它会在 30 秒后打开等待中的对话。它不会把 dsh 带到前台。只阅读而不按键、不点击、不移动鼠标,也算空闲。它只看带有 dsh 橙色圆点的对话(问题、审批或计划审阅);子代理的请求显示在其父对话中。等待中的对话在屏幕上时,不会打开其他对话;你没有回答就离开的对话,在再次 30 秒没有使用后可能会再次打开。30 秒不能更改。
package/index.js CHANGED
@@ -57,6 +57,7 @@ export const UNREAD_PATH = '/api/composer-plus.unread';
57
57
  export const FILE_CHATS_PATH = '/api/composer-plus.file-chats';
58
58
  export const BRANCHES_PATH = '/api/composer-plus.branches';
59
59
  export const WORKTREES_PATH = '/api/composer-plus.worktrees';
60
+ export const WORKTREES_SWEEP_MS = 30000;
60
61
  export const DEFAULT_WORKSPACE_PATH = '/api/composer-plus.default-workspace';
61
62
  export const NEW_SESSION_WORKSPACE_PATH = '/api/composer-plus.new-session-workspace';
62
63
  export const GOAL_CHECK_PATH = '/api/composer-plus.goal-check';
@@ -4143,7 +4144,8 @@ export async function openWorktree({ subprocess, sessionQuery, registry }, sessi
4143
4144
  * When the folder of a chat (`<root>/.worktrees/<name>`) is gone (its branch was deleted), the next step of the chat moves it
4144
4145
  * out before dsh reads its folder: the folder's workspace goes (dsh then lists its chats under Ungrouped) and, on dsh 0.2.1+,
4145
4146
  * the chat goes on in `<root>`. Without this, dsh 0.2.1 ends every turn of the chat with "working-directory: directory does
4146
- * not exist". The switch is kept here (`worktrees.json`, on by default; `GET` without a query, `POST {on}`): off, the listener
4147
+ * not exist". A gone branch folder that no chat steps in loses its workspace too: at start, every WORKTREES_SWEEP_MS and when
4148
+ * the switch goes on. The switch is kept here (`worktrees.json`, on by default; `GET` without a query, `POST {on}`): off, the listener
4147
4149
  * is removed and the route starts and opens nothing. The read-only `GET` still answers: the browser hides its chip and pill
4148
4150
  * itself, and a read sent together with a switch-on must not get the old state. */
4149
4151
  function installWorktrees(ctx, home) {
@@ -4156,6 +4158,8 @@ function installWorktrees(ctx, home) {
4156
4158
  const moving = new Map();
4157
4159
  const moveOut = async (cwd) => {
4158
4160
  const root = dirname(dirname(cwd));
4161
+ // A gone project folder (or a dangling link) has no repository to ask: git does not start there.
4162
+ if (!(await stat(root).then((s) => s.isDirectory(), () => false))) return undefined;
4159
4163
  const repo = await repoOf(ctx.subprocess, root);
4160
4164
  const real = (path) => realpath(path).catch(() => path);
4161
4165
  if (repo?.root === undefined || (await real(repo.root)) !== (await real(root))) return undefined; // not a Branch per chat folder
@@ -4168,17 +4172,31 @@ function installWorktrees(ctx, home) {
4168
4172
  } finally { worktreeMoves.delete(cwd); }
4169
4173
  return root;
4170
4174
  };
4175
+ const isBranchFolder = (path) => isText(path, 4096) && isAbsolute(path) && basename(dirname(path)) === '.worktrees';
4176
+ const gone = (path) => stat(path).then((s) => !s.isDirectory(), (error) => error?.code === 'ENOENT' || error?.code === 'ENOTDIR');
4177
+ const leave = (cwd) => {
4178
+ let job = moving.get(cwd);
4179
+ if (job === undefined) { job = moveOut(cwd).finally(() => moving.delete(cwd)); moving.set(cwd, job); }
4180
+ return job;
4181
+ };
4171
4182
  const rehome = async (agent, signal) => {
4172
4183
  const wd = get('workingDirectory'); // dsh 0.2.1+
4173
4184
  const cwd = wd?.get?.(agent.session) ?? agent.session?.header?.cwd;
4174
- if (!isText(cwd, 4096) || !isAbsolute(cwd) || basename(dirname(cwd)) !== '.worktrees') return;
4175
- if (!(await stat(cwd).then((s) => !s.isDirectory(), (error) => error?.code === 'ENOENT' || error?.code === 'ENOTDIR'))) return;
4176
- let job = moving.get(cwd);
4177
- if (job === undefined) { job = moveOut(cwd).finally(() => moving.delete(cwd)); moving.set(cwd, job); }
4178
- const root = await job;
4185
+ if (!isBranchFolder(cwd) || !(await gone(cwd))) return;
4186
+ const root = await leave(cwd);
4179
4187
  // dsh's own folder change: it tells the model, and dsh runs one change of a chat at a time (a second one is a no-op).
4180
4188
  if (root !== undefined && wd?.set !== undefined && wd.get(agent.session) === cwd) await wd.set(agent, root, signal);
4181
4189
  };
4190
+ // A branch folder project that no chat steps in (a branch deleted outside a chat, or while dsh was closed) goes too: at
4191
+ // start and every 30 seconds. Only a `stat` per branch folder project; git runs only for a gone folder.
4192
+ const sweep = async () => {
4193
+ if (!on) return;
4194
+ let projects;
4195
+ try { projects = get('workspaceRegistry')?.list?.() ?? []; } catch { return; } // the registry is not ready yet
4196
+ for (const w of projects) {
4197
+ if (isBranchFolder(w.path) && (await gone(w.path))) await leave(w.path).catch((error) => log(`branch folder cleanup: ${error?.message ?? error}`));
4198
+ }
4199
+ };
4182
4200
  // Before dsh's working-directory listener (also `prepend`, added earlier), which ends the turn on a gone folder.
4183
4201
  let unlisten;
4184
4202
  const listen = () => {
@@ -4190,6 +4208,12 @@ function installWorktrees(ctx, home) {
4190
4208
  } else if (!on && unlisten !== undefined) { unlisten(); unlisten = undefined; }
4191
4209
  };
4192
4210
  const read = saved.read().then((value) => { on = value; listen(); }).catch((error) => log(`branch per chat switch: ${error?.message ?? error}`));
4211
+ ctx.effect?.(() => {
4212
+ const timer = setInterval(sweep, WORKTREES_SWEEP_MS);
4213
+ const ready = get('appReady');
4214
+ const cancel = ready?.onReady !== undefined ? ready.onReady(() => { read.then(sweep); }) : (read.then(sweep), undefined);
4215
+ return () => { clearInterval(timer); cancel?.(); };
4216
+ }, 'dsh-composer-plus: branch folder cleanup');
4193
4217
  ctx.connection.fetch.register({
4194
4218
  path: WORKTREES_PATH, methods: ['GET', 'POST'], requestBody: 'buffered',
4195
4219
  fetch: async (request) => {
@@ -4212,6 +4236,7 @@ function installWorktrees(ctx, home) {
4212
4236
  const done = switchQueue.then(async () => { await saved.write(body.on); on = body.on; listen(); });
4213
4237
  switchQueue = done.catch(() => {});
4214
4238
  await done;
4239
+ if (on) sweep();
4215
4240
  return json({ on });
4216
4241
  }
4217
4242
  if (!isText(body?.sessionId)) return json({ error: 'bad request' }, 400);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-composer-plus",
3
- "version": "1.16.0",
3
+ "version": "1.16.1",
4
4
  "description": "DeepSeek Harness helpers: 11 extra UI languages (Türkçe, Español, Français, Deutsch, 日本語…), Changes panel, swipe-card feature ideas, sidebar search in message text, turn rollback with git file restore, delete chats to the Trash, input history, Shift+Tab /plan, one-click Continue, resume running chats after a restart, queue drag-and-drop, deeplinks, Auto Review allow-for-chat, notifications, iPhone access with the Tether app, automatic updates",
5
5
  "icon": "./assets/icon.svg",
6
6
  "license": "MIT",