dsh-composer-plus 1.11.2 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +54 -38
- package/README.es.md +54 -38
- package/README.fr.md +54 -38
- package/README.hi.md +54 -38
- package/README.id.md +54 -38
- package/README.ja.md +54 -38
- package/README.ko.md +54 -38
- package/README.md +54 -38
- package/README.pt-BR.md +54 -38
- package/README.ru.md +54 -38
- package/README.tr.md +54 -38
- package/README.vi.md +54 -38
- package/README.zh.md +54 -38
- package/assets/features/promptImprove.webp +0 -0
- package/client.js +302 -15
- package/index.js +258 -34
- package/package.json +3 -2
- package/tether/gateway/server.mjs +16 -7
package/README.de.md
CHANGED
|
@@ -14,7 +14,7 @@ Komfortfunktionen im Stil von Codex für die Desktop- und Weboberfläche von [De
|
|
|
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. **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.
|
|
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. **Prompt verbessern** ruft ein Modell nur auf, wenn du auf seinen Zauberstab klickst. **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,46 +29,51 @@ 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.
|
|
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.12.0`.
|
|
33
33
|
|
|
34
34
|
## Funktionen
|
|
35
35
|
|
|
36
|
+
<!-- BEGIN GENERATED FEATURES: edit docs/features.json, then run npm run build:readme -->
|
|
37
|
+
|
|
36
38
|
| Funktion | So nutzt du sie | Screenshot |
|
|
37
39
|
|---|---|---|
|
|
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. **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
|
-
| **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
|
-
| **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
|
-
| **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> |
|
|
43
|
-
| **Projektname im Eingabefeld** | Die Zeile unter dem Eingabefeld (Runden, Tokens, Cache-Treffer, Kontext) beginnt mit dem Projektnamen des Chats. So siehst du immer, in welchem Projekt ein Chat arbeitet. Es ist der eigene Projekttitel von dsh oder der Ordnername, wenn das Projekt keinen Titel hat. Fahre mit der Maus darüber, um den vollständigen Ordnerpfad zu sehen. Klicke darauf, um den Chat in der Seitenleiste zu finden, in der Listen- oder Projektansicht: Die Seitenleiste und das Projekt öffnen sich (auch ein eingeklapptes Projekt und sein **
|
|
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
|
-
| **Planmodus mit Shift+Tab** |
|
|
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.) 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
|
-
| **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
|
-
| **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
|
-
| **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> |
|
|
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. Er schlägt nur deine eigenen nächsten Wörter vor: nie eine Antwort an dich und keine erfundenen Fehlertexte oder Namen. Wenn die Nachricht fertig aussieht oder das Modell nicht sicher ist, erscheint nichts. 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> |
|
|
56
|
-
| **
|
|
57
|
-
| **
|
|
58
|
-
| **
|
|
59
|
-
| **
|
|
60
|
-
| **
|
|
61
|
-
| **
|
|
62
|
-
| **
|
|
63
|
-
| **
|
|
64
|
-
| **
|
|
65
|
-
| **
|
|
40
|
+
| **Änderungsbereich** | <a id="feature-changespanel"></a>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> |
|
|
41
|
+
| **Funktionsideen** | <a id="feature-featureideas"></a>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> |
|
|
42
|
+
| **Inhaltssuche** | <a id="feature-contentsearch"></a>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> |
|
|
43
|
+
| **Runde zurücknehmen** | <a id="feature-turnrollback"></a>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> |
|
|
44
|
+
| **Chat löschen** | <a id="feature-deletechat"></a>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> |
|
|
45
|
+
| **Projektname im Eingabefeld** | <a id="feature-projectname"></a>Die Zeile unter dem Eingabefeld (Runden, Tokens, Cache-Treffer, Kontext) beginnt mit dem Projektnamen des Chats. So siehst du immer, in welchem Projekt ein Chat arbeitet. Es ist der eigene Projekttitel von dsh oder der Ordnername, wenn das Projekt keinen Titel hat. Fahre mit der Maus darüber, um den vollständigen Ordnerpfad zu sehen. Klicke darauf, um den Chat in der Seitenleiste zu finden, in der Listen- oder Projektansicht: Die Seitenleiste und das Projekt öffnen sich (auch ein eingeklapptes Projekt und sein **N weitere Sitzungen anzeigen**), die Liste scrollt zum Chat, und der Chat blinkt 5 Sekunden lang. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Screenshot: Projektname im Eingabefeld"></a> |
|
|
46
|
+
| **Eingabeverlauf** | <a id="feature-inputhistory"></a>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> |
|
|
47
|
+
| **Planmodus mit Shift+Tab** | <a id="feature-plantoggle"></a>`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> |
|
|
48
|
+
| **Fokus im Eingabefeld behalten** | <a id="feature-keepfocus"></a>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> |
|
|
49
|
+
| **Fortsetzen mit einem Klick** | <a id="feature-continuebutton"></a>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> |
|
|
50
|
+
| **Nach Neustart fortsetzen** | <a id="feature-resumeafterrestart"></a>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> |
|
|
51
|
+
| **Warteschlange per Drag-and-drop** | <a id="feature-queuereorder"></a>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> |
|
|
52
|
+
| **Sitzungslink kopieren** | <a id="feature-copydeeplink"></a>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> |
|
|
53
|
+
| **Chat als Markdown exportieren** | <a id="feature-exportmarkdown"></a>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> |
|
|
54
|
+
| **Projektpfad kopieren** | <a id="feature-copyprojectpath"></a>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> |
|
|
55
|
+
| **Projektsuche im neuen Chat** | <a id="feature-projectpicker"></a>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> |
|
|
56
|
+
| **Vorhersage der nächsten Nachricht** | <a id="feature-nextprediction"></a>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> |
|
|
57
|
+
| **Beim Tippen vervollständigen** | <a id="feature-typingcompletion"></a>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. Er schlägt nur deine eigenen nächsten Wörter vor: nie eine Antwort an dich und keine erfundenen Fehlertexte oder Namen. Wenn die Nachricht fertig aussieht oder das Modell nicht sicher ist, erscheint nichts. 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> |
|
|
58
|
+
| **Prompt verbessern** | <a id="feature-promptimprove"></a>Tippe eine grobe Anfrage und klicke dann auf den Zauberstab (**Prompt verbessern**) neben dem Modellmenü. Ein Modellaufruf schreibt sie als klareren Prompt neu: zuerst das Ziel, kurze nummerierte Schritte, wenn es mehrere Teile gibt, und die Prüfung, die laufen soll. Die Funktion liest diesen Chat (ohne zurückgenommene Nachrichten), README, AGENTS.md und Manifest des Projekts, die geänderten Dateien und die Dateien, deren Namen zu deinen Wörtern passen, und behält deine Sprache bei. Sie erfindet nie Dateinamen. Der neue Text ersetzt deinen Entwurf, wird aber nicht gesendet: Lies ihn, bearbeite ihn und drücke dann `Enter`. `Cmd/Ctrl+Z` holt deinen Text in einem Schritt zurück, ebenso die Schaltfläche (**Verbesserung rückgängig machen**). Wenn du tippst, während sie arbeitet, bleibt dein neuer Text stehen. `Esc` oder ein zweiter Klick bricht ab. Sie hat ein eigenes Menü **Modell** in den Einstellungen (Standard: **Wie das Modell des Chats**). Nicht für Slash-Befehle oder eine Nachricht mit einem Datei-Chip. In Tether ist der Zauberstab neben dem Feld. | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="Screenshot: Prompt verbessern"></a> |
|
|
59
|
+
| **Für diesen Chat zulassen** | <a id="feature-allowforchat"></a>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> |
|
|
60
|
+
| **Projektstatus** | <a id="feature-projectstatus"></a>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> |
|
|
61
|
+
| **Aktive Projekte zuerst** | <a id="feature-activeprojectsfirst"></a>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> |
|
|
62
|
+
| **Filter für aktuelle Projekte** | <a id="feature-recentprojects"></a>Seitenleiste → Ansichtsoptionen (Schieberegler-Symbol) → **In den letzten 2 Stunden aktiv**. Solange diese Option ausgewählt ist, zeigt die Seitenleiste nur Projekte mit einem Chat, der in den letzten 2 Stunden aktiv war. Das ist ein Chat, der in dieser Zeit aktualisiert wurde, ein laufender oder wartender Chat, der geöffnete Chat oder ein fertiger Chat, den du noch nicht geöffnet hast (der grüne „Fertig“-Punkt von dsh), auch nach den 2 Stunden. Projekte ohne einen solchen Chat sind ausgeblendet, auch neue und leere Projekte. Wähle die Option erneut, um alle Projekte zu zeigen. Die Auswahl bleibt auf diesem Gerät gespeichert. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Screenshot: Filter für aktuelle Projekte"></a> |
|
|
63
|
+
| **Alle Projekte einklappen** | <a id="feature-collapseprojects"></a>Solange ein Projekt in der Seitenleiste geöffnet ist, erscheint neben den Ansichtsoptionen (Schieberegler-Symbol) eine Schaltfläche. Klicke darauf, um alle geöffneten Projekte auf einmal zu schließen, zum Beispiel 3 geöffnete von 5 Projekten. Die Schaltfläche verschwindet wieder, wenn kein Projekt geöffnet ist. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Screenshot: Alle Projekte einklappen"></a> |
|
|
64
|
+
| **Nach Status sortieren** | <a id="feature-statusorder"></a>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> |
|
|
65
|
+
| **Hintergrundbenachrichtigungen** | <a id="feature-notifications"></a>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> |
|
|
66
|
+
| **App-Sprache** | <a id="feature-language"></a>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: App-Sprache"></a> |
|
|
67
|
+
| **Mobile Verbindung (iPhone)** | <a id="feature-mobileconnect"></a>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 (iPhone)"></a> |
|
|
68
|
+
| **Automatische Updates** | <a id="feature-autoupdate"></a>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**. Beim ersten Start von dsh mit der neuen Version zeigt ein Fenster **Neu in Composer Plus N** einmal die Release Notes dieser Version (aus derselben Update-Prüfung, ohne weiteren Netzwerkaufruf); **Schließen** oder `Esc` schließt es. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Screenshot: Automatische Updates"></a> |
|
|
69
|
+
|
|
70
|
+
<!-- END GENERATED FEATURES -->
|
|
66
71
|
|
|
67
72
|
Schaltflächen, Tooltips, Hinweise und Benachrichtigungen folgen der gewählten dsh-Sprache (siehe App-Sprache weiter unten).
|
|
68
73
|
|
|
69
74
|
## Einstellungen
|
|
70
75
|
|
|
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
|
|
76
|
+
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. Das kleine **?** nach dem Namen einer Zeile öffnet den Teil dieser README, der die Funktion beschreibt, in der README der Oberflächensprache von dsh. Ä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**, die für **Beim Tippen vervollständigen** (standardmäßig **Wie Vorhersage der nächsten Nachricht**) und die für **Prompt verbessern** (standardmäßig **Wie das Modell des Chats**). **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.**
|
|
72
77
|
|
|
73
78
|
<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>
|
|
74
79
|
|
|
@@ -120,16 +125,17 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
120
125
|
- **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
126
|
- **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.
|
|
122
127
|
- **Chat löschen:** verschiebt die eigenen Protokollordner des Chats (`$DSH_HOME/sessions/<project>/<chat>`) in den Papierkorb. Den Projektordner fasst es nicht an.
|
|
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
|
|
128
|
+
- **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.
|
|
124
129
|
- Die automatische Prüfung läuft weiterhin bei jedem Aufruf. Fehlgeschlagene Prüfungen werden nie automatisch erlaubt.
|
|
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). **
|
|
130
|
+
- **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). **Remove** 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).
|
|
126
131
|
- **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
132
|
- **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
133
|
- **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).
|
|
134
|
+
- **Prompt verbessern:** Nichts läuft, bis du auf den Zauberstab klickst. Dann sendet die Host-Hälfte deinen Entwurf, deine eigenen Nachrichten im Chat und die Textantworten des Agenten (keine Werkzeugausgabe, kein verborgener Kontext, kein Reasoning, keine zurückgenommenen Nachrichten; höchstens etwa 6.000 Zeichen, den neuesten Teil), dieselbe Projektzusammenfassung wie **Funktionsideen** (mit denselben Dateiregeln: keine `.env*`- oder Schlüsseldateien, kein Symlink aus dem Ordner hinaus, kein FIFO), die Pfade, die `git status` als geändert listet, und bis zu 30 verfolgte oder unverfolgte (nicht ignorierte) Pfade, deren Namen Wörter mit deinem Entwurf teilen. Das geht als eine einzige Anfrage an das unter **Prompt verbessern** gewählte Modell (standardmäßig das eigene Modell des Chats). Andere Dateiinhalte als diese Zusammenfassung werden nicht gesendet. In den Chat und ins Projekt wird nichts geschrieben: Die Antwort ersetzt nur deinen Entwurf im Eingabefeld, und du entscheidest, ob du ihn sendest. Die Modellwahl liegt in `$DSH_HOME/storages/dsh-composer-plus/improve.json` (Datei nur für den Besitzer).
|
|
129
135
|
|
|
130
136
|
## Fehlerbehebung
|
|
131
137
|
|
|
132
|
-
- **Keine Benachrichtigungen unter macOS:** Systemeinstellungen → Mitteilungen → DeepSeek Harness → erlauben. Wähle
|
|
138
|
+
- **Keine Benachrichtigungen unter macOS:** Systemeinstellungen → Mitteilungen → DeepSeek Harness → erlauben. Wähle Hinweise, damit die Benachrichtigungen auf dem Bildschirm bleiben.
|
|
133
139
|
- **▶, 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).
|
|
134
140
|
- **„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.
|
|
135
141
|
- **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.
|
|
@@ -139,7 +145,7 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
139
145
|
- **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.
|
|
140
146
|
- **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.
|
|
141
147
|
- **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).
|
|
142
|
-
- **Die Installation schlägt direkt nach einem Release fehl:** Gib die Version mit an (`dsh-composer-plus@1.
|
|
148
|
+
- **Die Installation schlägt direkt nach einem Release fehl:** Gib die Version mit an (`dsh-composer-plus@1.12.0`), siehe den Hinweis zur Installation oben.
|
|
143
149
|
|
|
144
150
|
## Grenzen
|
|
145
151
|
|
|
@@ -156,7 +162,7 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
156
162
|
- 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.
|
|
157
163
|
- 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.
|
|
158
164
|
- **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.
|
|
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`.
|
|
165
|
+
- **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`. Die grünen Punkte in Tether folgen dem Mac: Ein Chat, den du in dsh öffnest, verliert seinen Punkt auch auf dem Telefon. Ein Chat, den du in Tether öffnest, verliert seinen Punkt nur auf den Telefonen. Der eigene Punkt von dsh auf dem Mac bleibt, bis du den Chat dort öffnest.
|
|
160
166
|
- Ein Sitzungslink funktioniert in Chats; ein Klick darauf öffnet den Chat nicht.
|
|
161
167
|
- Eine Benachrichtigung, die vor einem Neustart gesendet wurde, holt dsh beim Klicken nur in den Vordergrund.
|
|
162
168
|
- 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.
|
|
@@ -165,6 +171,7 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
165
171
|
- 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
172
|
- 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
173
|
- 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.
|
|
174
|
+
- **Prompt verbessern** sieht nur eine kurze Projektzusammenfassung, die geänderten Pfade und die Pfade, deren Namen zu deinen Wörtern passen: nicht den Code selbst. Daher kann die Funktion die richtige Datei übersehen, und sie nennt nur Pfade, die sie bekommen hat. Lies den neuen Text, bevor du ihn sendest. Sie läuft nicht bei einem Slash-Befehl oder bei einer Nachricht mit einem Datei- oder Symbol-Chip (der neue Text ist reiner Text, der Chip ginge also verloren), und eine Nachricht kann höchstens 8.000 Zeichen haben. Bilder bleiben angehängt: Nur der Text ändert sich. Jeder Klick kostet einen Modellaufruf; ein starkes Modell kann eine Minute brauchen (`Esc` bricht ab).
|
|
168
175
|
- 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).
|
|
169
176
|
|
|
170
177
|
## Häufige Fragen
|
|
@@ -189,6 +196,8 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
189
196
|
|
|
190
197
|
**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
198
|
|
|
199
|
+
**Kann dsh meinen Prompt vor dem Senden verbessern, wie die Schaltfläche Enhance prompt in Roo Code oder Augment?** Ja, mit **Prompt verbessern** (standardmäßig an): Tippe eine grobe Anfrage und klicke auf den Zauberstab neben dem Modellmenü. Die Funktion schreibt den Text mit diesem Chat und dem Projekt als Kontext neu, in deiner Sprache, und sendet ihn nicht. `Cmd/Ctrl+Z` oder **Verbesserung rückgängig machen** holt deinen Text zurück. Wähle ihr Modell unter **Einstellungen → Composer Plus → Prompt verbessern → Modell**.
|
|
200
|
+
|
|
192
201
|
**Wie ordne ich eingereihte Nachrichten in dsh neu?** Ziehe den Griff ⠿ an einer eingereihten Nachricht, oder setze den Fokus darauf und drücke `↑` / `↓`.
|
|
193
202
|
|
|
194
203
|
**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.
|
|
@@ -219,8 +228,12 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /pa
|
|
|
219
228
|
PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
|
|
220
229
|
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
221
230
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
222
|
-
# every Settings feature row shows a loading screenshot
|
|
231
|
+
# every Settings feature row shows a loading screenshot and a ? link to its README row
|
|
223
232
|
PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
|
|
233
|
+
# What's new after an update: the release notes show once, Esc and Close close them
|
|
234
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/bin.js
|
|
235
|
+
# README feature anchors (the ? links) on github.com, headless: each #feature-… shows the start of its row
|
|
236
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
|
|
224
237
|
# Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
|
|
225
238
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
226
239
|
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
@@ -235,14 +248,17 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-export-markdown.mjs /pat
|
|
|
235
248
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
|
|
236
249
|
# Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails
|
|
237
250
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-turn-rollback.mjs /path/to/dsh/lib/bin.js
|
|
251
|
+
# Improve prompt (fake model, made-up git project): the wand sends the draft with the chat and the project, the answer replaces the draft, Cmd+Z and Undo bring it back + its thumbnail
|
|
252
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-prompt-improve.mjs /path/to/dsh/lib/bin.js
|
|
238
253
|
```
|
|
239
254
|
|
|
240
255
|
```sh
|
|
241
256
|
npm run build:locales # after editing locales/<id>.json
|
|
257
|
+
npm run build:readme # after editing docs/features.json
|
|
242
258
|
npm test
|
|
243
259
|
```
|
|
244
260
|
|
|
245
|
-
**Regel für neue Funktionen:** Jede Funktionszeile unter Einstellungen → Composer Plus zeigt einen Screenshot. Füge die ID der Funktion zu `SHOT_OF` in `client.js` und zu `SHOTS` in `index.js` hinzu, und liefere `assets/features/<id>.webp` mit aus (aufgenommen im Wegwerf-Demo-dsh, englische Oberfläche, etwa 60 kB oder weniger).
|
|
261
|
+
**Regel für neue Funktionen:** Jede Funktionszeile unter Einstellungen → Composer Plus zeigt einen Screenshot. Füge die ID der Funktion zu `SHOT_OF` in `client.js` und zu `SHOTS` in `index.js` hinzu, und liefere `assets/features/<id>.webp` mit aus (aufgenommen im Wegwerf-Demo-dsh, englische Oberfläche, etwa 60 kB oder weniger). Trage die Funktion mit demselben Bild in `docs/features.json` ein und führe `npm run build:readme` aus: Es schreibt die Funktionstabelle von `README.md` und jeder übersetzten `README.<id>.md` sowie die Liste in `llms.txt`. `test/shots.test.mjs` schlägt fehl, wenn eine Funktion keinen Screenshot hat, und `test/browser-settings-shots.mjs` prüft die echte Einstellungsseite. Die vollständige Checkliste für jede Änderung steht in [AGENTS.md](AGENTS.md).
|
|
246
262
|
|
|
247
263
|
Die Tests führen das echte `client.js` gegen ein Fake-React/DOM aus und das echte `index.js` (Host-Hälfte) gegen ein temporäres git-Repository. Die Tests des Tether-Gateways (`test/tether-gateway.test.mjs`) nutzen einen Mock-dsh-Host und ein echtes TLS-Gateway. Die iPhone-App liegt in `tether/ios` (siehe [tether/README.md](tether/README.md) und [tether/AGENTS.md](tether/AGENTS.md)). `node test/browser-history.mjs '<dsh web URL with ?token=…>'` prüft den Eingabeverlauf in einem echten Browser gegen ein Wegwerf-`dsh web` mit eigenem `DSH_HOME`.
|
|
248
264
|
|