dsh-composer-plus 1.10.0 → 1.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.de.md CHANGED
@@ -8,13 +8,13 @@
8
8
 
9
9
  Dies ist eine Übersetzung. Maßgeblich ist die englische [README.md](README.md).
10
10
 
11
- Komfortfunktionen im Stil von Codex für die Desktop- und Weboberfläche von [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh): ein Änderungsbereich, Funktionsideen als Wischkarten, Suche im Nachrichtentext über die Seitenleiste, Zurücknehmen von Runden samt Wiederherstellung von Dateien, Löschen von Chats in den Papierkorb, der Projektname unter dem Eingabefeld, der Projektstatus in der Seitenleiste, ein Eingabeverlauf, ein Tastenkürzel für den Planmodus, Fortsetzen mit einem Klick, Fortsetzen laufender Chats nach einem Neustart, Drag-and-drop in der Warteschlange, Sitzungslinks, Freigaben der automatischen Prüfung pro Chat, Hintergrundbenachrichtigungen, Zugriff vom iPhone mit der Tether-App und automatische Updates.
11
+ Komfortfunktionen im Stil von Codex für die Desktop- und Weboberfläche von [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh): ein Änderungsbereich, Funktionsideen als Wischkarten, Suche im Nachrichtentext über die Seitenleiste, Zurücknehmen von Runden samt Wiederherstellung von Dateien, Löschen von Chats in den Papierkorb, der Projektname unter dem Eingabefeld, der Projektstatus in der Seitenleiste, ein Eingabeverlauf, ein Tastenkürzel für den Planmodus, Fortsetzen mit einem Klick, Fortsetzen laufender Chats nach einem Neustart, Drag-and-drop in der Warteschlange, Sitzungslinks, Export von Chats als Markdown, Freigaben der automatischen Prüfung pro Chat, Hintergrundbenachrichtigungen, Zugriff vom iPhone mit der Tether-App und automatische Updates.
12
12
 
13
- **In einer Zeile:** ein einziges Plugin für DeepSeek Harness (npm `dsh-composer-plus`, unter Einstellungen → Plugins als **Composer Plus** angezeigt). Es bringt einen git-Änderungsbereich, Funktionsideen als Karten im Tinder-Stil, eine Seitenleisten-Suche, die auch Wörter in Nachrichten findet, ↶ Runde zurücknehmen (nur Chat oder Chat und Dateien), Chat löschen, den Projektnamen unter dem Eingabefeld, ↑/↓ Eingabeverlauf, einen Shift+Tab-Umschalter für `/plan`, ▶ Fortsetzen mit einem Klick, Nach Neustart fortsetzen, Neuordnen der Warteschlange per Drag-and-drop, Sitzungslink kopieren, „Für diesen Chat zulassen“ bei der automatischen Prüfung, Hintergrundbenachrichtigungen, Zugriff vom iPhone (Mobile Verbindung, Tether-App), 11 zusätzliche Oberflächensprachen und automatische Updates.
13
+ **In einer Zeile:** ein einziges Plugin für DeepSeek Harness (npm `dsh-composer-plus`, unter Einstellungen → Plugins als **Composer Plus** angezeigt). Es bringt einen git-Änderungsbereich, Funktionsideen als Karten im Tinder-Stil, eine Seitenleisten-Suche, die auch Wörter in Nachrichten findet, ↶ Runde zurücknehmen (nur Chat oder Chat und Dateien), Chat löschen, den Projektnamen unter dem Eingabefeld, ↑/↓ Eingabeverlauf, einen Shift+Tab-Umschalter für `/plan`, ▶ Fortsetzen mit einem Klick, Nach Neustart fortsetzen, Neuordnen der Warteschlange per Drag-and-drop, Sitzungslink kopieren, Als Markdown exportieren, „Für diesen Chat zulassen“ bei der automatischen Prüfung, Hintergrundbenachrichtigungen, Zugriff vom iPhone (Mobile Verbindung, Tether-App), 11 zusätzliche Oberflächensprachen und automatische Updates.
14
14
 
15
15
  <p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness mit Composer Plus: Das laufende Projekt zeigt einen Spinner in der Seitenleiste, und der Änderungsbereich zeigt einen git-Diff"></p>
16
16
 
17
- Inoffizielles Community-Plugin. Die einzigen Netzwerkaufrufe sind die Update-Prüfung (GitHub-Releases und die npm-Registry). Schalte **Automatische Updates** aus, um sie beim Start zu stoppen. **Funktionsideen** ruft das eigene Modell deines Chats nur auf, wenn du auf **Funktionen vorschlagen** klickst. **Mobile Verbindung** (standardmäßig aus) nimmt iPhone-Verbindungen aus deinem lokalen Netz oder Tailnet erst an, wenn du sie einschaltest.
17
+ Inoffizielles Community-Plugin. Die einzigen Netzwerkaufrufe sind die Update-Prüfung (GitHub-Releases und die npm-Registry). Schalte **Automatische Updates** aus, um sie beim Start zu stoppen. **Funktionsideen** ruft das eigene Modell deines Chats nur auf, wenn du auf **Funktionen vorschlagen** klickst. **Vorhersage der nächsten Nachricht** (standardmäßig an) ruft nach jeder beendeten Runde einmal das in den Einstellungen gewählte Modell auf (den dsh-Standard, wenn du kein anderes wählst), ohne Klick. Schalte sie unter **Einstellungen → Composer Plus** aus, um diese Aufrufe zu stoppen. **Beim Tippen vervollständigen** (standardmäßig aus) ruft bei jeder Pause beim Tippen das dafür gewählte Modell auf (standardmäßig das der Vorhersage), nachdem du die Funktion eingeschaltet hast. **Mobile Verbindung** (standardmäßig aus) nimmt iPhone-Verbindungen aus deinem lokalen Netz oder Tailnet erst an, wenn du sie einschaltest.
18
18
 
19
19
  ## Installation
20
20
 
@@ -29,14 +29,14 @@ 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.10.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.11.1`.
33
33
 
34
34
  ## Funktionen
35
35
 
36
36
  | Funktion | So nutzt du sie | Screenshot |
37
37
  |---|---|---|
38
38
  | **Änderungsbereich** | Rechte Seitenleiste → `+` → **Änderungen**. Wähle **Nicht committet**, **Nicht gestagt**, **Gestagt** oder **Branch**, um die geänderten Dateien mit `+/-`-Zählern zu sehen. Klicke auf eine Datei, um ihren Diff zu sehen. **Letzte Runde** öffnet die eigene Prüfansicht von dsh für die letzte Runde. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Screenshot: Änderungsbereich"></a> |
39
- | **Funktionsideen** | Rechte Seitenleiste → `+` → **Funktionsideen** → **Funktionen vorschlagen**. Das eigene Modell des Chats liest eine kurze Zusammenfassung des Projekts (Dateien der obersten Ebene, den Anfang von README und Manifest, die letzten 15 Commits). Dann schlägt es bis zu 8 Funktionen vor. Sie erscheinen als Kartenstapel in der Oberflächensprache von dsh. Wische eine Karte nach rechts (oder klicke auf **✓** oder drücke `→`; die Karte fliegt in jedem Fall zu ihrer Seite hinaus), um einen neuen Chat im selben Projekt zu starten. Dieser Chat startet im Planmodus mit der Idee als Anfrage. So ändert sich nichts, bevor du den Plan genehmigst. Um den Plan auszulassen, klicke auf **▶ Sofort umsetzen** (oder drücke `↑`; die Karte fliegt nach oben hinaus). Dann startet der neue Chat sofort mit der Idee als normaler Anfrage, und das Modell nimmt die Änderung vor und führt seine Prüfungen aus (Genehmigungen gelten wie gewohnt). Wische nach links (oder **✕** oder `←`), um die Karte zu überspringen. **Rückgängig** (oder `Z`) holt eine übersprungene Karte zurück. Klicke auf **↓** (oder drücke `↓`), um eine gute Idee für später zu merken. Sie kommt in die Liste **Später** des Projekts. Jeder Chat im selben Projektordner zeigt diese Liste (auch nach einem Neustart). **Später (N)** öffnet die Liste. **Planen** startet für die Idee denselben Chat im Planmodus, **Sofort umsetzen** den Chat ohne Plan. Beide nehmen die Idee von der Liste. **Alle planen (N)** startet einen einzigen Chat im Planmodus für alle Ideen der Liste. So werden gemeinsame Teile nur einmal geplant. **Aus der Liste entfernen** löscht sie. **Weitere Ideen** fügt Karten hinzu. In einem Projekt wird keine Idee zweimal vorgeschlagen: Jede vorgeschlagene Idee (übersprungen, gemerkt oder gestartet) kommt in den **Verlauf** des Projekts. Das Modell erhält die Anweisung, diese Ideen nicht erneut vorzuschlagen, und ein wiederholter Titel wird verworfen. **Verlauf** listet sie mit **Gestartet** oder **Vorgeschlagen**; **Vergessen** (oder **Alle vergessen**) lässt eine Idee wieder zu; eine Idee, die noch in der Liste **Später** steht, bleibt aus den Vorschlägen heraus, bis du sie dort entfernst. Das Modell läuft nur, wenn du klickst. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Screenshot: Funktionsideen"></a> |
39
+ | **Funktionsideen** | Rechte Seitenleiste → `+` → **Funktionsideen** → **Funktionen vorschlagen**. Das eigene Modell des Chats liest eine kurze Zusammenfassung des Projekts (Dateien der obersten Ebene, den Anfang von README und Manifest, die letzten 15 Commits). Dann schlägt es bis zu 8 Funktionen vor. Sie erscheinen als Kartenstapel in der Oberflächensprache von dsh. Wische eine Karte nach rechts (oder klicke auf **✓** oder drücke `→`; die Karte fliegt in jedem Fall zu ihrer Seite hinaus), um einen neuen Chat im selben Projekt zu starten. Dieser Chat startet im Planmodus mit der Idee als Anfrage. So ändert sich nichts, bevor du den Plan genehmigst. Um den Plan auszulassen, klicke auf **▶ Sofort umsetzen** (oder drücke `↑`; die Karte fliegt nach oben hinaus). Dann startet der neue Chat sofort mit der Idee als normaler Anfrage, und das Modell nimmt die Änderung vor und führt seine Prüfungen aus (Genehmigungen gelten wie gewohnt). Wische nach links (oder **✕** oder `←`), um die Karte zu überspringen. **Rückgängig** (oder `Z`) holt eine übersprungene Karte zurück. Klicke auf **↓** (oder drücke `↓`), um eine gute Idee für später zu merken. Sie kommt in die Liste **Später** des Projekts. Jeder Chat im selben Projektordner zeigt diese Liste (auch nach einem Neustart). **Später (N)** öffnet die Liste. **Planen** startet für die Idee denselben Chat im Planmodus, **Sofort umsetzen** den Chat ohne Plan. Beide nehmen die Idee von der Liste. **Alle planen (N)** startet einen einzigen Chat im Planmodus für alle Ideen der Liste. So werden gemeinsame Teile nur einmal geplant. **Aus der Liste entfernen** löscht sie. **Als Checkliste kopieren** kopiert die ganze Liste als Markdown-Checkliste (`- [ ] Title — Summary`, eine Zeile pro Idee) in die Zwischenablage, für einen Issue-Tracker oder eine TODO-Datei; dabei gibt es keinen Netzwerkaufruf. **Weitere Ideen** fügt Karten hinzu. Für Ideen zu nur einem Bereich tippe ein kurzes **Fokusthema** in das Feld neben **Funktionen vorschlagen** (höchstens 80 Zeichen; `Enter` schlägt ebenfalls vor), oder klicke auf eines der festen Themen darunter: **Leistung**, **Barrierefreiheit**, **Tests**, **Sicherheit**, **Bedienbarkeit** oder **Dokumentation** (ein erneuter Klick leert es). Das Modell schlägt dann nur Funktionen zu diesem Thema vor; ein leeres Feld bedeutet jede Funktion. In einem Projekt wird keine Idee zweimal vorgeschlagen: Jede vorgeschlagene Idee (übersprungen, gemerkt oder gestartet) kommt in den **Verlauf** des Projekts. Das Modell erhält die Anweisung, diese Ideen nicht erneut vorzuschlagen, und ein wiederholter Titel wird verworfen. **Verlauf** listet sie mit **Gestartet** oder **Vorgeschlagen**; **Vergessen** (oder **Alle vergessen**) lässt eine Idee wieder zu; eine Idee, die noch in der Liste **Später** steht, bleibt aus den Vorschlägen heraus, bis du sie dort entfernst. Das Modell läuft nur, wenn du klickst. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Screenshot: Funktionsideen"></a> |
40
40
  | **Inhaltssuche** | Die eigene Seitenleisten-Suche von dsh (die Lupe neben **Arbeitsbereiche**; `Cmd+K` in der Desktop-App, `Cmd+Alt+K` im Browser) findet Chats auch über die Wörter in deinen Nachrichten und in den Antworten, nicht nur über den Titel. Unter dem Chat zeigt sie den passenden Text. dsh hat diese Suche bereits, liefert sie aber ausgeschaltet aus. Diese Funktion schaltet sie ein, mit einer Suchindex-Datei auf deinem Computer. Der Index entsteht bei der ersten Suche nach einem Start (etwa 15 s für 250 Chats, siehe Grenzen) und bleibt für die nächsten Starts erhalten. Standardmäßig an; eine Änderung gilt, nachdem du dsh neu gestartet hast. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Screenshot: Inhaltssuche"></a> |
41
41
  | **Runde zurücknehmen** | Fahre mit der Maus über eine deiner Nachrichten und klicke auf **↶** (neben Kopieren). **Nur Chat** nimmt diese Nachricht und alles danach (Antworten, Tool-Aufrufe) aus dem Chat und aus dem Kontext des Modells. Die Nachricht kommt zurück ins Eingabefeld: Ändere sie und sende sie erneut. **Chat und Dateien** listet zuerst die Projektdateien auf, die sich seit dieser Nachricht geändert haben. Dann setzt es auch diese Dateien auf ihren alten Stand zurück, einschließlich Änderungen durch Befehle (`bash`), nicht nur durch die Bearbeitungs-Tools von dsh. Eine laufende Runde stoppt zuerst. Das Chatprotokoll wird nie umgeschrieben: Eine verborgene Markierung blendet den zurückgenommenen Teil aus, so wie `/compact` von dsh alte Nachrichten ausblendet. Wenn [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) installiert ist, übernimmt es diese Aufgabe, und Composer Plus zeigt keine zweite Schaltfläche. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Screenshot: Runde zurücknehmen"></a> |
42
42
  | **Chat löschen** | Seitenleiste → Menü **…** eines Chats (oder Rechtsklick) → **Löschen…** → **Löschen**. dsh selbst kann nur archivieren. Der Chat stoppt (seine Runde, Jobs, Subagents und geplanten Erinnerungen, wie beim Archivieren in dsh). Sein gespeicherter Verlauf kommt mit den Chats seiner Subagents in den macOS-Papierkorb (auf anderen Systemen: `$DSH_HOME/trash`). Um ihn zurückzuholen, lege den Ordner zurück und starte dsh neu: Der Chat erscheint in der Ansicht **Nur archivierte** der Seitenleiste. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Screenshot: Chat löschen"></a> |
@@ -44,11 +44,15 @@ Starte dsh danach neu. (Die CLI kann nicht in das Desktop-Profil installieren; d
44
44
  | **Eingabeverlauf** | Drücke in einem leeren Eingabefeld `↑` / `↓`, um wie in einem Terminal durch deine gesendeten Nachrichten zu gehen. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Screenshot: Eingabeverlauf"></a> |
45
45
  | **Planmodus mit Shift+Tab** | `Shift+Tab` fügt `/plan ` am Anfang des Entwurfs ein (erneutes Drücken entfernt es wieder). Wenn der Chat schon im Planmodus ist, verlässt `Shift+Tab` den Planmodus. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Screenshot: Planmodus mit Shift+Tab"></a> |
46
46
  | **Fokus im Eingabefeld behalten** | Nachdem du einen `/`-Befehl oder einen Skill gesendet hast, bleibt der Cursor im Eingabefeld, und du kannst sofort weitertippen. Das gilt auch für Tastaturmakros, die einen Befehl tippen und `Enter` drücken. dsh schaltet das Eingabefeld schreibgeschützt, während es den Befehl auflöst, und der Browser nimmt dann den Fokus weg. Diese Funktion setzt den Fokus zurück, außer ein Menü, ein Dialog oder ein anderes Feld hat ihn. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Screenshot: Fokus im Eingabefeld behalten"></a> |
47
- | **Fortsetzen mit einem Klick** | Nach einer gestoppten, fehlgeschlagenen oder abgebrochenen Runde zeigt ein leeres Eingabefeld **▶**. Ein Klick setzt das vorhandene Gespräch fort. Dabei schreibt er nichts ins Eingabefeld und fügt keine sichtbare Chatnachricht hinzu. (Das Modell erhält einen kurzen verborgenen Hinweis „mach dort weiter, wo du aufgehört hast“, weil manche Anbieter, etwa Claude, eine Anfrage ablehnen, die mit einer Assistentenantwort endet.) Nach einer abgeschlossenen Runde bleibt die normale Senden-Schaltfläche. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Screenshot: Fortsetzen mit einem Klick"></a> |
47
+ | **Fortsetzen mit einem Klick** | Nach einer gestoppten, fehlgeschlagenen oder abgebrochenen Runde zeigt ein leeres Eingabefeld **▶**. Ein Klick setzt das vorhandene Gespräch fort. Dabei schreibt er nichts ins Eingabefeld und fügt keine sichtbare Chatnachricht hinzu. (Das Modell erhält einen kurzen verborgenen Hinweis „mach dort weiter, wo du aufgehört hast“, weil manche Anbieter, etwa Claude, eine Anfrage ablehnen, die mit einer Assistentenantwort endet.) Nachrichten in der Warteschlange bleiben dort: ▶ setzt nur die gestoppte Aufgabe fort, danach läuft die Warteschlange. Nach einer abgeschlossenen Runde bleibt die normale Senden-Schaltfläche. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Screenshot: Fortsetzen mit einem Klick"></a> |
48
48
  | **Nach Neustart fortsetzen** | Standardmäßig aus: Schalte die Funktion unter **Einstellungen → Composer Plus** ein. Wenn du dsh beendest (oder dsh sich schließt), während ein Chat arbeitet, macht dieser Chat von selbst weiter, sobald du dsh wieder öffnest. Er bekommt denselben verborgenen Hinweis wie bei Fortsetzen mit einem Klick. Lief gerade eine Zielrunde (`/goal`), geht das Ziel mit seiner nächsten Runde weiter (dsh pausiert Ziele bei jedem Start, bis du sie fortsetzt). Chats, die du gestoppt hast, die abgeschlossen sind oder die fehlgeschlagen sind, werden nicht fortgesetzt. dsh selbst hat dafür keine Einstellung: Es markiert eine solche Runde nur als unterbrochen. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Screenshot: Nach Neustart fortsetzen"></a> |
49
49
  | **Warteschlange per Drag-and-drop** | Eingereihte Nachrichten bekommen einen Griff (⠿). Ziehe ihn, um die Reihenfolge zu ändern, oder setze den Fokus auf den Griff und drücke `↑` / `↓`. `Esc` bricht ab. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Screenshot: Warteschlange per Drag-and-drop"></a> |
50
50
  | **Sitzungslink kopieren** | Rechtsklick auf einen Chat in der Seitenleiste → **Sitzungslink kopieren**. Füge den Link `dsh-session:…` in einen anderen Chat ein, um diesen Chat als schreibgeschützten Kontext anzuhängen. dsh 0.2.1 hat ein eigenes **Sitzungs-ID kopieren**, das nur die reine ID kopiert. Dieser Eintrag steht direkt danach. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Screenshot: Sitzungslink kopieren"></a> |
51
+ | **Chat als Markdown exportieren** | Rechtsklick auf einen Chat in der Seitenleiste (oder sein Menü **…** öffnen) → **Als Markdown exportieren…**. Ein Dialog zeigt, wie viele Nachrichten der Chat hat. **In die Zwischenablage kopieren** kopiert den Chat als Markdown, **.md-Datei speichern** speichert ihn als `<chat title>.md` über den Download des Browsers (dsh-Desktop: in deinen Ordner Downloads oder über einen Speichern-Dialog, je nach Einstellung deines Systems). Die Datei enthält den Chattitel, den Projektnamen und das Datum, dann pro Nachricht einen Abschnitt `## Du` oder `## Assistent`. Codeblöcke bleiben, wie sie sind; ein Codeblock, den eine Nachricht offen lässt, wird geschlossen. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Screenshot: Chat als Markdown exportieren"></a> |
51
52
  | **Projektpfad kopieren** | Rechtsklick auf ein Projekt in der Seitenleiste → **Pfad kopieren** kopiert den vollständigen Pfad seines Ordners. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Screenshot: Projektpfad kopieren"></a> |
