dsh-composer-plus 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +236 -0
- package/README.es.md +236 -0
- package/README.fr.md +236 -0
- package/README.hi.md +236 -0
- package/README.id.md +236 -0
- package/README.ja.md +236 -0
- package/README.ko.md +236 -0
- package/README.md +20 -14
- package/README.pt-BR.md +236 -0
- package/README.ru.md +236 -0
- package/README.tr.md +236 -0
- package/README.vi.md +236 -0
- package/README.zh.md +236 -0
- package/assets/features/featureIdeas.webp +0 -0
- package/assets/features/projectName.webp +0 -0
- package/assets/features/turnRollback.webp +0 -0
- package/client.js +259 -47
- package/index.js +122 -33
- package/package.json +2 -2
package/README.de.md
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# dsh-composer-plus — Composer Plus für DeepSeek Harness
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/dsh-composer-plus)
|
|
4
|
+
[](https://github.com/furkancak1r/dsh-composer-plus/actions/workflows/test.yml)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
[English](README.md) · [中文](README.zh.md) · [Türkçe](README.tr.md) · [Español](README.es.md) · [Português (Brasil)](README.pt-BR.md) · [Français](README.fr.md) · **Deutsch** · [Русский](README.ru.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Bahasa Indonesia](README.id.md) · [Tiếng Việt](README.vi.md) · [हिन्दी](README.hi.md)
|
|
8
|
+
|
|
9
|
+
Dies ist eine Übersetzung. Maßgeblich ist die englische [README.md](README.md).
|
|
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.
|
|
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.
|
|
14
|
+
|
|
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
|
+
|
|
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.
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
**Desktop-App:** Einstellungen → Plugins → **Plugin hinzufügen** → `dsh-composer-plus` eingeben → **Jetzt aktivieren**.
|
|
22
|
+
Du kannst statt des npm-Namens auch `https://github.com/furkancak1r/dsh-composer-plus` einfügen.
|
|
23
|
+
|
|
24
|
+
**Web-/CLI-Profil:**
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
dsh plugin --profile web add dsh-composer-plus
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Starte dsh danach neu. (Die CLI kann nicht in das Desktop-Profil installieren; dieses Profil verwaltet die App.)
|
|
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`.
|
|
33
|
+
|
|
34
|
+
## Funktionen
|
|
35
|
+
|
|
36
|
+
| Funktion | So nutzt du sie | Screenshot |
|
|
37
|
+
|---|---|---|
|
|
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> |
|
|
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 **Weitere 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> |
|
|
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** | `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
|
+
| **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> |
|
|
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
|
+
| **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> |
|
|
52
|
+
| **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
|
+
| **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
|
+
| **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> |
|
|
55
|
+
| **Filter für aktuelle Projekte** | 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> |
|
|
56
|
+
| **Alle Projekte einklappen** | 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> |
|
|
57
|
+
| **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
|
+
| **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
|
+
| **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> |
|
|
61
|
+
| **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
|
+
|
|
63
|
+
Schaltflächen, Tooltips, Hinweise und Benachrichtigungen folgen der gewählten dsh-Sprache (siehe App-Sprache weiter unten).
|
|
64
|
+
|
|
65
|
+
## Einstellungen
|
|
66
|
+
|
|
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.**
|
|
68
|
+
|
|
69
|
+
<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
|
+
|
|
71
|
+
### App-Sprache
|
|
72
|
+
|
|
73
|
+
Öffne **Einstellungen → Composer Plus → App-Sprache** und wähle **Systemsprache** oder eine von 13 Sprachen:
|
|
74
|
+
|
|
75
|
+
English · 中文 · Türkçe · Español · Português (Brasil) · Français · Deutsch · Русский · 日本語 · 한국어 · Bahasa Indonesia · Tiếng Việt · हिन्दी
|
|
76
|
+
|
|
77
|
+
<p align="center"><img src="docs/images/language-tr.webp" width="720" alt="DeepSeek-Harness-Oberfläche auf Türkçe umgestellt"></p>
|
|
78
|
+
|
|
79
|
+
Die ganze App wechselt sofort. Die Auswahl ist die eigene gespeicherte `locale.preference` von dsh (dieselbe wie unter Allgemein → Sprache). Deshalb bleibt sie nach Neustarts erhalten. **Systemsprache** löscht diese Auswahl: Die Desktop-App folgt der Sprache des Betriebssystems, die Weboberfläche der Sprache des Browsers. Eine nicht unterstützte Sprache fällt auf Englisch zurück. Die Installation des Plugins überschreibt nie eine Sprache, die du schon gewählt hast.
|
|
80
|
+
|
|
81
|
+
Jedes Paket hat 3.143 Texte: jeden Oberflächentext von dsh `0.2.0-rc.2` und `0.2.1-rc.2` (Chats, Seitenleiste, Einstellungen, Genehmigungen, Automatisierungsaufgaben, Dateivorschauen, Plugin-Verwaltung, Plugin-Marktplatz), die eigenen Bedienelemente des Plugins und das beliebte Plugin [dsh-rewind](https://github.com/SiriLee/dsh-rewind). Nicht übersetzt werden: deine Nachrichten, die Ausgabe des Modells, Code, Namen von Slash-Befehlen (`/plan`, `/compact`), Bezeichnungen der Anbieter wie die Reasoning-Stufe `High`, Texte anderer Plugins sowie die nativen Menüs und Update-Dialoge der Desktop-App (dsh liefert diese nur auf Englisch und Chinesisch aus). Texte, die eine neuere dsh-Version hinzufügt, erscheinen auf Englisch, bis die Pakete aktualisiert sind. Wenn ein anderes Plugin eine Sprache bereits bereitstellt, behält dieses Plugin die Sprache.
|
|
82
|
+
|
|
83
|
+
## Tastenkürzel
|
|
84
|
+
|
|
85
|
+
| Taste | Wo | Aktion |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| `↑` / `↓` | leeres Eingabefeld | vorherige / nächste gesendete Nachricht |
|
|
88
|
+
| `Shift+Tab` | Eingabefeld | `/plan ` hinzufügen/entfernen oder Planmodus verlassen |
|
|
89
|
+
| `↑` / `↓` | fokussierter Griff in der Warteschlange | eingereihte Nachricht verschieben |
|
|
90
|
+
| `Esc` | beim Ziehen | Verschieben abbrechen |
|
|
91
|
+
| `→` / `←` | Seite Funktionsideen | oberste Karte umsetzen / überspringen |
|
|
92
|
+
| `↓` | Seite Funktionsideen | oberste Karte in der Liste „Später“ des Projekts merken |
|
|
93
|
+
| `↑` | Seite Funktionsideen | oberste Karte sofort umsetzen, ohne Plan |
|
|
94
|
+
| `Z` | Seite Funktionsideen | zuletzt übersprungene Karte zurückholen |
|
|
95
|
+
|
|
96
|
+
Ein geöffnetes `/`- oder `@`-Menü behält diese Tasten für sich.
|
|
97
|
+
|
|
98
|
+
## Kompatibilität
|
|
99
|
+
|
|
100
|
+
Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI führt die Tests bei jedem Push aus.
|
|
101
|
+
|
|
102
|
+
## Datenschutz und Sicherheit
|
|
103
|
+
|
|
104
|
+
- **Fortsetzen:** Der authentifizierte lokale Endpunkt setzt nur die letzte unterbrochene Runde fort, lehnt veraltete oder doppelte Anfragen ab und behält die vorhandenen Genehmigungs-Hooks bei. Er sendet keine neue Benutzernachricht.
|
|
105
|
+
- **Nach Neustart fortsetzen:** aus, bis du es einschaltest. Die Host-Hälfte speichert nur Chat-IDs und Startzeiten in `$DSH_HOME/storages/dsh-composer-plus/resume.json` (Rechte nur für den Besitzer), und nichts verlässt deinen Rechner. Sie setzt einen Chat nur fort, wenn das eigene Protokoll von dsh sagt, dass dsh (nicht du) seine letzte Runde gestoppt hat. Genehmigungen und die automatische Prüfung gelten für die fortgesetzte Runde wie gewohnt.
|
|
106
|
+
|
|
107
|
+
- **Änderungsbereich:** git läuft nur lesend auf deinem Rechner, im eigenen Ordner des Chats, über den authentifizierten `/api`-Kanal von dsh. Es führt nie Commits, Staging oder Fetches aus und zeigt nur Pfade, die git selbst aufgelistet hat.
|
|
108
|
+
- **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
|
+
- **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
|
+
- **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`.
|
|
111
|
+
- **Chat löschen:** verschiebt die eigenen Protokollordner des Chats (`$DSH_HOME/sessions/<project>/<chat>`) in den Papierkorb. Den Projektordner fasst es nicht an.
|
|
112
|
+
- **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
|
+
- Die automatische Prüfung läuft weiterhin bei jedem Aufruf. Fehlgeschlagene Prüfungen werden nie automatisch erlaubt.
|
|
114
|
+
- **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
|
+
- **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.
|
|
116
|
+
|
|
117
|
+
## Fehlerbehebung
|
|
118
|
+
|
|
119
|
+
- **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).
|
|
121
|
+
- **„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
|
+
- **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
|
+
- **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.
|
|
124
|
+
- **Die Suche findet nur Titel:** Die Inhaltssuche ist aus, dsh wurde seit dem Einschalten oder seit der Installation des Plugins nicht neu gestartet, oder das Wort steht nur in einer Tool-Ausgabe (siehe Grenzen).
|
|
125
|
+
- **Keine ↶-Schaltfläche an meinen Nachrichten:** Runde zurücknehmen ist aus, der Chat ist ein Subagent-Chat, oder dsh-rewind-plugin ist installiert (nutze dessen ↶-Schaltfläche). Starte dsh nach einem Update neu.
|
|
126
|
+
- **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
|
+
- **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
|
+
- **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.
|
|
130
|
+
|
|
131
|
+
## Grenzen
|
|
132
|
+
|
|
133
|
+
- 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.
|
|
135
|
+
- **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
|
+
|
|
137
|
+
- **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.
|
|
138
|
+
- Aufwand der **Inhaltssuche**, gemessen an einer Kopie von 247 echten Chatprotokollen (159 MB, dsh 0.2.1-rc.2, Apple Silicon, 32 GB): Die erste Suche nach einem Start baut den Index in etwa 15 s auf. In dieser Zeit antwortet der Host von dsh etwa 7 s lang nicht. Andere Chats streamen in diesem Moment also nicht (die Seite selbst friert nicht ein). Der Speicher des Hosts wächst in der Spitze um etwa 1,1 GB. Eine Minute später liegt er noch etwa 0,5–0,6 GB über dem Startwert, bis dsh beendet wird. Die Indexdatei hat etwa 165 MB. Spätere Suchen dauern etwa 0,5 s. Nach einem Neustart dauert die erste Suche etwa 1 s (nur neue oder geänderte Chats kommen hinzu) und fügt etwa 70 MB hinzu. Schalte die Funktion aus, wenn dein Computer wenig Arbeitsspeicher hat.
|
|
139
|
+
- **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
|
+
- **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
|
+
- **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.
|
|
143
|
+
- 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
|
+
- **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
|
+
- **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`.
|
|
146
|
+
- Ein Sitzungslink funktioniert in Chats; ein Klick darauf öffnet den Chat nicht.
|
|
147
|
+
- Eine Benachrichtigung, die vor einem Neustart gesendet wurde, holt dsh beim Klicken nur in den Vordergrund.
|
|
148
|
+
- 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
|
+
- 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
|
+
- 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.
|
|
151
|
+
- 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
|
+
|
|
153
|
+
## Häufige Fragen
|
|
154
|
+
|
|
155
|
+
**Wie füge ich DeepSeek Harness einen Bereich für Änderungen / git-Diffs hinzu?** Installiere `dsh-composer-plus` und öffne dann rechte Seitenleiste → `+` → **Änderungen**.
|
|
156
|
+
|
|
157
|
+
**Kann dsh Funktionen für mein Projekt vorschlagen, mit Karten zum Wischen wie bei Tinder?** Ja: rechte Seitenleiste → `+` → **Funktionsideen** → **Funktionen vorschlagen**. Wische nach rechts, um einen neuen Chat zu starten, der die Funktion plant. Klicke auf **▶ Sofort umsetzen**, um einen Chat zu starten, der sie ohne Plan sofort umsetzt. Wische nach links, um sie zu überspringen.
|
|
158
|
+
|
|
159
|
+
**Kann die Seitenleisten-Suche von dsh einen Chat über ein Wort in seinen Nachrichten finden, nicht nur über den Titel?** Ja, mit **Inhaltssuche** (standardmäßig an): Starte dsh nach der Installation des Plugins einmal neu und nutze dann die Lupe neben **Arbeitsbereiche**. Passende Chats zeigen den Text um das Wort herum.
|
|
160
|
+
|
|
161
|
+
**Kann ich eine Runde rückgängig machen und meinen Prompt bearbeiten, wie in OpenCode oder Claude Code?** Ja, mit **Runde zurücknehmen**: Klicke an der Nachricht auf **↶**, wähle **Chat und Dateien**, bearbeite den Text, der ins Eingabefeld zurückkommt, und sende ihn.
|
|
162
|
+
|
|
163
|
+
**Kann ich einen Chat löschen, statt ihn zu archivieren?** Ja, mit **Chat löschen**: **…** → **Löschen…**. Der Verlauf kommt in den Papierkorb, also lässt sich ein Fehler rückgängig machen.
|
|
164
|
+
|
|
165
|
+
**Wie sehe ich, zu welchem Projekt ein Chat gehört?** Sieh auf die Zeile unter dem Eingabefeld: Mit **Projektname im Eingabefeld** (standardmäßig an) beginnt sie mit dem Projektnamen. Fahre mit der Maus darüber, um den Ordnerpfad zu sehen.
|
|
166
|
+
|
|
167
|
+
**Wie bekomme ich einen ↑/↓-Nachrichtenverlauf im Eingabefeld von dsh?** Installiere dieses Plugin. In einem leeren Eingabefeld gehst du mit `↑` / `↓` durch deine gesendeten Nachrichten.
|
|
168
|
+
|
|
169
|
+
**Wie setze ich eine gestoppte oder fehlgeschlagene Runde in dsh fort, ohne „continue“ zu tippen?** Mit diesem Plugin wird die Senden-Schaltfläche nach einer gestoppten, fehlgeschlagenen oder abgebrochenen Runde zu **▶**. Ein Klick setzt die Runde fort.
|
|
170
|
+
|
|
171
|
+
**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
|
+
|
|
173
|
+
**Wie ordne ich eingereihte Nachrichten in dsh neu?** Ziehe den Griff ⠿ an einer eingereihten Nachricht, oder setze den Fokus darauf und drücke `↑` / `↓`.
|
|
174
|
+
|
|
175
|
+
**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.
|
|
176
|
+
|
|
177
|
+
**Wie zeige ich in der Seitenleiste von dsh nur die Projekte, die ich heute genutzt habe?** Seitenleiste → Ansichtsoptionen (Schieberegler-Symbol) → **In den letzten 2 Stunden aktiv**. Wähle die Option erneut, um alle Projekte zu zeigen.
|
|
178
|
+
|
|
179
|
+
**Wie kopiere ich in dsh den Ordnerpfad eines Projekts?** Rechtsklick auf das Projekt in der Seitenleiste → **Pfad kopieren**.
|
|
180
|
+
|
|
181
|
+
**Wie klappe ich alle Projekte in der Seitenleiste von dsh auf einmal ein?** Klicke auf die Einklapp-Schaltfläche neben den Ansichtsoptionen (Schieberegler-Symbol). Sie erscheint, solange mindestens ein Projekt geöffnet ist.
|
|
182
|
+
|
|
183
|
+
**Wie bekomme ich Benachrichtigungen unter macOS / Windows, wenn eine dsh-Aufgabe fertig ist oder eine Genehmigung braucht?** Lass **Hintergrundbenachrichtigungen** an (Standard) und erlaube Benachrichtigungen für DeepSeek Harness in den Einstellungen des Betriebssystems.
|
|
184
|
+
|
|
185
|
+
**Wie stelle ich die Oberfläche von DeepSeek Harness auf Türkisch, Spanisch, Japanisch … um?** Einstellungen → Composer Plus → **App-Sprache**.
|
|
186
|
+
|
|
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.
|
|
188
|
+
|
|
189
|
+
**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
|
+
|
|
191
|
+
## Entwicklung
|
|
192
|
+
|
|
193
|
+
Die Screenshots entstehen neu in einem Wegwerf-dsh mit einem Fake-Modell und erfundenen Demo-Projekten (`acme-web`, `weather-cli`, `docs-site`). Sie enthalten also keine echten Daten. Vorschaubilder der Funktionen kommen nach `assets/features/` (werden mit ausgeliefert und in den Einstellungen gezeigt). Bilder nur für die README kommen nach `docs/images/` (nicht im npm-Paket):
|
|
194
|
+
|
|
195
|
+
```sh
|
|
196
|
+
PLAYWRIGHT=/path/to/playwright node scripts/capture-screenshots.mjs /path/to/dsh/lib/bin.js
|
|
197
|
+
# sidebar project features (recent filter, Copy path, Collapse all): real-app test + their thumbnails
|
|
198
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /path/to/dsh/lib/bin.js
|
|
199
|
+
# recent filter + a finished chat older than 2 hours (fake model): the project stays until you open the chat
|
|
200
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
|
|
201
|
+
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
202
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
203
|
+
# every Settings feature row shows a loading screenshot
|
|
204
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
|
|
205
|
+
# Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
|
|
206
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
207
|
+
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
208
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
|
|
209
|
+
# Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
|
|
210
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-resume-restart.mjs /path/to/dsh/lib/bin.js
|
|
211
|
+
# Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list + its thumbnail
|
|
212
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
|
|
213
|
+
# Content search (fake model, made-up chats): a message-only word finds its chat with the snippet, switch off + restart = titles only + its thumbnail
|
|
214
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
|
|
215
|
+
# Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails
|
|
216
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-turn-rollback.mjs /path/to/dsh/lib/bin.js
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
```sh
|
|
220
|
+
npm run build:locales # after editing locales/<id>.json
|
|
221
|
+
npm test
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**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). Füge die Funktion mit demselben Bild in die README-Tabelle ein, in `README.md` und in jeder übersetzten `README.<id>.md`. `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).
|
|
225
|
+
|
|
226
|
+
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`.
|
|
227
|
+
|
|
228
|
+
Sprachpakete sind reine Daten-JSON-Dateien in `locales/<id>.json`. `npm run build:locales` bettet sie in den einzigen Client-Einstiegspunkt ein (kein Übersetzungsdienst, kein Download zur Laufzeit). `npm test` prüft jedes Paket auf vollständige Schlüsselabdeckung, identische Platzhalter und Zeilenumbrüche sowie auf das Verhalten von Systemsprache und manueller Auswahl. Für isolierte Prüfungen in der echten App mit einem lokal installierten Playwright:
|
|
229
|
+
|
|
230
|
+
```sh
|
|
231
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-language.mjs /path/to/dsh/lib/bin.js
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## License
|
|
235
|
+
|
|
236
|
+
MIT
|