53
+ | **Projektsuche im neuen Chat** | Neuer Chat → die Projektschaltfläche über dem Eingabefeld. Die Projekte erscheinen in A–Z-Reihenfolge, oben mit dem Feld **Projekte durchsuchen**. Gib einen Teil eines Namens ein (Groß- und Kleinschreibung und Akzente spielen keine Rolle) und drücke `Enter`, um den ersten Treffer zu wählen. Passt nichts, erscheint **Kein passendes Projekt**. Die gespeicherte Projektreihenfolge von dsh in der Seitenleiste ändert sich nicht. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Screenshot: Projektsuche im neuen Chat"></a> |
54
+ | **Vorhersage der nächsten Nachricht** | Standardmäßig an: Du kannst die Funktion unter **Einstellungen → Composer Plus** ausschalten. Wenn der Agent eine Runde beendet (keine gestoppte oder fehlgeschlagene), zeigt das leere Eingabefeld in Grau eine Vermutung deiner nächsten Nachricht, mit dem Hinweis **Tab zum Übernehmen**. `Tab` setzt den Text ins Eingabefeld, sendet ihn aber nicht. `Esc` blendet die Vermutung für diese Runde aus. Auch Tippen blendet sie aus, und eine neue Runde ersetzt sie. Das Menü **Modell** unter dem Schalter listet die eigenen Modelle von dsh (dieselbe Liste wie im Modellmenü von dsh). **dsh-Standard** ist vorausgewählt und folgt dem Standardmodell von dsh. Jede beendete Runde kostet einen kurzen Modellaufruf. In Tether erscheint die Vermutung über dem leeren Eingabefeld: Tippe darauf, um sie ins Feld zu setzen. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Screenshot: Vorhersage der nächsten Nachricht"></a> |
55
+ | **Beim Tippen vervollständigen** | Standardmäßig aus: Du kannst die Funktion unter **Einstellungen → Composer Plus** einschalten. Während du tippst, zeigt grauer Text direkt nach dem Cursor, wie deine Nachricht weitergehen kann. `Tab` fügt ihn der Nachricht hinzu, sendet sie aber nicht. `Esc` blendet ihn aus. Wenn du die nächsten Buchstaben des grauen Texts tippst, bleibt er stehen, ohne neuen Modellaufruf. Die Funktion hat ein eigenes Menü **Modell** unter ihrem Schalter. Der erste Eintrag, **Wie Vorhersage der nächsten Nachricht**, nutzt das Modell von **Vorhersage der nächsten Nachricht** (das ist der Standard). Wähle ein anderes Modell, um für jede Funktion ein eigenes Modell zu nutzen, zum Beispiel ein schnelleres Modell für Vervollständigungen. Sie macht bei jeder Pause beim Tippen einen Modellaufruf und verbraucht deshalb viel mehr Tokens als die Vorhersage: Wähle ein schnelles, günstiges Modell. Sie läuft nicht bei einem Slash-Befehl, bei einer Nachricht mit einem Datei-Chip oder wenn der Cursor nicht am Ende steht. In Tether erscheint der Rest beim Tippen über dem Feld: Tippe darauf, um ihn hinzuzufügen. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Screenshot: Beim Tippen vervollständigen"></a> |
52
56
  | **Für diesen Chat zulassen** | Wenn die automatische Prüfung dich fragt, bekommt die Genehmigungskarte **Für diesen Chat zulassen**: Dasselbe Tool ist im selben Chat ab dann erlaubt, mit beliebigen Argumenten. Ein Chip in der Kopfzeile listet die Freigaben auf und widerruft sie. Freigaben bleiben nach einem Neustart erhalten. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Screenshot: Für diesen Chat zulassen"></a> |
53
57
  | **Projektstatus** | Eine Projektzeile in der Seitenleiste zeigt dieselbe Markierung (Spinner / wartet / fertig) wie ihre Chats. So zeigt auch ein eingeklapptes Projekt, dass ein Chat darin arbeitet oder dich braucht. Ein Chat, der auf dich wartet, kommt zuerst, dann ein fertiger Chat, den du noch nicht geöffnet hast (der grüne Punkt, auch während ein anderer Chat noch läuft), dann der Spinner. Fahre mit der Maus darüber, um Details zu sehen. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Screenshot: Projektstatus"></a> |
54
58
  | **Aktive Projekte zuerst** | Wenn ein Chat zu laufen beginnt oder dich braucht, rückt sein Projekt mit der eigenen Zeilenanimation von dsh an den Anfang der Seitenleiste (dieselbe Bewegung wie beim Hinziehen von Hand). Fertige Projekte bleiben, wo sie sind; ziehe sie wie gewohnt an eine beliebige Stelle. Die Verschiebungen werden in der Projektreihenfolge von dsh gespeichert. Wenn du die Funktion ausschaltest, bleibt die aktuelle Reihenfolge also erhalten. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Screenshot: Aktive Projekte zuerst"></a> |
@@ -57,14 +61,14 @@ Starte dsh danach neu. (Die CLI kann nicht in das Desktop-Profil installieren; d
57
61
  | **Nach Status sortieren** | Seitenleiste → Ansichtsoptionen → **Sortieren nach** → **Nach Status** (mit **In einer Liste**). Fertige Chats kommen zuerst (mit dem „Fertig“-Punkt von dsh, den auch eine mit Fehler beendete Runde bekommt). Danach kommen laufende oder wartende Chats, dann Chats mit einer aktiven Automatisierungsaufgabe und dann der Rest in der Reihenfolge von dsh. Wenn du einen fertigen Chat öffnest, rückt er nach unten. Nur die Ansicht ändert sich: Wähle **Manuell** oder **Zuletzt aktualisiert**, um zurückzugehen. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Screenshot: Nach Status sortieren"></a> |
58
62
  | **Hintergrundbenachrichtigungen** | Solange dsh im Hintergrund läuft, bekommst du eine Benachrichtigung, wenn eine Runde fertig ist (erste Zeile der Antwort). Du bekommst auch eine, wenn ein Chat wirklich auf dich wartet: auf eine Genehmigung (Toolname), eine Antwort (die Frage) oder eine Planprüfung. Eine Anfrage muss 1,5 s später noch offen sein. So bleiben automatisch beantwortete Genehmigungen (Freigaben der automatischen Prüfung, andere Plugins) stumm. Eine Benachrichtigung verschwindet, sobald ihre Anfrage beantwortet ist. Das Kennzeichen im Dock bzw. in der Taskleiste zählt die wartenden Chats. Ein Klick öffnet den Chat. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Screenshot: Hintergrundbenachrichtigungen"></a> |
59
63
  | **11 zusätzliche Oberflächensprachen** | Einstellungen → Composer Plus → **App-Sprache** stellt die ganze dsh-Oberfläche auf Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt oder हिन्दी um (siehe unten). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Screenshot: 11 zusätzliche Oberflächensprachen"></a> |
60
- | **Mobile Verbindung (iPhone)** | Nutze dsh mit der App [Tether](tether/) von deinem iPhone aus, im selben WLAN oder über [Tailscale](https://tailscale.com). Schalte die Funktion unter **Einstellungen → Composer Plus** ein (sie ist standardmäßig aus, weil sie einen Netzwerkport auf diesem Mac öffnet). Klicke dann unten links in der Seitenleiste auf **Mobile Verbindung**: Scanne den QR-Code in Tether und klicke auf **Approve**. Das Telefon zeigt deine Chats, sendet Nachrichten, beantwortet Genehmigungen und Fragen und wechselt Modelle und Agenten. Kopple so viele Macs, wie du willst: Mit dem Mac-Namen oben links in der App wechselst du zwischen ihnen. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Screenshot: Mobile Verbindung"></a> |
64
+ | **Mobile Verbindung (iPhone)** | Nutze dsh mit der App [Tether](tether/) von deinem iPhone aus, im selben WLAN oder über [Tailscale](https://tailscale.com). Schalte die Funktion unter **Einstellungen → Composer Plus** ein (sie ist standardmäßig aus, weil sie einen Netzwerkport auf diesem Mac öffnet). Klicke dann unten links in der Seitenleiste auf **Mobile Verbindung**: Scanne den QR-Code mit der iPhone-Kamera (tippe auf **Open in Tether**) oder mit **Scan code** in Tether, tippe auf **Connect** und klicke auf **Approve**. Installiere Tether zuerst: Ohne die App kann die Kamera den Code nicht öffnen. Das Telefon zeigt deine Chats, sendet Nachrichten, beantwortet Genehmigungen und Fragen und wechselt Modelle und Agenten. Kopple so viele Macs, wie du willst: Mit dem Mac-Namen oben links in der App wechselst du zwischen ihnen. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Screenshot: Mobile Verbindung"></a> |
61
65
  | **Automatische Updates** | Wenn dsh startet, prüft das Plugin das [neueste GitHub-Release](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Ist es neuer und schon auf npm, installiert das Plugin genau diese Version über die eigene Plugin-Verwaltung von dsh (derselbe Weg wie Einstellungen → Plugins) und benachrichtigt dich. **Starte dsh neu**, um die Version zu laden. **Einstellungen → Composer Plus → Composer-Plus-Updates** zeigt die Version und hat **Nach Updates suchen** / **Jetzt aktualisieren**. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Screenshot: Automatische Updates"></a> |
62
66
 
63
67
  Schaltflächen, Tooltips, Hinweise und Benachrichtigungen folgen der gewählten dsh-Sprache (siehe App-Sprache weiter unten).
64
68
 
65
69
  ## Einstellungen
66
70
 
67
- Jede Funktion lässt sich einzeln ein- oder ausschalten: dsh **Einstellungen → Composer Plus**. Jede Zeile hat einen kleinen Screenshot: Fahre mit der Maus darüber für eine größere Vorschau, oder klicke darauf, um ihn in voller Größe zu öffnen (`Esc` schließt ihn). Das Feld **Funktionen suchen** oben filtert die Seite nach Name oder Beschreibung (in jeder Sprache, ohne Unterschied bei Groß- und Kleinschreibung oder Akzenten); `Esc` leert es. Jede Zeile hat einen Schalter und eine kurze Beschreibung. Änderungen gelten sofort, ohne Neustart, und bleiben auf diesem Gerät gespeichert. Alles ist standardmäßig an, außer **Mobile Verbindung** und **Nach Neustart fortsetzen**. Der Host von dsh speichert die Schalter dieser beiden Funktionen sowie von **Inhaltssuche** und **Runde zurücknehmen**. Deshalb gelten sie für jedes Fenster und bleiben nach einem Neustart erhalten. **Inhaltssuche** ändert sich erst nach einem Neustart von dsh (dsh liest den Schalter beim Start). Bis dahin steht in ihrer Zeile **Starte dsh neu, damit diese Änderung gilt.**
71
+ Jede Funktion lässt sich einzeln ein- oder ausschalten: dsh **Einstellungen → Composer Plus**. Jede Zeile hat einen kleinen Screenshot: Fahre mit der Maus darüber für eine größere Vorschau, oder klicke darauf, um ihn in voller Größe zu öffnen (`Esc` schließt ihn). Das Feld **Funktionen suchen** oben filtert die Seite nach Name oder Beschreibung (in jeder Sprache, ohne Unterschied bei Groß- und Kleinschreibung oder Akzenten); `Esc` leert es. Jede Zeile hat einen Schalter und eine kurze Beschreibung. Änderungen gelten sofort, ohne Neustart, und bleiben auf diesem Gerät gespeichert. Alles ist standardmäßig an, außer **Mobile Verbindung**, **Nach Neustart fortsetzen** und **Beim Tippen vervollständigen**. Der Host von dsh speichert die Schalter dieser drei Funktionen sowie von **Inhaltssuche**, **Runde zurücknehmen** und **Vorhersage der nächsten Nachricht**. Deshalb gelten sie für jedes Fenster und bleiben nach einem Neustart erhalten. Der Host speichert auch die Wahl unter **Modell** für **Vorhersage der nächsten Nachricht** und die für **Beim Tippen vervollständigen** (standardmäßig **Wie Vorhersage der nächsten Nachricht**). **Inhaltssuche** ändert sich erst nach einem Neustart von dsh (dsh liest den Schalter beim Start). Bis dahin steht in ihrer Zeile **Starte dsh neu, damit diese Änderung gilt.**
68
72
 
69
73
  <p align="center"><img src="docs/images/settings.webp" width="720" alt="Einstellungen → Composer Plus: Funktionssuche, Sprachauswahl, Update-Zeile und ein Schalter pro Funktion, mit Screenshot-Vorschau beim Darüberfahren"></p>
70
74
 
@@ -92,6 +96,12 @@ Jedes Paket hat 3.143 Texte: jeden Oberflächentext von dsh `0.2.0-rc.2` und `0.
92
96
  | `↓` | Seite Funktionsideen | oberste Karte in der Liste „Später“ des Projekts merken |
93
97
  | `↑` | Seite Funktionsideen | oberste Karte sofort umsetzen, ohne Plan |
94
98
  | `Z` | Seite Funktionsideen | zuletzt übersprungene Karte zurückholen |
99
+ | `Enter` | Projektmenü eines neuen Chats, Suchfeld | ersten Treffer wählen |
100
+ | `↑` / `↓` | Projektmenü eines neuen Chats | durch die angezeigten Projekte gehen |
101
+ | `Esc` | Projektmenü eines neuen Chats, Suchfeld | Suche leeren (erneut drücken, um das Menü zu schließen) |
102
+ | `Tab` | leeres Eingabefeld mit einer Vorhersage | Vorhersage ins Eingabefeld setzen |
103
+ | `Tab` | graue Vervollständigung nach dem Cursor | Vervollständigung zur Nachricht hinzufügen |
104
+ | `Esc` | leeres Eingabefeld mit einer Vorhersage | Vorhersage ausblenden |
95
105
 
96
106
  Ein geöffnetes `/`- oder `@`-Menü behält diese Tasten für sich.
97
107
 
@@ -108,16 +118,19 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
108
118
  - **Funktionsideen:** Nichts läuft, bis du auf **Funktionen vorschlagen** klickst. Dann liest die Host-Hälfte nur den eigenen Ordner des Chats (der Browser sendet nie einen Pfad): die Namen der Einträge auf oberster Ebene, die ersten 6 kB von README, AGENTS.md und Manifest (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …) und `git log --oneline -15`, insgesamt höchstens 16 kB. Sie überspringt `.env*`, Schlüsseldateien und Ordner wie `node_modules`. Sie liest nur reguläre Dateien, die im Ordner bleiben: Ein Symlink, der aus dem Ordner hinauszeigt, ein FIFO oder ein Gerät wird übersprungen. Diese Zusammenfassung geht als eine einzige Anfrage an das Modell, das der Chat nutzt, über die eigenen Anbietereinstellungen von dsh. Sie wird keinem Chat hinzugefügt. Im Projekt wird nichts geschrieben. Eine nach rechts gewischte Idee startet einen neuen Chat im Planmodus, also gelten Genehmigungen und Planprüfung wie gewohnt. **Sofort umsetzen** startet den Chat ohne Planmodus: Das Modell kann sofort Dateien ändern, mit den üblichen Genehmigungen des Chats und der automatischen Prüfung. Für später gemerkte Ideen (Titel, Zusammenfassung, Begründung, Aufwand) werden mit dem Ordnerpfad des Projekts in `storages/dsh-composer-plus/later.json` im dsh-Home gespeichert (Datei nur für den Besitzer). Ins Projekt kommt nichts. Der Verlauf der vorgeschlagenen Ideen (Titel, Zusammenfassung, Begründung, Aufwand, Datum, ob gestartet) wird auf dieselbe Weise in `storages/dsh-composer-plus/idea-history.json` gespeichert, höchstens 200 pro Projekt (die ältesten fallen zuerst weg). Seine Titel gehen beim nächsten **Funktionen vorschlagen** in diesem Projekt an das Modell.
109
119
  - **Inhaltssuche:** Kein neuer Code durchsucht deine Chats. Das Plugin schaltet nur den eigenen Nachrichtenindex von dsh ein (SQLite FTS5, `dsh-session-query-sqlite`) und gibt ihm eine Datei: `$DSH_HOME/cache/composer-plus/session-search.db` (Datei und Ordner nur für den Besitzer). Die Datei enthält den Text deiner Benutzer- und Assistentennachrichten. Sie ist also so privat wie die Chatprotokolle in `$DSH_HOME/sessions`. Nichts verlässt deinen Rechner. Die Datei ist eine Kopie, die dsh neu erstellen kann: Du kannst sie löschen, während dsh geschlossen ist. Der Schalter liegt in `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
110
120
  - **Runde zurücknehmen:** Vor jeder deiner Nachrichten macht der Host einen git-Snapshot des Chat-Ordners in einem eigenen Speicher: `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (Ordner nur für den Besitzer). Er enthält Kopien der Dateien in diesem Ordner, die git sieht (keine ignorierten Dateien), und ist also so privat wie das Projekt. Er liest die Objekte deines Repositorys (keine Kopie dessen, was git schon hat) und schreibt nie in Index, `HEAD`, Branches, Tags, Stash oder Config deines Repositorys. Die einzige Änderung, die git dort macht, ist ein neuerer Zeitstempel an Objektdateien, die es wiederverwendet (das verzögert ihre Bereinigung durch `git gc`). Ein Zurücknehmen mit Dateien schreibt nur reguläre Dateien im Ordner des Chats. Es überspringt Symlinks, Pipes und alles außerhalb des Ordners. Nichts verlässt deinen Rechner. Du kannst den Speicher löschen, während dsh geschlossen ist (das Zurücknehmen funktioniert dann nur für den Chat, bis neue Nachrichten kommen). **Chat löschen** löscht auch den Speicher eines Chats. Der Schalter liegt in `$DSH_HOME/storages/dsh-composer-plus/rollback.json`.
121
+ - **Chat als Markdown exportieren:** Die Host-Hälfte liest nur das eigene Protokoll des Chats (dieselben Nachrichten, die dsh zeigt) und gibt sie an die Seite. Sie liest keine Projektdatei und sendet nichts über das Netzwerk. Das Markdown geht nur in deine Zwischenablage oder in die Datei, die du speicherst.
111
122
  - **Chat löschen:** verschiebt die eigenen Protokollordner des Chats (`$DSH_HOME/sessions/<project>/<chat>`) in den Papierkorb. Den Projektordner fasst es nicht an.
112
123
  - **Für diesen Chat zulassen:** Freigaben werden in `$DSH_HOME/storages/dsh-composer-plus/grants.json` gespeichert (Rechte nur für den Besitzer). Eine Freigabe gilt für **genau ein Tool in einem Chat**. Wenn dieses Tool schreiben kann, deckt die Freigabe auch jeden Schreibvorgang ab. Widerrufe sie über den Chip in der Kopfzeile.
113
124
  - Die automatische Prüfung läuft weiterhin bei jedem Aufruf. Fehlgeschlagene Prüfungen werden nie automatisch erlaubt.
114
125
  - **Mobile Verbindung:** aus, bis du sie einschaltest. Solange sie an ist, betreibt die Host-Hälfte das Tether-Gateway: HTTPS auf Port 19390, das nur dein WLAN-Subnetz und dein Tailnet (100.64.0.0/10) annimmt, und eine Kopplungsseite auf `127.0.0.1:19391` (nur dieser Mac). Ein Telefon braucht einen Einmalcode aus dem QR-Code (5 Minuten gültig) und deine Bestätigung mit **Approve** auf dem Mac. Das Telefon pinnt das Zertifikat des Gateways. Der Mac speichert von jedem Telefon-Token nur einen Hash (30 Tage, wird bei Nutzung verlängert). **Revoke** schließt die Verbindungen dieses Telefons sofort. Telefone können nur dsh-Methoden aus einer Positivliste aufrufen (Chats, Prompts, Anhänge, Slash-Befehle, Genehmigungen, Fragen, Modelle, Agenten, Ziele), aber keine Einstellungen, Zugangsdaten, den Dateibrowser oder das Terminal. Daten: `$DSH_HOME/storages/dsh-composer-plus/mobile/`. Details: [tether/README.md](tether/README.md).
115
126
  - **Updates:** Die Host-Hälfte fragt `api.github.com` nach dem neuesten Release und `registry.npmjs.org` nach genau dieser Version. Über dich oder deine Chats wird nichts gesendet. Die Installation nutzt die Plugin-Verwaltung von dsh (`pnpm add dsh-composer-plus@<version>`; wenn dsh 0.2.1 das für ein installiertes Plugin ablehnt, `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, und das Profil führt danach diese URL als Quelle des Plugins). Deshalb gelten die eigenen Prüfungen von dsh für Registry, Skripte und Versionskompatibilität. Pre-Release-Tags und ältere Versionen werden nie installiert.
127
+ - **Vorhersage der nächsten Nachricht:** standardmäßig an. Schalte sie unter **Einstellungen → Composer Plus** aus, um diese Modellaufrufe zu stoppen. Nach jeder beendeten Runde sendet die Host-Hälfte deine eigenen Nachrichten im Chat und die Textantworten des Agenten (keine Werkzeugausgabe, kein verborgener Kontext, kein Reasoning), höchstens etwa 6.000 Zeichen (den neuesten Teil), an das gewählte Modell (den dsh-Standard, wenn du kein anderes wählst). Das geht als eine einzige Anfrage über die eigenen Anbietereinstellungen von dsh. Im Chat wird nichts gespeichert: Die Vermutung kommt nicht in den Chatverlauf. Der Schalter und die Modellwahl liegen in `$DSH_HOME/storages/dsh-composer-plus/predict.json` (Datei nur für den Besitzer).
128
+ - **Beim Tippen vervollständigen:** aus, bis du die Funktion einschaltest. Solange sie an ist, sendet die Host-Hälfte bei jeder Pause beim Tippen den bisher getippten Text sowie deine eigenen Nachrichten im Chat und die Textantworten des Agenten (keine Werkzeugausgabe, kein verborgener Kontext, kein Reasoning), höchstens etwa 3.000 Zeichen aus dem Chat, an das unter **Beim Tippen vervollständigen** gewählte Modell (standardmäßig das Modell von **Vorhersage der nächsten Nachricht**). Eine neuere Pause stoppt die ältere Anfrage. Im Chat wird nichts gespeichert. Der Schalter liegt in `$DSH_HOME/storages/dsh-composer-plus/complete.json` (Datei nur für den Besitzer).
116
129
 
117
130
  ## Fehlerbehebung
118
131
 
119
132
  - **Keine Benachrichtigungen unter macOS:** Systemeinstellungen → Mitteilungen → DeepSeek Harness → erlauben. Wähle **Hinweise**, damit die Benachrichtigungen auf dem Bildschirm bleiben.
120
- - **▶, Griffe in der Warteschlange, Projektstatus, die Option für aktuelle Projekte, Alle Projekte einklappen, Pfad kopieren, Für diesen Chat zulassen oder der Rechtsklick fehlen nach einem dsh-Update:** Diese Elemente hängen sich an das aktuelle HTML von dsh, weil dsh noch keinen Platz für sie hat. Wenn dsh dieses Markup ändert, blenden sie sich selbst aus. Sonst geht nichts kaputt. Bitte eröffne ein [Issue](https://github.com/furkancak1r/dsh-composer-plus/issues).
133
+ - **▶, Griffe in der Warteschlange, Projektstatus, die Option für aktuelle Projekte, Alle Projekte einklappen, Pfad kopieren, das Suchfeld für Projekte, die Vorhersage der nächsten Nachricht, die Vervollständigung beim Tippen, Für diesen Chat zulassen oder der Rechtsklick fehlen nach einem dsh-Update:** Diese Elemente hängen sich an das aktuelle HTML von dsh, weil dsh noch keinen Platz für sie hat. Wenn dsh dieses Markup ändert, blenden sie sich selbst aus. Sonst geht nichts kaputt. Bitte eröffne ein [Issue](https://github.com/furkancak1r/dsh-composer-plus/issues).
121
134
  - **„Update fehlgeschlagen“ oder „nicht über npm installiert“:** Eine Kopie, die aus einem lokalen Ordner verlinkt oder umbenannt wurde, kann sich nicht selbst aktualisieren. Installiere `dsh-composer-plus` über Einstellungen → Plugins neu. Sonst zeigt die Meldung die erste Zeile des pnpm-Fehlers; **Nach Updates suchen** versucht es erneut.
122
135
  - **Mobile Verbindung meldet, dass das Gateway nicht läuft:** „no IPv4 address on en0“ heißt, dass dieser Mac keine WLAN- oder Ethernet-Adresse hat. „EADDRINUSE“ heißt, dass ein anderes dsh (oder eine andere App) Port 19390 oder 19391 nutzt. Nur ein dsh kann Mobile Verbindung gleichzeitig ausführen.
123
136
  - **Mobile Verbindung, Nach Neustart fortsetzen oder Inhaltssuche meldet „Starte dsh neu“:** Das Plugin wurde aktualisiert, während dsh lief (oder du hast bei der Inhaltssuche den Schalter geändert). Der neue Zustand lädt nach einem Neustart.
@@ -126,12 +139,13 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
126
139
  - **Chat und Dateien ist ausgegraut:** Das Projekt ist kein git-Repository, es gibt keinen Snapshot von vor dieser Nachricht (die Nachricht ist älter als das Plugin, oder einer der 50 neuesten Snapshots hat ihn ersetzt), oder keine Datei hat sich geändert.
127
140
  - **Löschen meldet, dass ein anderes dsh diesen Chat geöffnet hat:** Ein zweites dsh mit demselben dsh-Home hält die Sperre des Chats. Schließe dieses Fenster oder dieses dsh und lösche dann erneut. Der Chat bleibt in der Zwischenzeit archiviert.
128
141
  - **Ein Chat wurde nach einem Neustart nicht fortgesetzt:** Nach Neustart fortsetzen war aus, als dsh beendet wurde, du hast die Runde selbst gestoppt, die Runde war beendet (fertig oder fehlgeschlagen), der Chat war archiviert, oder mehr als 20 Chats liefen (die neuesten 20 werden fortgesetzt).
129
- - **Die Installation schlägt direkt nach einem Release fehl:** Gib die Version mit an (`dsh-composer-plus@1.10.0`), siehe den Hinweis zur Installation oben.
142
+ - **Die Installation schlägt direkt nach einem Release fehl:** Gib die Version mit an (`dsh-composer-plus@1.11.1`), siehe den Hinweis zur Installation oben.
130
143
 
131
144
  ## Grenzen
132
145
 
133
146
  - Fortsetzen ohne Nachricht beruht auf dem Lebenszyklus `agent/pre-step` → `agent/request` von dsh. Prüfe die Kompatibilität erneut, wenn du dsh aktualisierst.
134
- - **Funktionsideen** behält die Karten für jeden Chat im Speicher, bis dsh oder die Seite neu lädt. Danach fragt **Funktionen vorschlagen** das Modell erneut. Die Karten kommen in der Oberflächensprache, die dsh beim Klicken hat. Nach einem Sprachwechsel behalten Karten, die schon auf dem Stapel liegen, ihre Sprache, und **Weitere Ideen** nutzt die neue Sprache. Das Modell sieht nur die kurze Projektzusammenfassung, nicht den Code. Eine Idee kann also etwas wiederholen, das das Projekt schon hat: Überspringe sie. Der neue Chat läuft nur im Planmodus, wenn das Profil den Befehl `/plan` von dsh hat. Sonst geht die Idee als normale erste Nachricht hinaus. Die Liste **Später** gehört zum Ordnerpfad des Chats: Derselbe Ordner hat über einen Symlink geöffnet eine eigene Liste. Sie hält höchstens 50 Ideen pro Projekt (entferne eine, um weitere hinzuzufügen) und denselben Titel nur einmal. Das Ziehen einer Karte entscheidet nur über links oder rechts; nutze **↓**, um sie zu merken, und **▶**, um sie sofort umzusetzen. Eine Wiederholung wird nur am Titel erkannt: Das Modell kann eine frühere Idee unter einem neuen Namen trotzdem vorschlagen; überspringe sie. Antwortet das Modell nur mit früheren Ideen, erscheint nichts Neues: Klicke erneut.
147
+ - **Funktionsideen** behält die Karten für jeden Chat im Speicher, bis dsh oder die Seite neu lädt. Danach fragt **Funktionen vorschlagen** das Modell erneut. Die Karten kommen in der Oberflächensprache, die dsh beim Klicken hat. Nach einem Sprachwechsel behalten Karten, die schon auf dem Stapel liegen, ihre Sprache, und **Weitere Ideen** nutzt die neue Sprache. Das Modell sieht nur die kurze Projektzusammenfassung, nicht den Code. Eine Idee kann also etwas wiederholen, das das Projekt schon hat: Überspringe sie. Der neue Chat läuft nur im Planmodus, wenn das Profil den Befehl `/plan` von dsh hat. Sonst geht die Idee als normale erste Nachricht hinaus. Die Liste **Später** gehört zum Ordnerpfad des Chats: Derselbe Ordner hat über einen Symlink geöffnet eine eigene Liste. Sie hält höchstens 50 Ideen pro Projekt (entferne eine, um weitere hinzuzufügen) und denselben Titel nur einmal. Das Ziehen einer Karte entscheidet nur über links oder rechts; nutze **↓**, um sie zu merken, und **▶**, um sie sofort umzusetzen. Eine Wiederholung wird nur am Titel erkannt: Das Modell kann eine frühere Idee unter einem neuen Namen trotzdem vorschlagen; überspringe sie. Antwortet das Modell nur mit früheren Ideen, erscheint nichts Neues: Klicke erneut. Ein enges Fokusthema macht das wahrscheinlicher; nutze ein breiteres Thema oder leere es. Das Fokusthema bleibt für jeden Chat im Feld, bis dsh oder die Seite neu lädt.
148
+ - **Chat als Markdown exportieren** enthält nur deine eigenen Nachrichten und die Textantworten des Assistenten. Werkzeugaufrufe und ihre Ausgabe, Reasoning, Bilder (eine Zeile `[image]` markiert sie), verborgener Kontext und Nachrichten, die Runde zurücknehmen oder dsh-rewind-plugin entfernt hat, fehlen. Die Antworten einer Runde werden zu einem Abschnitt zusammengefasst. Ein Export enthält höchstens etwa 4 Millionen Zeichen; bei einem längeren Chat enthält er den ersten Teil und einen Hinweis.
135
149
  - **Nach Neustart fortsetzen** setzt die Runde fort; es spielt sie nicht erneut ab. Ein Tool-Aufruf, der beim Beenden lief, endet mit dem Ergebnis „outcome unknown“ von dsh, und das Modell erhält die Anweisung, fertige Arbeit nicht zu wiederholen. Ein Befehl, der nicht sicher zweimal laufen kann, kann aber erneut laufen. Subagents, Genehmigungen und Fragen, die offen waren, werden nicht wiederhergestellt: Ihr übergeordneter Chat macht weiter und fragt erneut. Höchstens 20 Chats werden bei einem Start fortgesetzt.
136
150
 
137
151
  - **Inhaltssuche** ist die eigene Suche von dsh und hat daher die Grenzen von dsh. Sie durchsucht nur Benutzer- und Assistentennachrichten: keine Tool-Ausgabe (Befehle, Dateiinhalte, Ergebnisse) und kein Reasoning. Sie hat auch keinen Filter für Benutzer-, Assistenten- oder Tool-Nachrichten. Sie findet ganze Wörter, keine Wortteile (`deploy` findet nicht `deployment`). Buchstaben mit Akzent passen auch ohne Akzent (`seker` findet `şeker`). Eine Zeile pro Chat, mit dem Ausschnitt von 240 Zeichen von dsh, höchstens 20 Zeilen.
@@ -139,7 +153,7 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
139
153
  - **Inhaltssuche** gilt erst nach einem Neustart von dsh. Alle dsh-Instanzen, die dasselbe dsh-Home nutzen, teilen sich die Indexdatei: Lass immer nur ein solches dsh gleichzeitig laufen (dsh erlaubt einen Besitzer pro Indexdatei).
140
154
  - **Runde zurücknehmen** setzt Dateien nur in einem git-Repository zurück und nur im Ordner des Chats. Es behält die 50 neuesten Snapshots pro Chat. Ignorierte Dateien (`.gitignore`, `info/exclude`, deine globale Ignore-Datei), leere Ordner, Symlinks und Submodule werden nicht zurückgesetzt. Eine Datei, die beim Snapshot ignoriert war, wird nie gelöscht, auch wenn die Runde die Ignore-Regeln geändert hat. Eine Datei, die git nicht lesen kann, fehlt im Snapshot. Jede deiner Nachrichten führt ein `git add --all` des Chat-Ordners in den privaten Speicher aus. In einem sehr großen Ordner mit vielen nicht verfolgten Dateien kann das einige Sekunden dauern, und der nächste Tool-Aufruf wartet darauf (höchstens 10 s; der Snapshot wird dann im Hintergrund fertig). Wenn `git gc` in deinem Repository ein Objekt entfernt, das ein alter Snapshot braucht, wird diese Datei als nicht zurückgesetzt aufgelistet. Nur der Text der Nachricht kommt ins Eingabefeld zurück: Füge ihre Bilder oder Dateien erneut hinzu. Subagent-Chats haben kein ↶ (die Dateiänderungen eines Subagents zählen als Änderungen des Chats, der ihn gestartet hat). Der exportierte Chat (`/export`) enthält die zurückgenommenen Nachrichten weiterhin. Die Idee einer verborgenen Markierung, die einen Teil eines Chats zurücknimmt, stammt aus [dsh-rewind-plugin](https://github.com/SiriLee/dsh-rewind) von SiriLee (MIT). Composer Plus nutzt keinen Code daraus.
141
155
  - **Chat löschen** braucht das Archiv von dsh (dsh 0.2.0 und neuer). Ein Chat (oder einer seiner Subagent-Chats), der nicht innerhalb von 15 s stoppt oder den ein anderes dsh hält, bleibt archiviert, und nichts wird verschoben. Auf anderen Systemen als macOS muss der Papierkorb-Ordner auf demselben Laufwerk liegen wie der Chatverlauf. Ein geöffneter Chat, den du löschst, bleibt archiviert und ausgeblendet im Speicher von dsh, bis dsh neu startet. Leere den Papierkorb selbst; dsh tut das nicht.
142
- - Die Warteschlange von dsh hat keine `move`-Aktion. Deshalb schreibt ein Neuordnen den Text der betroffenen Zeilen neu. Wenn der Agent eine Zeile mitten im Verschieben übernimmt, wird das Verschieben rückgängig gemacht, und nichts geht verloren. Nachrichten mit Bildern oder Dateien lassen sich nicht verschieben.
156
+ - Die Warteschlange von dsh hat keine `move`-Aktion. Deshalb verschiebt die Host-Hälfte des Plugins die eingereihte Nachricht selbst in der Warteschlange von dsh (eine Änderung, dieselbe Nachricht). Nachrichten mit Bildern oder Dateien lassen sich ebenfalls verschieben. Nur deine eigenen Nachrichten lassen sich verschieben: Eine Zielrunde oder eine Antwort auf eine Frage in der Warteschlange bleibt an ihrem Platz. Beginnt das Senden einer Nachricht, während du ziehst, wird nichts verschoben, und ein Hinweis meldet das.
143
157
  - dsh 0.2.1 lädt ein Update sofort, wenn die neue Version keine Einstellungen von dsh ändert. Andernfalls und unter dsh 0.2.0 starte dsh neu, um das Update zu laden. Das Plugin startet dsh nie für dich neu. Web-/CLI-Profile ohne die Plugin-Verwaltung von dsh melden nur eine neue Version.
144
158
  - **Fokus im Eingabefeld behalten** gibt den Fokus nur nach einem `/`-Befehl oder Skill zurück. Während dsh den Befehl auflöst, bleibt das Eingabefeld einige Millisekunden lang schreibgeschützt. Tasten, die du in dieser Zeit drückst, gehen verloren. Wenn das `/`-Menü von dsh noch offen ist, wählt `Enter` die markierte Zeile und sendet nicht.
145
159
  - **Mobile Verbindung** funktioniert nur unter macOS (sie nutzt `en0`, `openssl`, `swift` und `dns-sd`). Sie nutzt die festen Ports 19390 und 19391. Daher kann auf jedem Mac nur ein dsh sie gleichzeitig ausführen (jeder Mac ist ein Eintrag in der Mac-Liste des Telefons). Das Telefon bekommt Benachrichtigungen nur, solange Tether offen ist oder gerade in den Hintergrund gewechselt ist (kein Push-Dienst). Die iOS-App ist noch nicht im App Store: Baue sie mit Xcode aus `tether/ios`.
@@ -148,6 +162,9 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
148
162
  - Aktive Projekte werden über die gespeicherte Projektreihenfolge von dsh verschoben. Die neue Reihenfolge bleibt also nach einem Neustart erhalten. Chats außerhalb eines Projekts („Ohne Gruppe“) lassen sich nicht verschieben; dsh listet sie immer zuletzt.
149
163
  - dsh hat keinen Erweiterungspunkt im Menü der Ansichtsoptionen der Seitenleiste. Deshalb kommt die Option für aktuelle Projekte in das eigene Menü von dsh. Wenn ein dsh-Update dieses Menü ändert, erscheint die Option nicht, und alle Projekte bleiben sichtbar. Der Filter wirkt auf Projektzeilen, daher wird **In einer Liste** nicht gefiltert. Nutze ihn mit **Arbeitsbereich**: In **Arbeitsbereichsbaum** blendet ein ausgeblendeter übergeordneter Ordner auch die aktiven Projekte darin aus. **Nach Status** hat dieselbe Art von Grenze: dsh hat keinen Platz für eine Sortierung. Deshalb hängen sich der Eintrag und die Zeilenreihenfolge an das Menü- und Listen-Markup von dsh.
150
164
  - dsh hat auch kein Menü für Projektzeilen und keinen Platz in der Kopfzeile der Arbeitsbereiche. **Pfad kopieren** findet die Projektzeile über das Zeilen-Markup von dsh. **Alle Projekte einklappen** sitzt in der Kopfzeile von dsh und schließt jedes geöffnete Projekt mit demselben Klick wie die Projektzeile. Wenn ein dsh-Update dieses Markup ändert, zeigt ein Rechtsklick das Menü des Browsers, und die Schaltfläche erscheint nicht.
165
+ - dsh hat auch im Projektmenü eines neuen Chats keinen Erweiterungspunkt. Deshalb hängen sich das Feld **Projekte durchsuchen** und die A–Z-Reihenfolge an das Menü-Markup von dsh. Wenn ein dsh-Update dieses Markup ändert, erscheint das Menü so, wie dsh es zeichnet: in der gespeicherten Reihenfolge und ohne das Feld. Die A–Z-Reihenfolge ist nur eine Ansicht: Sie ändert die gespeicherte Projektreihenfolge von dsh nicht.
166
+ - dsh hat auch für einen Hinweis im Eingabefeld keinen Erweiterungspunkt. Deshalb liegt der Text von **Vorhersage der nächsten Nachricht** über dem eigenen Platzhalter von dsh (`[data-composer-placeholder]`). Wenn ein dsh-Update dieses Markup ändert, erscheint keine Vorhersage. Solange die Funktion an ist, kostet jede beendete Runde einen kurzen Modellaufruf.
167
+ - Der Text von **Beim Tippen vervollständigen** erscheint über den eigenen Eingabehinweis von dsh (den Stil `--dsh-composer-hint`, den dsh für den Argumenthinweis eines Slash-Befehls nutzt). Die Funktion läuft nicht bei einem Slash-Befehl, bei einer Nachricht mit einem Datei- oder Symbol-Chip oder wenn der Cursor nicht am Ende der Nachricht steht. Wenn ein dsh-Update diesen Stil ändert, erscheint keine Vervollständigung. Jede Pause beim Tippen kostet einen Modellaufruf.
151
168
  - Eingebaute Unterstützung ist upstream angefragt: `move` für die Warteschlange in [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), ein Zustand für Fortsetzen in [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
152
169
 
153
170
  ## Häufige Fragen
@@ -170,6 +187,8 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
170
187
 
171
188
  **Setzt dsh laufende Chats fort, nachdem ich es beendet und wieder geöffnet habe?** Nicht von selbst: dsh markiert eine solche Runde als unterbrochen und wartet (ein Ziel wartet auch auf `/goal resume`). Schalte **Einstellungen → Composer Plus → Nach Neustart fortsetzen** ein: Die Chats, die beim Beenden von dsh gearbeitet haben, machen dann beim nächsten Start von selbst weiter.
172
189
 
190
+ **Welches Modell schreibt die Vorhersage?** Das Modell, das du unter **Einstellungen → Composer Plus → Vorhersage der nächsten Nachricht → Modell** wählst. Die Liste ist die eigene Modellliste von dsh. **dsh-Standard** folgt dem Standardmodell von dsh. Wenn dsh das gewählte Modell nicht mehr listet, nutzt die Vorhersage den Standard. **Beim Tippen vervollständigen** hat ein eigenes Menü **Modell**: **Wie Vorhersage der nächsten Nachricht** (der Standard) folgt dem Modell der Vorhersage. Eine andere Wahl gilt nur für Vervollständigungen. Wenn dsh dieses Modell nicht mehr listet, nutzen Vervollständigungen das Modell der Vorhersage.
191
+
173
192
  **Wie ordne ich eingereihte Nachrichten in dsh neu?** Ziehe den Griff ⠿ an einer eingereihten Nachricht, oder setze den Fokus darauf und drücke `↑` / `↓`.
174
193
 
175
194
  **Wie verhindere ich, dass die automatische Prüfung in einem Chat immer wieder nach demselben Tool fragt?** Klicke auf der Genehmigungskarte auf **Für diesen Chat zulassen**. Das gilt nur für genau dieses Tool in diesem Chat. Widerrufe es über den Chip in der Kopfzeile.
@@ -184,7 +203,7 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
184
203
 
185
204
  **Wie stelle ich die Oberfläche von DeepSeek Harness auf Türkisch, Spanisch, Japanisch … um?** Einstellungen → Composer Plus → **App-Sprache**.
186
205
 
187
- **Wie nutze ich dsh von meinem iPhone aus?** Baue die Tether-App aus `tether/ios` (Xcode). Schalte **Einstellungen → Composer Plus → Mobile Verbindung (iPhone)** ein und klicke unten links auf **Mobile Verbindung**. Scanne den QR-Code in Tether und klicke auf **Approve**. Unterwegs nutzt du Tailscale auf beiden Geräten.
206
+ **Wie nutze ich dsh von meinem iPhone aus?** Baue die Tether-App aus `tether/ios` (Xcode). Schalte **Einstellungen → Composer Plus → Mobile Verbindung (iPhone)** ein und klicke unten links auf **Mobile Verbindung**. Scanne den QR-Code (mit der iPhone-Kamera oder mit **Scan code** in Tether), tippe auf **Connect** und klicke auf **Approve**. Unterwegs nutzt du Tailscale auf beiden Geräten.
188
207
 
189
208
  **Funktioniert es mit der Desktop-App?** Ja: Einstellungen → Plugins → **Plugin hinzufügen** → `dsh-composer-plus`. Getestet mit dsh 0.2.0-rc.2 (Desktop und Web) und 0.2.1-rc.2 (Web).
190
209
 
@@ -208,8 +227,10 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/
208
227
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
209
228
  # Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
210
229
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-resume-restart.mjs /path/to/dsh/lib/bin.js
211
- # Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list + its thumbnail
230
+ # Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list, a focus topic chip, Copy as checklist + its thumbnail
212
231
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
232
+ # Export chat as Markdown (fake model, made-up project): right-click → Export as Markdown…, copy and save keep the code blocks, switch off + its thumbnail
233
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-export-markdown.mjs /path/to/dsh/lib/bin.js
213
234
  # Content search (fake model, made-up chats): a message-only word finds its chat with the snippet, switch off + restart = titles only + its thumbnail
214
235
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
215
236
  # Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails
package/README.es.md CHANGED
@@ -8,13 +8,13 @@
8
8
 
9
9
  Esta es una traducción. La versión de referencia es el [README.md](README.md) en inglés.
10
10
 
11
- Mejoras de comodidad al estilo de Codex para la interfaz de escritorio y web de [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh): un panel de cambios, ideas de funciones en tarjetas que se deslizan, búsqueda en el texto de los mensajes desde la barra lateral, revertir turnos con restauración de archivos, eliminar chats a la Papelera, el nombre del proyecto debajo del editor, el estado del proyecto en la barra lateral, historial de entrada, un atajo para el modo plan, Continuar con un clic, reanudar los chats en ejecución tras un reinicio, arrastrar y soltar en la cola, enlaces directos a sesiones, permisos de la revisión automática por chat, notificaciones en segundo plano, acceso desde el iPhone con la app Tether y actualizaciones automáticas.
11
+ Mejoras de comodidad al estilo de Codex para la interfaz de escritorio y web de [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh): un panel de cambios, ideas de funciones en tarjetas que se deslizan, búsqueda en el texto de los mensajes desde la barra lateral, revertir turnos con restauración de archivos, eliminar chats a la Papelera, el nombre del proyecto debajo del editor, el estado del proyecto en la barra lateral, historial de entrada, un atajo para el modo plan, Continuar con un clic, reanudar los chats en ejecución tras un reinicio, arrastrar y soltar en la cola, enlaces directos a sesiones, exportar el chat como Markdown, permisos de la revisión automática por chat, notificaciones en segundo plano, acceso desde el iPhone con la app Tether y actualizaciones automáticas.
12
12
 
13
- **En una línea:** un único plugin de DeepSeek Harness (npm `dsh-composer-plus`, que aparece como **Composer Plus** en Configuración → Plugins) que añade un panel de cambios de git, tarjetas de ideas de funciones al estilo de Tinder, una búsqueda en la barra lateral que también encuentra palabras dentro de los mensajes, la reversión de turnos con ↶ (solo el chat, o el chat y los archivos), Eliminar chat, el nombre del proyecto debajo del editor, el historial de entrada con ↑/↓, un interruptor de `/plan` con Shift+Tab, ▶ Continuar con un clic, Reanudar tras reiniciar, reordenar la cola arrastrando y soltando, Copiar enlace de sesión, “Permitir en este chat” para la revisión automática, notificaciones en segundo plano, acceso desde el iPhone (Conexión móvil, app Tether), 11 idiomas adicionales para la interfaz y actualizaciones automáticas.
13
+ **En una línea:** un único plugin de DeepSeek Harness (npm `dsh-composer-plus`, que aparece como **Composer Plus** en Configuración → Plugins) que añade un panel de cambios de git, tarjetas de ideas de funciones al estilo de Tinder, una búsqueda en la barra lateral que también encuentra palabras dentro de los mensajes, la reversión de turnos con ↶ (solo el chat, o el chat y los archivos), Eliminar chat, el nombre del proyecto debajo del editor, el historial de entrada con ↑/↓, un interruptor de `/plan` con Shift+Tab, ▶ Continuar con un clic, Reanudar tras reiniciar, reordenar la cola arrastrando y soltando, Copiar enlace de sesión, Exportar como Markdown, “Permitir en este chat” para la revisión automática, notificaciones en segundo plano, acceso desde el iPhone (Conexión móvil, app Tether), 11 idiomas adicionales para la interfaz y actualizaciones automáticas.
14
14
 
15
15
  <p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness con Composer Plus: el proyecto en ejecución muestra un indicador de carga en la barra lateral y el panel de cambios muestra un diff de git"></p>
16
16
 
17
- Plugin comunitario no oficial. Las únicas llamadas de red son las de la comprobación de actualizaciones (las versiones publicadas en GitHub y el registro de npm). Desactiva **Actualizaciones automáticas** para que no se hagan al iniciar. **Ideas de funciones** llama al modelo de tu propio chat solo cuando haces clic en **Sugerir funciones**. **Conexión móvil** (desactivada de forma predeterminada) acepta conexiones del iPhone desde tu red local o tu tailnet solo después de que la actives.
17
+ Plugin comunitario no oficial. Las únicas llamadas de red son las de la comprobación de actualizaciones (las versiones publicadas en GitHub y el registro de npm). Desactiva **Actualizaciones automáticas** para que no se hagan al iniciar. **Ideas de funciones** llama al modelo de tu propio chat solo cuando haces clic en **Sugerir funciones**. **Predicción del siguiente mensaje** (activada de forma predeterminada) llama al modelo elegido en Configuración (el predeterminado de dsh, salvo que elijas otro) una vez después de cada turno terminado, sin ningún clic. Desactívala en **Configuración → Composer Plus** para detener estas llamadas. **Completar al escribir** (desactivado de forma predeterminada) llama al modelo elegido para esta función (de forma predeterminada, el de la predicción) en cada pausa mientras escribes, después de que lo actives. **Conexión móvil** (desactivada de forma predeterminada) acepta conexiones del iPhone desde tu red local o tu tailnet solo después de que la actives.
18
18
 
19
19
  ## Instalación
20
20
 
@@ -29,14 +29,14 @@ 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.10.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.11.1`.
33
33
 
34
34
  ## Funciones
35
35
 
36
36
  | Función | Cómo usarla | Captura |
37
37
  |---|---|---|
38
38
  | **Panel de cambios** | Barra lateral derecha → `+` → **Cambios**. Elige **Sin confirmar**, **Sin preparar**, **Preparados** o **Rama** para ver los archivos cambiados con sus contadores `+/-`; haz clic en un archivo para ver su diff. **Último turno** abre la revisión propia de dsh del último turno. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Captura del Panel de cambios"></a> |
39
- | **Ideas de funciones** | Barra lateral derecha → `+` → **Ideas de funciones** → **Sugerir funciones**. El modelo del propio chat lee un breve resumen del proyecto del chat (los archivos del nivel superior, el principio del README y del manifiesto, los últimos 15 commits) y sugiere hasta 8 funciones. Las muestra como un montón de tarjetas en el idioma de la interfaz de dsh. Desliza una tarjeta hacia la derecha (o haz clic en **✓**, o pulsa `→`; en todos los casos la tarjeta sale volando hacia su lado) para iniciar un nuevo chat en el mismo proyecto: empieza en modo plan con la idea como petición, así que nada cambia antes de que apruebes el plan. Para saltarte el plan, haz clic en **▶ Crear ahora** (o pulsa `↑`; la tarjeta sale volando hacia arriba): el nuevo chat empieza enseguida con la idea como una petición normal, y el modelo hace el cambio y ejecuta sus comprobaciones (las aprobaciones se aplican como siempre). Desliza hacia la izquierda (o **✕**, o `←`) para omitirla; **Deshacer** (o `Z`) recupera una tarjeta omitida. Haz clic en **↓** (o pulsa `↓`) para guardar una buena idea para más tarde: va a la lista **Después** del proyecto, que aparece en todos los chats de la misma carpeta de proyecto (también tras un reinicio). **Después (N)** abre la lista; **Planificar** inicia el mismo chat en modo plan para la idea y **Crear ahora**, el chat sin plan; los dos la quitan de la lista. **Planificar todo (N)** inicia un solo chat en modo plan para todas las ideas de la lista, así que las partes comunes se planifican una sola vez. **Quitar de la lista** la elimina. **Más ideas** añade tarjetas. Las ideas no se sugieren dos veces en un proyecto: cada idea sugerida (omitida, guardada o iniciada) va al **Historial** del proyecto, se le indica al modelo que no vuelva a sugerirlas y se descarta un título repetido. **Historial** las muestra como **Iniciada** o **Sugerida**; **Olvidar** (u **Olvidar todo**) deja que una vuelva a aparecer; una idea que sigue en la lista **Después** queda fuera de las sugerencias hasta que la quitas de allí. El modelo solo se ejecuta cuando haces clic. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Captura de Ideas de funciones"></a> |
39
+ | **Ideas de funciones** | Barra lateral derecha → `+` → **Ideas de funciones** → **Sugerir funciones**. El modelo del propio chat lee un breve resumen del proyecto del chat (los archivos del nivel superior, el principio del README y del manifiesto, los últimos 15 commits) y sugiere hasta 8 funciones. Las muestra como un montón de tarjetas en el idioma de la interfaz de dsh. Desliza una tarjeta hacia la derecha (o haz clic en **✓**, o pulsa `→`; en todos los casos la tarjeta sale volando hacia su lado) para iniciar un nuevo chat en el mismo proyecto: empieza en modo plan con la idea como petición, así que nada cambia antes de que apruebes el plan. Para saltarte el plan, haz clic en **▶ Crear ahora** (o pulsa `↑`; la tarjeta sale volando hacia arriba): el nuevo chat empieza enseguida con la idea como una petición normal, y el modelo hace el cambio y ejecuta sus comprobaciones (las aprobaciones se aplican como siempre). Desliza hacia la izquierda (o **✕**, o `←`) para omitirla; **Deshacer** (o `Z`) recupera una tarjeta omitida. Haz clic en **↓** (o pulsa `↓`) para guardar una buena idea para más tarde: va a la lista **Después** del proyecto, que aparece en todos los chats de la misma carpeta de proyecto (también tras un reinicio). **Después (N)** abre la lista; **Planificar** inicia el mismo chat en modo plan para la idea y **Crear ahora**, el chat sin plan; los dos la quitan de la lista. **Planificar todo (N)** inicia un solo chat en modo plan para todas las ideas de la lista, así que las partes comunes se planifican una sola vez. **Quitar de la lista** la elimina. **Copiar como lista de tareas** copia toda la lista al portapapeles como una lista de tareas de Markdown (`- [ ] Title — Summary`, una línea por idea) para un gestor de incidencias o un archivo TODO; no hace ninguna llamada de red. **Más ideas** añade tarjetas. Para recibir ideas sobre un solo tema, escribe un **Tema de enfoque** corto en el campo junto a **Sugerir funciones** (como máximo 80 caracteres; `Enter` también pide sugerencias), o haz clic en uno de los temas fijos que hay debajo: **Rendimiento**, **Accesibilidad**, **Pruebas**, **Seguridad**, **Usabilidad** o **Documentación** (haz clic otra vez para quitarlo). Entonces el modelo solo sugiere funciones sobre ese tema; un campo vacío significa cualquier función. Las ideas no se sugieren dos veces en un proyecto: cada idea sugerida (omitida, guardada o iniciada) va al **Historial** del proyecto, se le indica al modelo que no vuelva a sugerirlas y se descarta un título repetido. **Historial** las muestra como **Iniciada** o **Sugerida**; **Olvidar** (u **Olvidar todo**) deja que una vuelva a aparecer; una idea que sigue en la lista **Después** queda fuera de las sugerencias hasta que la quitas de allí. El modelo solo se ejecuta cuando haces clic. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Captura de Ideas de funciones"></a> |
40
40
  | **Búsqueda en el contenido** | La búsqueda propia de la barra lateral de dsh (la lupa junto a **Espacios de trabajo**; `Cmd+K` en la app de escritorio, `Cmd+Alt+K` en un navegador) también encuentra chats por las palabras de tus mensajes y de las respuestas, no solo por el título, y muestra el texto que coincide debajo del chat. dsh ya incluye esta búsqueda, pero viene desactivada; esta función la activa con un archivo de índice de búsqueda en tu equipo. El índice se crea en la primera búsqueda después de iniciar dsh (unos 15 s para 250 chats, consulta Límites) y se conserva para los siguientes inicios. Activada de forma predeterminada; un cambio se aplica después de reiniciar dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Captura de Búsqueda en el contenido"></a> |
41
41
  | **Revertir turno** | Pasa el puntero por encima de uno de tus mensajes y haz clic en **↶** (junto a Copiar). **Solo el chat** quita ese mensaje y todo lo que viene después (respuestas, llamadas a herramientas) del chat y del contexto del modelo, y vuelve a poner el mensaje en el editor: cámbialo y envíalo de nuevo. **Chat y archivos** primero muestra los archivos del proyecto que cambiaron desde ese mensaje y después también los devuelve a su estado anterior, incluidos los cambios hechos por comandos (`bash`), no solo por las herramientas de edición de dsh. Si hay un turno en ejecución, primero se detiene. El registro del chat nunca se reescribe: un marcador oculto esconde la parte retirada, igual que el propio `/compact` de dsh esconde los mensajes antiguos. Si [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) está instalado, ese plugin hace este trabajo y Composer Plus no muestra un segundo botón. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Captura de Revertir turno"></a> |
42
42
  | **Eliminar chat** | Barra lateral → menú **…** de un chat (o clic derecho) → **Eliminar…** → **Eliminar**. dsh por sí solo solo puede archivar. El chat se detiene (su turno, sus trabajos en segundo plano, sus subagentes y sus recordatorios, igual que con el archivado propio de dsh) y su historial guardado, con los chats de sus subagentes, se mueve a la Papelera de macOS (en otros sistemas: `$DSH_HOME/trash`). Para recuperarlo, devuelve la carpeta a su sitio y reinicia dsh: aparece en la vista **Solo archivadas** de la barra lateral. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Captura de Eliminar chat"></a> |
@@ -44,11 +44,15 @@ Después, reinicia dsh. (La CLI no puede instalar en el perfil de escritorio: de
44
44
  | **Historial de entrada** | Con el editor vacío, pulsa `↑` / `↓` para recorrer los mensajes que enviaste, como en una terminal. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Captura de Historial de entrada"></a> |
45
45
  | **Modo plan con Shift+Tab** | `Shift+Tab` añade `/plan ` al principio del borrador (púlsalo otra vez para quitarlo). Si el chat ya está en modo plan, `Shift+Tab` sale de él. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Captura de Modo plan con Shift+Tab"></a> |
46
46
  | **Mantener el foco en el editor** | Después de enviar un comando `/` o una skill, el cursor se queda en el editor y puedes volver a escribir enseguida. También funciona con macros de teclado que escriben un comando y pulsan `Enter`. dsh pone el editor en solo lectura mientras resuelve el comando, y entonces el navegador le quita el foco. Esta función le devuelve el foco, salvo que lo tenga un menú, un diálogo u otro campo. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Captura de Mantener el foco en el editor"></a> |
47
- | **Continuar con un clic** | Después de un turno detenido, fallido o cortado, el editor vacío muestra **▶**. Un clic reanuda la conversación existente sin escribir en el campo de entrada ni añadir un mensaje visible al chat (el modelo recibe una breve nota oculta de “continúa desde donde te detuviste”, porque algunos proveedores, como Claude, rechazan una petición que termina con una respuesta del asistente). Un turno completado mantiene el botón normal de enviar. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Captura de Continuar con un clic"></a> |
47
+ | **Continuar con un clic** | Después de un turno detenido, fallido o cortado, el editor vacío muestra **▶**. Un clic reanuda la conversación existente sin escribir en el campo de entrada ni añadir un mensaje visible al chat (el modelo recibe una breve nota oculta de “continúa desde donde te detuviste”, porque algunos proveedores, como Claude, rechazan una petición que termina con una respuesta del asistente). Los mensajes de la cola se quedan en ella: ▶ continúa solo la tarea detenida y después se ejecuta la cola. Un turno completado mantiene el botón normal de enviar. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Captura de Continuar con un clic"></a> |
48
48
  | **Reanudar tras reiniciar** | Desactivada de forma predeterminada: actívala en **Configuración → Composer Plus**. Si sales de dsh (o se cierra) mientras un chat está trabajando, ese chat continúa solo cuando vuelves a abrir dsh, con la misma nota oculta que Continuar con un clic. Si había una ronda de un objetivo (`/goal`) en ejecución, el objetivo sigue con su siguiente ronda (dsh pausa los objetivos en cada inicio hasta que los reanudas). Los chats que detuviste, que terminaron o que fallaron no continúan. dsh no tiene ningún ajuste para esto: solo marca ese turno como interrumpido. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Captura de Reanudar tras reiniciar"></a> |
49
49
  | **Arrastrar y soltar en la cola** | Los mensajes en cola tienen un asa (⠿). Arrástrala para reordenar, o pon el foco en el asa y pulsa `↑` / `↓`. `Esc` cancela. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Captura de Arrastrar y soltar en la cola"></a> |
50
50
  | **Copiar enlace de sesión** | Haz clic derecho en un chat de la barra lateral → **Copiar enlace de sesión**. Pega el enlace `dsh-session:…` en otro chat para adjuntar ese chat como contexto de solo lectura. dsh 0.2.1 tiene su propia opción **Copiar ID de sesión**, que copia solo el id; esta opción aparece justo después. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Captura de Copiar enlace de sesión"></a> |
51
+ | **Exportar chat como Markdown** | Haz clic derecho en un chat de la barra lateral (o abre su menú **…**) → **Exportar como Markdown…**. Un diálogo muestra cuántos mensajes tiene el chat. **Copiar al portapapeles** copia el chat como Markdown y **Guardar archivo .md** lo guarda como `<chat title>.md` mediante la descarga del navegador (en la app de escritorio de dsh: en tu carpeta Descargas o con un diálogo para guardar, según la configuración de tu sistema). El archivo tiene el título del chat, el nombre del proyecto y la fecha, y después una sección `## Tú` o `## Asistente` por cada mensaje. Los bloques de código quedan como están; un bloque de código que un mensaje deja abierto se cierra. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Captura de Exportar chat como Markdown"></a> |
51
52
  | **Copiar ruta del proyecto** | Haz clic derecho en un proyecto de la barra lateral → **Copiar ruta** copia la ruta completa de su carpeta. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Captura de Copiar ruta del proyecto"></a> |
53
+ | **Búsqueda de proyectos en un chat nuevo** | Chat nuevo → el botón de proyecto encima del editor. Los proyectos aparecen en orden A–Z, con un cuadro **Buscar proyectos** arriba. Escribe parte de un nombre (sin distinguir mayúsculas ni acentos) y pulsa `Enter` para elegir la primera coincidencia. Si nada coincide, aparece **Ningún proyecto coincide**. El orden de proyectos guardado de dsh en la barra lateral no cambia. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Captura de Búsqueda de proyectos en un chat nuevo"></a> |
54
+ | **Predicción del siguiente mensaje** | Activada de forma predeterminada; puedes desactivarla en **Configuración → Composer Plus**. Cuando el agente termina un turno (no uno detenido o fallido), el editor vacío muestra en gris una predicción de tu siguiente mensaje, con la indicación **Tab para aceptar**. `Tab` pone el texto en el editor, pero no lo envía. `Esc` la oculta durante ese turno. Si empiezas a escribir, también se oculta, y un turno nuevo la sustituye. El menú **Modelo** bajo el interruptor muestra los modelos propios de dsh (la misma lista que el menú de modelos de dsh). **Predeterminado de dsh** está seleccionado de forma predeterminada y sigue el modelo predeterminado de dsh. Cada turno terminado cuesta una llamada breve al modelo. En Tether, la predicción aparece encima del editor vacío: tócala para ponerla en el campo. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Captura de Predicción del siguiente mensaje"></a> |
55
+ | **Completar al escribir** | Desactivado de forma predeterminada; puedes activarlo en **Configuración → Composer Plus**. Mientras escribes, un texto gris justo después del cursor muestra cómo puede seguir tu mensaje. `Tab` lo añade al mensaje, pero no lo envía. `Esc` lo oculta. Si escribes las letras siguientes del texto gris, este se mantiene, sin una nueva llamada al modelo. Tiene su propio menú **Modelo** bajo su interruptor. Su primera opción, **Igual que la predicción del siguiente mensaje**, usa el modelo de **Predicción del siguiente mensaje** (es la opción predeterminada); elige otro modelo para usar uno distinto en cada función, por ejemplo un modelo más rápido para las compleciones. Hace una llamada al modelo en cada pausa mientras escribes, así que gasta muchos más tokens que la predicción: elige un modelo rápido y de bajo coste. No se ejecuta con un comando de barra, con un mensaje que tenga un chip de archivo ni cuando el cursor no está al final. En Tether, el resto aparece encima del campo mientras escribes: tócalo para añadirlo. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Captura de Completar al escribir"></a> |
52
56
  | **Permitir en este chat** | Cuando la revisión automática te pregunta, la tarjeta de aprobación muestra **Permitir en este chat**: a partir de entonces, la misma herramienta en el mismo chat queda permitida, con cualquier argumento. Un chip en la cabecera muestra los permisos concedidos y permite revocarlos. Los permisos se mantienen tras un reinicio. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Captura de Permitir en este chat"></a> |
53
57
  | **Estado del proyecto** | La fila de un proyecto en la barra lateral muestra el mismo indicador de en ejecución / en espera / terminado que sus chats, así que un proyecto contraído también te dice que un chat de dentro está trabajando o te necesita. Primero se muestra un chat que te espera, luego un chat terminado que aún no has abierto (el punto verde, también mientras otro chat sigue en ejecución) y luego el indicador de en ejecución. Pasa el puntero por encima para ver los detalles. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Captura de Estado del proyecto"></a> |
54
58
  | **Proyectos activos primero** | Cuando un chat empieza a ejecutarse o te necesita, su proyecto sube al principio de la barra lateral con la animación de filas propia de dsh (el mismo movimiento que al arrastrarlo allí). Los proyectos terminados se quedan donde están; arrástralos a donde quieras, como siempre. Los movimientos se guardan en el orden de proyectos de dsh, así que al desactivar esta función se mantiene el orden actual. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Captura de Proyectos activos primero"></a> |
@@ -57,14 +61,14 @@ Después, reinicia dsh. (La CLI no puede instalar en el perfil de escritorio: de
57
61
  | **Ordenar por estado** | Barra lateral → opciones de vista → **Ordenar por** → **Por estado** (con **En una sola lista**). Primero aparecen los chats terminados (el punto de “terminado” de dsh, que también recibe un turno que acabó con un error), luego los chats en ejecución o en espera, luego los chats con una automatización activa (Tareas automatizadas) y, por último, el resto en el orden de dsh. Al abrir un chat terminado, este baja. Solo cambia la vista: selecciona **Manual** o **Última actualización** para volver. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Captura de Ordenar por estado"></a> |
58
62
  | **Notificaciones en segundo plano** | Mientras dsh está en segundo plano, recibes una notificación cuando un turno termina (la primera línea de la respuesta) o cuando un chat de verdad te espera: una aprobación (el nombre de la herramienta), una respuesta (la pregunta) o la revisión de un plan. Una solicitud tiene que seguir abierta 1,5 s después, así que las aprobaciones que se responden automáticamente (permisos de la revisión automática, otros plugins) no generan ningún aviso, y una notificación se retira en cuanto se responde su solicitud. La insignia del Dock o de la barra de tareas cuenta los chats en espera. Al hacer clic se abre ese chat. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Captura de Notificaciones en segundo plano"></a> |
59
63
  | **11 idiomas adicionales para la interfaz** | Configuración → Composer Plus → **Idioma de la aplicación** cambia toda la interfaz de dsh a Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt o हिन्दी (consulta más abajo). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Captura de los 11 idiomas adicionales para la interfaz"></a> |
60
- | **Conexión móvil (iPhone)** | Usa dsh desde tu iPhone con la app [Tether](tether/), en la misma red Wi-Fi o a través de [Tailscale](https://tailscale.com). Actívala en **Configuración → Composer Plus** (está desactivada de forma predeterminada, porque abre un puerto de red en este Mac). Después haz clic en **Conexión móvil**, abajo a la izquierda de la barra lateral: escanea el código QR en Tether y haz clic en **Approve**. El teléfono muestra tus chats, envía mensajes, responde aprobaciones y preguntas, y cambia de modelo y de agente. Empareja todos los Mac que quieras: el nombre del Mac, arriba a la izquierda en la app, te permite cambiar entre ellos. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Captura de Conexión móvil"></a> |
64
+ | **Conexión móvil (iPhone)** | Usa dsh desde tu iPhone con la app [Tether](tether/), en la misma red Wi-Fi o a través de [Tailscale](https://tailscale.com). Actívala en **Configuración → Composer Plus** (está desactivada de forma predeterminada, porque abre un puerto de red en este Mac). Después haz clic en **Conexión móvil**, abajo a la izquierda de la barra lateral: escanea el código QR con la Cámara del iPhone (toca **Open in Tether**) o con **Scan code** en Tether, toca **Connect** y haz clic en **Approve**. Primero instala Tether: sin la app, la Cámara no puede abrir el código. El teléfono muestra tus chats, envía mensajes, responde aprobaciones y preguntas, y cambia de modelo y de agente. Empareja todos los Mac que quieras: el nombre del Mac, arriba a la izquierda en la app, te permite cambiar entre ellos. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Captura de Conexión móvil"></a> |
61
65
  | **Actualizaciones automáticas** | Al iniciar dsh, el plugin consulta la [última versión publicada en GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Si es más reciente y ya está en npm, instala esa versión exacta con el gestor de plugins propio de dsh (el mismo camino que Configuración → Plugins) y te avisa. **Reinicia dsh** para cargarla. **Configuración → Composer Plus → Actualizaciones de Composer Plus** muestra la versión y tiene los botones **Buscar actualizaciones** / **Actualizar ahora**. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Captura de Actualizaciones automáticas"></a> |
62
66
 
63
67
  Los botones, la información emergente, los avisos y las notificaciones siguen el idioma elegido en dsh (consulta Idioma de la aplicación más abajo).
64
68
 
65
69
  ## Configuración
66
70
 
67
- Cada función se puede activar o desactivar por separado en **Configuración → Composer Plus** de dsh. Cada fila tiene una captura pequeña: pasa el puntero por encima para ver una vista previa más grande, o haz clic para abrirla a tamaño completo (`Esc` la cierra). El cuadro **Buscar funciones** de la parte superior filtra la página por nombre o descripción (en cualquier idioma, sin distinguir mayúsculas ni acentos); `Esc` lo vacía. Cada fila tiene un interruptor y una breve descripción. Los cambios se aplican de inmediato, sin reiniciar, y se recuerdan en ese dispositivo. Todo está activado de forma predeterminada, salvo **Conexión móvil** y **Reanudar tras reiniciar**. El Host de dsh guarda los interruptores de estas dos funciones y los de **Búsqueda en el contenido** y **Revertir turno**, así que se aplican a todas las ventanas y se mantienen tras un reinicio. **Búsqueda en el contenido** solo cambia después de reiniciar dsh (dsh la lee al iniciar); hasta entonces, su fila dice **Reinicia dsh para aplicar este cambio.**
71
+ Cada función se puede activar o desactivar por separado en **Configuración → Composer Plus** de dsh. Cada fila tiene una captura pequeña: pasa el puntero por encima para ver una vista previa más grande, o haz clic para abrirla a tamaño completo (`Esc` la cierra). El cuadro **Buscar funciones** de la parte superior filtra la página por nombre o descripción (en cualquier idioma, sin distinguir mayúsculas ni acentos); `Esc` lo vacía. Cada fila tiene un interruptor y una breve descripción. Los cambios se aplican de inmediato, sin reiniciar, y se recuerdan en ese dispositivo. Todo está activado de forma predeterminada, salvo **Conexión móvil**, **Reanudar tras reiniciar** y **Completar al escribir**. El Host de dsh guarda los interruptores de estas tres funciones y los de **Búsqueda en el contenido**, **Revertir turno** y **Predicción del siguiente mensaje**, así que se aplican a todas las ventanas y se mantienen tras un reinicio. El Host también guarda el **Modelo** elegido para **Predicción del siguiente mensaje** y el de **Completar al escribir** (por defecto **Igual que la predicción del siguiente mensaje**). **Búsqueda en el contenido** solo cambia después de reiniciar dsh (dsh la lee al iniciar); hasta entonces, su fila dice **Reinicia dsh para aplicar este cambio.**
68
72
 
69
73
  <p align="center"><img src="docs/images/settings.webp" width="720" alt="Configuración → Composer Plus: búsqueda de funciones, selector de idioma, fila de actualizaciones y un interruptor por función, con una vista previa de la captura al pasar el puntero"></p>
70
74
 
@@ -92,6 +96,12 @@ Cada paquete tiene 3143 textos: todos los textos de la interfaz de dsh `0.2.0-rc
92
96
  | `↓` | página Ideas de funciones | guardar la tarjeta superior en la lista Después del proyecto |
93
97
  | `↑` | página Ideas de funciones | crear ahora la tarjeta superior, sin plan |
94
98
  | `Z` | página Ideas de funciones | recuperar la última tarjeta omitida |
99
+ | `Enter` | menú de proyectos de un chat nuevo, cuadro de búsqueda | elegir la primera coincidencia |
100
+ | `↑` / `↓` | menú de proyectos de un chat nuevo | moverse por los proyectos que se muestran |
101
+ | `Esc` | menú de proyectos de un chat nuevo, cuadro de búsqueda | borrar la búsqueda (púlsala otra vez para cerrar el menú) |
102
+ | `Tab` | editor vacío con una predicción | poner la predicción en el editor |
103
+ | `Tab` | compleción gris tras el cursor | añadir la compleción al mensaje |
104
+ | `Esc` | editor vacío con una predicción | ocultar la predicción |
95
105
 
96
106
  Un menú `/` o `@` abierto se queda con estas teclas.
97
107
 
@@ -108,16 +118,19 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
108
118
  - **Ideas de funciones:** no se ejecuta nada hasta que haces clic en **Sugerir funciones**. Entonces la parte Host lee solo la carpeta del propio chat (el navegador nunca envía una ruta): los nombres de las entradas del nivel superior, los primeros 6 kB del README, de AGENTS.md y del manifiesto (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …) y `git log --oneline -15`, con un máximo de 16 kB en total. Omite `.env*`, los archivos de claves y carpetas como `node_modules`, y solo lee archivos normales que estén dentro de la carpeta: omite los enlaces simbólicos que apuntan fuera de la carpeta, los FIFO y los dispositivos. Este resumen va al modelo que usa el chat, con los ajustes de proveedor propios de dsh, en una sola petición; no se añade a ningún chat. No se escribe nada en el proyecto. Una idea deslizada a la derecha inicia un nuevo chat en modo plan, así que las aprobaciones y la revisión del plan se aplican como siempre. **Crear ahora** inicia el chat sin modo plan: el modelo puede cambiar archivos enseguida, con las aprobaciones habituales del chat y la revisión automática. Las ideas guardadas para después (título, resumen, motivo, esfuerzo) se guardan junto con la ruta de la carpeta del proyecto en `storages/dsh-composer-plus/later.json`, dentro del directorio home de dsh (archivo solo para el propietario); nada va al proyecto. El historial de ideas sugeridas (título, resumen, motivo, esfuerzo, fecha, si se inició) se guarda de la misma forma en `storages/dsh-composer-plus/idea-history.json`, como máximo 200 por proyecto (las más antiguas salen primero); sus títulos van al modelo con el siguiente **Sugerir funciones** de ese proyecto.
109
119
  - **Búsqueda en el contenido:** ningún código nuevo busca en tus chats: el plugin solo activa el índice de mensajes propio de dsh (SQLite FTS5, `dsh-session-query-sqlite`) y le da un archivo, `$DSH_HOME/cache/composer-plus/session-search.db` (archivo y carpeta solo para el propietario). El archivo contiene el texto de tus mensajes y de los del asistente, así que es tan privado como los registros de chat de `$DSH_HOME/sessions`. Nada sale de tu equipo. Es una copia que dsh puede volver a crear: puedes eliminarla mientras dsh está cerrado. El interruptor está en `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
110
120
  - **Revertir turno:** antes de cada uno de tus mensajes, el Host toma una instantánea git de la carpeta del chat en su propio almacén, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (carpeta solo para el propietario). Contiene copias de los archivos de esa carpeta que git ve (no de los archivos ignorados), así que es tan privado como el proyecto. Lee los objetos de tu repositorio (no copia lo que git ya tiene) y nunca escribe en el índice, el `HEAD`, las ramas, las etiquetas, el stash ni la configuración de tu repositorio; el único cambio que git hace allí es una marca de tiempo más reciente en los archivos de objetos que reutiliza (esto retrasa su limpieza con `git gc`). Una reversión con archivos solo escribe archivos normales dentro de la carpeta del chat; omite los enlaces simbólicos, las tuberías y todo lo que esté fuera de la carpeta. Nada sale de tu equipo. Puedes eliminar el almacén mientras dsh está cerrado (entonces la reversión solo funciona para el chat, hasta que haya mensajes nuevos). **Eliminar chat** también elimina el almacén de ese chat. El interruptor está en `$DSH_HOME/storages/dsh-composer-plus/rollback.json`.
121
+ - **Exportar chat como Markdown:** la parte Host lee solo el registro propio del chat (los mismos mensajes que muestra dsh) y se los pasa a la página; no lee ningún archivo del proyecto y no envía nada por la red. El Markdown va solo a tu portapapeles o al archivo que guardas.
111
122
  - **Eliminar chat:** mueve a la Papelera las carpetas de registro propias del chat (`$DSH_HOME/sessions/<project>/<chat>`). No toca la carpeta del proyecto.
112
123
  - **Permitir en este chat:** los permisos concedidos se guardan en `$DSH_HOME/storages/dsh-composer-plus/grants.json` (archivo con permisos solo para el propietario). Un permiso cubre **una herramienta exacta en un chat**. Si esa herramienta puede escribir, el permiso también cubre cualquier escritura. Revócalo desde el chip de la cabecera.
113
124
  - La revisión automática sigue ejecutándose en cada llamada; los fallos de la revisión nunca se permiten automáticamente.
114
125
  - **Conexión móvil:** desactivada hasta que la actives. Mientras está activada, la parte Host ejecuta la pasarela de Tether: HTTPS en el puerto 19390, que solo acepta tu subred Wi-Fi y tu tailnet (100.64.0.0/10), y una página de emparejamiento en `127.0.0.1:19391` (solo este Mac). Un teléfono necesita un código de un solo uso del código QR (válido 5 minutos) y que hagas clic en **Approve** en el Mac. El teléfono fija el certificado de la pasarela. El Mac solo guarda un hash del token de cada teléfono (30 días, se renueva mientras se usa); **Revoke** cierra de inmediato las conexiones de ese teléfono. Los teléfonos solo pueden llamar a una lista permitida de métodos de dsh (chats, prompts, adjuntos, comandos de barra, aprobaciones, preguntas, modelos, agentes, objetivos), no a la configuración, las credenciales, el explorador de archivos ni la terminal. Datos: `$DSH_HOME/storages/dsh-composer-plus/mobile/`. Detalles: [tether/README.md](tether/README.md).
115
126
  - **Actualizaciones:** la parte Host pide a `api.github.com` la última versión publicada y a `registry.npmjs.org` esa versión exacta; no se envía nada sobre ti ni sobre tus chats. La instalación usa el gestor de plugins de dsh (`pnpm add dsh-composer-plus@<version>`; cuando dsh 0.2.1 lo rechaza para un plugin ya instalado, `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, y después el perfil indica esa URL como origen del plugin), así que se aplican las comprobaciones propias de dsh del registro, de los scripts y de la compatibilidad de versiones. Nunca se instalan etiquetas de prerelease ni versiones anteriores.
127
+ - **Predicción del siguiente mensaje:** activada de forma predeterminada; desactívala en **Configuración → Composer Plus** para detener estas llamadas al modelo. Después de cada turno terminado, la parte Host envía tus propios mensajes del chat y las respuestas de texto del agente (sin salida de herramientas, sin contexto oculto ni razonamiento), como máximo unos 6.000 caracteres (la parte más reciente), al modelo elegido (el predeterminado de dsh, salvo que elijas otro). Va con los ajustes de proveedor propios de dsh, en una sola petición. No se guarda nada en el chat: la predicción no se añade al historial del chat. El interruptor y el modelo elegido están en `$DSH_HOME/storages/dsh-composer-plus/predict.json` (archivo solo para el propietario).
128
+ - **Completar al escribir:** desactivado hasta que lo actives. Mientras está activado, en cada pausa mientras escribes, la parte Host envía el texto que llevas escrito y tus propios mensajes del chat y las respuestas de texto del agente (sin salida de herramientas, sin contexto oculto ni razonamiento), como máximo unos 3.000 caracteres del chat, al modelo elegido en **Completar al escribir** (de forma predeterminada, el modelo de **Predicción del siguiente mensaje**). Una pausa más reciente detiene la petición anterior. No se guarda nada en el chat. El interruptor está en `$DSH_HOME/storages/dsh-composer-plus/complete.json` (archivo solo para el propietario).
116
129
 
117
130
  ## Solución de problemas
118
131
 
119
132
  - **No hay notificaciones en macOS:** Ajustes del Sistema → Notificaciones → DeepSeek Harness → permitir. Elige **Alertas** para que se queden en pantalla.
120
- - **Faltan ▶, las asas de la cola, el estado del proyecto, la opción de proyectos recientes, Contraer todos los proyectos, Copiar ruta, Permitir en este chat o el clic derecho después de actualizar dsh:** estos elementos se enganchan al HTML actual de dsh, porque dsh aún no tiene un espacio para ellos. Si dsh cambia ese marcado, se ocultan solos; nada más se rompe. Por favor, abre una [incidencia](https://github.com/furkancak1r/dsh-composer-plus/issues).
133
+ - **Faltan ▶, las asas de la cola, el estado del proyecto, la opción de proyectos recientes, Contraer todos los proyectos, Copiar ruta, el cuadro de búsqueda de proyectos, la predicción del siguiente mensaje, la compleción al escribir, Permitir en este chat o el clic derecho después de actualizar dsh:** estos elementos se enganchan al HTML actual de dsh, porque dsh aún no tiene un espacio para ellos. Si dsh cambia ese marcado, se ocultan solos; nada más se rompe. Por favor, abre una [incidencia](https://github.com/furkancak1r/dsh-composer-plus/issues).
121
134
  - **«Error al actualizar» o «no se instaló desde npm»:** una copia enlazada desde una carpeta local o renombrada no puede actualizarse sola; reinstala `dsh-composer-plus` desde Configuración → Plugins. En los demás casos, el mensaje muestra la primera línea del error de pnpm; **Buscar actualizaciones** lo vuelve a intentar.
122
135
  - **Conexión móvil dice que la pasarela no está en ejecución:** "no IPv4 address on en0" significa que este Mac no tiene dirección Wi-Fi ni Ethernet; "EADDRINUSE" significa que otro dsh (u otra app) usa el puerto 19390 o 19391. Solo un dsh a la vez puede ejecutar Conexión móvil.
123
136
  - **Conexión móvil, Reanudar tras reiniciar o Búsqueda en el contenido dicen «Reinicia dsh»:** el plugin se actualizó mientras dsh estaba en ejecución (o, en el caso de Búsqueda en el contenido, cambiaste el interruptor); el nuevo estado se carga tras reiniciar.
@@ -126,12 +139,13 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
126
139
  - **Chat y archivos aparece en gris:** el proyecto no es un repositorio git, no hay ninguna instantánea de antes de ese mensaje (el mensaje es anterior al plugin, o una de las 50 instantáneas más recientes la sustituyó), o no cambió ningún archivo.
127
140
  - **Eliminar dice que otro dsh tiene abierto este chat:** un segundo dsh que usa el mismo directorio home de dsh tiene el bloqueo del chat. Cierra esa ventana o ese dsh y vuelve a eliminarlo. Mientras tanto, el chat sigue archivado.
128
141
  - **Un chat no continuó tras un reinicio:** Reanudar tras reiniciar estaba desactivado cuando dsh se cerró, detuviste tú mismo ese turno, el turno ya había terminado (completado o fallido), el chat estaba archivado, o había más de 20 chats en ejecución (continúan los 20 más recientes).
129
- - **La instalación falla justo después de una versión nueva:** añade la versión (`dsh-composer-plus@1.10.0`); consulta la nota de instalación de más arriba.
142
+ - **La instalación falla justo después de una versión nueva:** añade la versión (`dsh-composer-plus@1.11.1`); consulta la nota de instalación de más arriba.
130
143
 
131
144
  ## Límites
132
145
 
133
146
  - Continuar sin mensaje depende del ciclo de vida `agent/pre-step` → `agent/request` de dsh. Vuelve a comprobar la compatibilidad cuando actualices dsh.
134
- - **Ideas de funciones** guarda las tarjetas en memoria para cada chat hasta que dsh o la página se recargan; después, **Sugerir funciones** vuelve a preguntar al modelo. Las tarjetas llegan en el idioma de la interfaz que tiene dsh cuando haces clic; si cambias el idioma, las tarjetas que ya están en el montón conservan el suyo y **Más ideas** usa el nuevo. El modelo solo ve el breve resumen del proyecto, no el código, así que una idea puede repetir algo que el proyecto ya tiene: omítela. El nuevo chat solo se ejecuta en modo plan cuando el perfil tiene el comando `/plan` de dsh; si no, la idea se envía como un primer mensaje normal. La lista **Después** pertenece a la ruta de la carpeta del chat: la misma carpeta abierta a través de un enlace simbólico tiene su propia lista. Guarda como máximo 50 ideas por proyecto (quita una para añadir más) y cada título solo una vez. Arrastrar una tarjeta solo decide entre izquierda y derecha; usa **↓** para guardarla y **▶** para crearla ahora. Una repetición se detecta solo por su título: el modelo aún puede sugerir una idea anterior con otro nombre; omítela. Cuando el modelo responde solo con ideas anteriores, no aparece nada nuevo: vuelve a hacer clic.
147
+ - **Ideas de funciones** guarda las tarjetas en memoria para cada chat hasta que dsh o la página se recargan; después, **Sugerir funciones** vuelve a preguntar al modelo. Las tarjetas llegan en el idioma de la interfaz que tiene dsh cuando haces clic; si cambias el idioma, las tarjetas que ya están en el montón conservan el suyo y **Más ideas** usa el nuevo. El modelo solo ve el breve resumen del proyecto, no el código, así que una idea puede repetir algo que el proyecto ya tiene: omítela. El nuevo chat solo se ejecuta en modo plan cuando el perfil tiene el comando `/plan` de dsh; si no, la idea se envía como un primer mensaje normal. La lista **Después** pertenece a la ruta de la carpeta del chat: la misma carpeta abierta a través de un enlace simbólico tiene su propia lista. Guarda como máximo 50 ideas por proyecto (quita una para añadir más) y cada título solo una vez. Arrastrar una tarjeta solo decide entre izquierda y derecha; usa **↓** para guardarla y **▶** para crearla ahora. Una repetición se detecta solo por su título: el modelo aún puede sugerir una idea anterior con otro nombre; omítela. Cuando el modelo responde solo con ideas anteriores, no aparece nada nuevo: vuelve a hacer clic. Un tema de enfoque muy concreto hace que esto pase más a menudo; usa un tema más amplio o quítalo. El tema de enfoque se queda en el campo de cada chat hasta que dsh o la página se recargan.
148
+ - **Exportar chat como Markdown** incluye solo tus propios mensajes y las respuestas de texto del asistente: se quedan fuera las llamadas a herramientas y su salida, el razonamiento, las imágenes (una línea `[image]` las marca), el contexto oculto y los mensajes que Revertir turno o dsh-rewind-plugin quitaron. Las respuestas de un mismo turno se unen en una sola sección. Una exportación incluye como máximo unos 4 millones de caracteres; de un chat más largo se exporta su primera parte y una nota.
135
149
  - **Reanudar tras reiniciar** continúa el turno; no lo repite. Una llamada a herramienta que estaba en ejecución al cerrar termina con el resultado “outcome unknown” de dsh, y se le indica al modelo que no repita el trabajo terminado, pero un comando que no es seguro ejecutar dos veces puede volver a ejecutarse. Los subagentes, las aprobaciones y las preguntas que estaban abiertos no se restauran: su chat padre continúa y vuelve a preguntar. Como máximo continúan 20 chats en cada inicio.
136
150
 
137
151
  - **Búsqueda en el contenido** es la búsqueda propia de dsh, así que tiene los límites de dsh. Solo busca en los mensajes del usuario y del asistente: no busca en la salida de las herramientas (comandos, contenido de archivos, resultados) ni en el razonamiento, y no tiene ningún filtro por mensajes del usuario, del asistente o de herramientas. Coincide con palabras completas, no con partes de una palabra (`deploy` no encuentra `deployment`); las letras con acento coinciden sin él (`seker` encuentra `şeker`). Muestra una fila por chat, con el fragmento de 240 caracteres de dsh, y como máximo 20 filas.
@@ -139,7 +153,7 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
139
153
  - **Búsqueda en el contenido** solo se aplica después de reiniciar dsh, y todos los dsh que usan el mismo directorio home de dsh comparten el archivo de índice: ejecuta solo uno de esos dsh a la vez (dsh permite un único propietario por archivo de índice).
140
154
  - **Revertir turno** solo restaura archivos en un repositorio git, y solo en la carpeta del chat. Conserva las 50 instantáneas más recientes de cada chat. Los archivos ignorados (`.gitignore`, `info/exclude`, tu archivo global de ignorados), las carpetas vacías, los enlaces simbólicos y los submódulos no se restauran; un archivo que estaba ignorado cuando se tomó la instantánea nunca se elimina, aunque el turno haya cambiado las reglas de ignorado. Un archivo que git no puede leer queda fuera de la instantánea. Cada uno de tus mensajes ejecuta un `git add --all` de la carpeta del chat en el almacén privado: en una carpeta muy grande con muchos archivos sin seguimiento, esto puede tardar unos segundos, y la siguiente llamada a herramienta lo espera (como máximo 10 s; después, la instantánea termina en segundo plano). Si el `git gc` de tu repositorio elimina un objeto que necesita una instantánea antigua, ese archivo aparece como no restaurado. Solo vuelve al editor el texto del mensaje: añade otra vez sus imágenes o archivos. Los chats de subagentes no tienen ↶ (los cambios de archivos de un subagente cuentan como cambios del chat que lo inició). El chat exportado (`/export`) sigue teniendo los mensajes retirados. La idea de un marcador oculto que retira parte de un chat viene de [dsh-rewind-plugin](https://github.com/SiriLee/dsh-rewind) de SiriLee (MIT); Composer Plus no usa nada de su código.
141
155
  - **Eliminar chat** necesita el archivado de dsh (dsh 0.2.0 y posteriores). Un chat (o uno de los chats de sus subagentes) que no se detiene en 15 s, o que tiene abierto otro dsh, sigue archivado y no se mueve nada. En sistemas distintos de macOS, la carpeta de la papelera tiene que estar en el mismo disco que el historial de chats. Un chat abierto que eliminas se queda en la memoria de dsh, archivado y oculto, hasta que dsh se reinicia. Vacía tú la Papelera; dsh no lo hace.
142
- - La cola de dsh no tiene una acción `move`, así que al reordenar se reescribe el texto de las filas afectadas. Si el agente toma una fila en medio del movimiento, el movimiento se deshace y no se pierde nada. Los mensajes con imágenes o archivos no se pueden mover.
156
+ - La cola de dsh no tiene una acción `move`, así que la parte Host del plugin mueve el propio mensaje dentro de la cola de dsh (un solo cambio, el mismo mensaje). Los mensajes con imágenes o archivos también se mueven. Solo se mueven tus propios mensajes: una ronda de un objetivo o una respuesta a una pregunta en la cola se queda donde está. Si un mensaje empieza a enviarse mientras arrastras, no se mueve nada y un aviso lo indica.
143
157
  - dsh 0.2.1 carga una actualización de inmediato cuando la nueva versión no cambia ningún ajuste de dsh; en caso contrario, y en dsh 0.2.0, reinicia dsh para cargarla. El plugin nunca reinicia dsh por ti. Los perfiles web/CLI sin el gestor de plugins de dsh solo avisan de que hay una versión nueva.
144
158
  - **Mantener el foco en el editor** solo devuelve el foco después de un comando `/` o una skill. Mientras dsh resuelve el comando, el editor queda en solo lectura unos milisegundos, así que las teclas que pulses en ese tiempo se pierden. Si el menú `/` de dsh sigue abierto, `Enter` elige la fila resaltada y no envía.
145
159
  - **Conexión móvil** solo funciona en macOS (usa `en0`, `openssl`, `swift` y `dns-sd`). Usa los puertos fijos 19390 y 19391, así que solo un dsh por Mac puede ejecutarla a la vez (cada Mac es una entrada en la lista de Mac del teléfono). El teléfono solo recibe notificaciones mientras Tether está abierta o acaba de pasar a segundo plano (no hay servicio push). La app de iOS aún no está en la App Store: compílala desde `tether/ios` con Xcode.
@@ -148,6 +162,9 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
148
162
  - Los proyectos activos se mueven con el orden de proyectos guardado de dsh, así que el nuevo orden se mantiene tras un reinicio. Los chats que no pertenecen a ningún proyecto («Sin agrupar») no se pueden mover; dsh siempre los muestra al final.
149
163
  - dsh no tiene un punto de extensión en el menú de opciones de vista de la barra lateral, así que la opción de proyectos recientes se añade al menú propio de dsh. Si una actualización de dsh cambia ese menú, la opción no aparece y todos los proyectos siguen visibles. El filtro funciona sobre las filas de proyecto, así que **En una sola lista** no se filtra. Úsalo con **Espacio de trabajo**: en **Árbol de espacios de trabajo**, una carpeta padre oculta también oculta los proyectos activos que contiene. **Por estado** tiene el mismo tipo de límite: dsh no tiene un espacio para el orden, así que la opción y el orden de las filas se enganchan al marcado del menú y de la lista de dsh.
150
164
  - dsh tampoco tiene un menú de fila de proyecto ni un espacio en la cabecera de Espacios de trabajo. **Copiar ruta** encuentra la fila del proyecto por el marcado de filas de dsh, y **Contraer todos los proyectos** se coloca en la cabecera de dsh y cierra cada proyecto abierto con el mismo clic que la fila del proyecto. Si una actualización de dsh cambia ese marcado, el clic derecho muestra el menú del navegador y el botón no aparece.
165
+ - dsh tampoco tiene un punto de extensión en el menú de proyectos de un chat nuevo, así que el cuadro **Buscar proyectos** y el orden A–Z se enganchan al marcado del menú de dsh. Si una actualización de dsh cambia ese marcado, el menú aparece tal como lo dibuja dsh: en el orden guardado y sin el cuadro. El orden A–Z es solo una vista: no cambia el orden de proyectos guardado de dsh.
166
+ - dsh tampoco tiene un punto de extensión para una indicación en el editor, así que el texto de **Predicción del siguiente mensaje** se coloca sobre el texto de ejemplo propio de dsh (`[data-composer-placeholder]`). Si una actualización de dsh cambia ese marcado, no aparece ninguna predicción. Mientras está activada, cada turno terminado cuesta una llamada breve al modelo.
167
+ - **Completar al escribir** muestra su texto mediante la indicación propia del editor de dsh (el estilo `--dsh-composer-hint` que dsh usa para la indicación del argumento de un comando de barra). No se ejecuta con un comando de barra, con un mensaje que tenga un chip de archivo o de símbolo ni cuando el cursor no está al final del mensaje. Si una actualización de dsh cambia ese estilo, no aparece ninguna compleción. Cada pausa mientras escribes cuesta una llamada al modelo.
151
168
  - Se ha pedido soporte integrado en el proyecto original: `move` para la cola en [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773) y un estado de Continuar en [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
152
169
 
153
170
  ## Preguntas frecuentes
@@ -170,6 +187,8 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
170
187
 
171
188
  **¿dsh sigue con los chats en ejecución después de cerrarlo y volver a abrirlo?** No por sí solo: dsh marca ese turno como interrumpido y espera (un objetivo también espera a `/goal resume`). Activa **Configuración → Composer Plus → Reanudar tras reiniciar**: los chats que estaban trabajando cuando dsh se cerró continúan solos en el siguiente inicio.
172
189
 
190
+ **¿Qué modelo escribe la predicción?** El modelo que eliges en **Configuración → Composer Plus → Predicción del siguiente mensaje → Modelo**. La lista es la propia lista de modelos de dsh. **Predeterminado de dsh** sigue el modelo predeterminado de dsh. Si dsh ya no muestra el modelo elegido, la predicción usa el predeterminado. **Completar al escribir** tiene su propio menú **Modelo**: **Igual que la predicción del siguiente mensaje** (la opción predeterminada) sigue el modelo de la predicción; otra opción se usa solo para las compleciones. Si dsh ya no muestra ese modelo, las compleciones usan el modelo de la predicción.
191
+
173
192
  **¿Cómo reordeno los mensajes en cola en dsh?** Arrastra el asa ⠿ de un mensaje en cola, o pon el foco en ella y pulsa `↑` / `↓`.
174
193
 
175
194
  **¿Cómo evito que la revisión automática pregunte por la misma herramienta en un chat?** Haz clic en **Permitir en este chat** en la tarjeta de aprobación. Solo cubre esa herramienta exacta en ese chat; revoca el permiso desde el chip de la cabecera.
@@ -184,7 +203,7 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
184
203
 
185
204
  **¿Cómo cambio la interfaz de DeepSeek Harness a turco, español, japonés…?** Configuración → Composer Plus → **Idioma de la aplicación**.
186
205
 
187
- **¿Cómo uso dsh desde mi iPhone?** Compila la app Tether desde `tether/ios` (Xcode), activa **Configuración → Composer Plus → Conexión móvil (iPhone)**, haz clic en **Conexión móvil** abajo a la izquierda, escanea el código QR en Tether y haz clic en **Approve**. Fuera de casa, usa Tailscale en los dos dispositivos.
206
+ **¿Cómo uso dsh desde mi iPhone?** Compila la app Tether desde `tether/ios` (Xcode), activa **Configuración → Composer Plus → Conexión móvil (iPhone)**, haz clic en **Conexión móvil** abajo a la izquierda, escanea el código QR (con la Cámara del iPhone o con **Scan code** en Tether), toca **Connect** y haz clic en **Approve**. Fuera de casa, usa Tailscale en los dos dispositivos.
188
207
 
189
208
  **¿Funciona con la app de escritorio?** Sí: Configuración → Plugins → **Añadir plugin** → `dsh-composer-plus`. Probado en dsh 0.2.0-rc.2 (escritorio y web) y 0.2.1-rc.2 (web).
190
209
 
@@ -208,8 +227,10 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/
208
227
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
209
228
  # Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
210
229
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-resume-restart.mjs /path/to/dsh/lib/bin.js
211
- # Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list + its thumbnail
230
+ # Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list, a focus topic chip, Copy as checklist + its thumbnail
212
231
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
232
+ # Export chat as Markdown (fake model, made-up project): right-click → Export as Markdown…, copy and save keep the code blocks, switch off + its thumbnail
233
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-export-markdown.mjs /path/to/dsh/lib/bin.js
213
234
  # Content search (fake model, made-up chats): a message-only word finds its chat with the snippet, switch off + restart = titles only + its thumbnail
214
235
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
215
236
  # Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails