dsh-composer-plus 1.19.1 → 1.21.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 +72 -10
- package/README.es.md +72 -10
- package/README.fr.md +72 -10
- package/README.hi.md +72 -10
- package/README.id.md +72 -10
- package/README.ja.md +72 -10
- package/README.ko.md +72 -10
- package/README.md +72 -10
- package/README.pt-BR.md +72 -10
- package/README.ru.md +72 -10
- package/README.tr.md +72 -10
- package/README.vi.md +72 -10
- package/README.zh.md +72 -10
- package/assets/features/diffComments.webp +0 -0
- package/assets/features/memoryCopy.webp +0 -0
- package/assets/features/memoryExport.webp +0 -0
- package/assets/features/memoryHistory.webp +0 -0
- package/assets/features/memoryPerChat.webp +0 -0
- package/assets/features/memorySource.webp +0 -0
- package/assets/features/memoryStale.webp +0 -0
- package/assets/features/memorySuggest.webp +0 -0
- package/assets/features/nextWaiting.webp +0 -0
- package/assets/features/optionPicks.webp +0 -0
- package/assets/features/quoteReply.webp +0 -0
- package/assets/features/rejectNote.webp +0 -0
- package/assets/features/remoteComputers.webp +0 -0
- package/assets/features/secretInput.webp +0 -0
- package/assets/features/sideChat.webp +0 -0
- package/assets/features/taskBoard.webp +0 -0
- package/client.js +2863 -252
- package/index.js +1590 -128
- package/package.json +4 -3
- package/release-notes.json +14 -14
- package/tether/gateway/server.mjs +246 -21
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. **Prompt verbessern** ruft ein Modell nur auf, wenn du auf seinen Zauberstab klickst. **Aufgabentafel** ruft für jede Aufgabe, die du auf der Tafel startest, einmal das Modell des neuen Chats für die Schlagwörter auf. **Zielprüfung** (standardmäßig an) ruft jedes Mal einmal ein Modell auf, wenn der Agent ein `/goal` in einem automatischen Durchlauf als abgeschlossen markiert. **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. **Aufgabentafel** ruft für jede Aufgabe, die du auf der Tafel startest, einmal das Modell des neuen Chats für die Schlagwörter auf. Mit der Einstellung **KI-Zusammenfassung** (Standard ist **Schnell (ohne KI)**) ruft sie auch das Modell eines laufenden Chats für eine kurze Fortschrittsnotiz auf, während du den Fortschritt dieser Aufgabe auf der Tafel oder in Tether ansiehst. **Zielprüfung** (standardmäßig an) ruft jedes Mal einmal ein Modell auf, wenn der Agent ein `/goal` in einem automatischen Durchlauf als abgeschlossen markiert. **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,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Starte dsh danach neu. (Die CLI kann nicht in das Desktop-Profil installieren; dieses Profil verwaltet die App.)
|
|
31
31
|
|
|
32
|
-
> Das pnpm von dsh überspringt Versionen, die jünger als 24 Stunden sind. Gib direkt nach einem Release die Version mit an: `dsh-composer-plus@1.
|
|
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.21.0`.
|
|
33
33
|
|
|
34
34
|
## Funktionen
|
|
35
35
|
|
|
@@ -71,9 +71,21 @@ Starte dsh danach neu. (Die CLI kann nicht in das Desktop-Profil installieren; d
|
|
|
71
71
|
| **Geplante Schritte** | <a id="feature-plannedsteps"></a>Standardmäßig aus: Schalte die Funktion unter **Einstellungen → Composer Plus** ein. Der Agent bekommt das Tool `plan_next_steps`: In derselben Nachricht wie ein Befehl kann er die nächsten Befehle mit den genauen Argumenten und einer Bedingung planen, etwa „führe `npm test` aus, wenn der Build gelingt“. Erfüllt das Ergebnis die Bedingung, führt Composer Plus den nächsten Schritt selbst aus, ohne neuen Modellaufruf, sodass ein langer Chat weniger Tokens verbraucht. Der Schritt erscheint im Chat als kurze Zeile „Composer Plus · Planned steps: ran `test` … without a model call“, danach folgen sein Tool-Aufruf und sein Ergebnis. Nur Schritte mit `bash`, `read`, `grep` und `glob`; Freigaben, Sandbox und Geschützte Dateien gelten für jeden Schritt wie gewohnt. Das Modell antwortet wieder, wenn eine Bedingung nicht erfüllt ist, wenn zwei Schritte gleichzeitig bereit sind, nach dem letzten Schritt und wenn du eine Nachricht sendest. Die Idee stammt aus HarnessMM (arXiv 2610.32813). | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="Screenshot: Geplante Schritte"></a> |
|
|
72
72
|
| **Geschützte Dateien** | <a id="feature-protectedfiles"></a>Standardmäßig an. Die eigenen Datei-Tools des Agenten können Dateien, die zu deinen Mustern passen, weder lesen noch ändern: `read`, `read_image` und `grep` auf eine Datei werden bei Mustern mit **Lesen und Schreiben** abgelehnt, `write`, `edit` und `str_replace_editor` bei beiden Arten. Der Agent liest den Grund und wird angewiesen, dich zu fragen. Die Standardmuster sind `.env*`, `*.pem` und `*.key`. Einstellungen → Composer Plus → **Geschützte Dateien**: Füge ein Muster hinzu (zum Beispiel `published/**` oder `config/*.yml`), klicke auf seine Art, um zwischen **Lesen und Schreiben** und **nur Schreiben** zu wechseln, entferne es mit ✕ oder klicke auf **Standardwerte verwenden**. Ein Muster ohne `/` passt auf einen Dateinamen in jedem Ordner. Das ist eine Leitplanke, keine Sandbox: Ein Shell-Befehl (`cat .env`), ein Skript oder ein MCP-Tool kann die Datei trotzdem erreichen (siehe Grenzen). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Screenshot: Geschützte Dateien"></a> |
|
|
73
73
|
| **Blockierte Befehle** | <a id="feature-blockedcommands"></a>Standardmäßig an, mit einer leeren Liste. Die Shell-Befehle des Agenten (`bash`, `pwsh`) können keinen Befehl ausführen, der zu deinen Regeln passt: Eine Regel mit **blockieren** lehnt den Aufruf ab (der Agent liest den Grund und wird angewiesen, dich zu fragen), eine Regel mit **zuerst fragen** zeigt die Genehmigungskarte von dsh, und der Befehl läuft nur, wenn du ihn zulässt. Einstellungen → Composer Plus → **Blockierte Befehle**: Gib eine Regel ein (zum Beispiel `npm publish`, `git push --force` oder `ssh *192.168.2.19`), klicke auf die Art, um zwischen **blockieren** und **zuerst fragen** zu wechseln, dann auf **Hinzufügen**; klicke auf die Art einer Regel, um sie zu ändern, und entferne sie mit ✕. Eine Regel ist ein Befehlsname und Wörter, die in dieser Reihenfolge nach ihm kommen müssen; `*` passt auf beliebigen Text. Die Funktion findet den Befehl auch nach `&&`, `;`, `\|`, innerhalb von `$(…)`, `bash -c "…"` oder `eval` sowie nach `sudo` oder `env`. Das ist eine Leitplanke, keine Sandbox: Eine Variable (`$CMD`), eine Skriptdatei oder ein anderes Programm kann den Befehl trotzdem ausführen (siehe Grenzen). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Screenshot: Blockierte Befehle"></a> |
|
|
74
|
-
| **Aufgabentafel** | <a id="feature-taskboard"></a>Linke Seitenleiste → **Aufgabentafel
|
|
74
|
+
| **Aufgabentafel** | <a id="feature-taskboard"></a>Linke Seitenleiste → **Aufgabentafel**, oder drücke überall in dsh `Cmd+Shift+K` (`Strg+Shift+K` unter Windows und Linux). Eine Kanban-Tafel deiner dsh-Chats mit dem Live-Zustand, den die Seitenleiste zeigt: Ein Chat, der auf deine Genehmigung, deine Antwort oder die Prüfung eines Plans wartet, steht mit einem orangen Punkt in **In Prüfung**, ein laufender Chat steht in **In Arbeit**, ein beendeter Chat, den du noch nicht geöffnet hast, steht in **Fertig** (grün). Wenn du einen Chat öffnest, verlässt seine Karte **Fertig** von selbst; klicke unter den grünen Karten auf **Kürzlich beendet (N)**, um die beendeten Chats zu sehen, die du gelesen hast (die 10 neuesten, dann **N ältere anzeigen**; offen oder zu bleibt auf diesem Gerät). Ein Chat, der fertig wird, während er hinter der Tafel offen ist (eine **Neue Aufgabe**), bleibt grün, bis du ihn öffnest. Klicke oben auf der Tafel auf den Projektnamen, um die Projektliste zu öffnen, und wähle ein Projekt oder **Alle Projekte**; der Ordner eines Branches pro Chat zählt zu seinem Projekt. Die Liste schließt sich nach der Auswahl, mit `Esc` oder mit einem Klick außerhalb. Tippe oben in der Liste in **Projekte durchsuchen**, um ein Projekt nach seinem Namen zu finden (Groß- und Kleinschreibung und Akzente spielen keine Rolle; `Esc` leert das Feld), drücke `Enter`, um den ersten Treffer zu wählen, und klicke auf **In den letzten 2 Stunden aktiv**, um nur Projekte mit einem Chat zu zeigen, der wartet, läuft, ungesehen fertig wurde oder sich in den letzten 2 Stunden geändert hat (bleibt auf diesem Gerät gespeichert). **Neue Aufgabe** (oder `n`) öffnet den eigenen neuen Chat von dsh in dem Projekt, das die Tafel zeigt (bei **Alle Projekte** das Projekt, das Neue Sitzung von dsh wählt), damit du wie in jedem Chat Dateien hinzufügen, Befehle nutzen und das Modell wählen kannst. Wenn deine erste Nachricht abgeht, kommt die Tafel von selbst zurück. Bis dahin wartet der Chat oben in **In Arbeit** als **Neue Aufgabe**: Klicke darauf, um die erste Nachricht zu schreiben. Ein Projekt mit einem Chat, der auf dich wartet, hat in der Projektliste einen orangen Punkt (der Projektname oben hat ihn auch, solange ein Chat wartet). dsh benennt den Chat, und das Modell des Chats schreibt aus dieser Nachricht bis zu 3 Schlagwörter. Klicke auf eine Karte, um ihren Chat zu öffnen. Klicke auf eine orange Karte (oder auf ihr **Antworten**), um direkt auf der Tafel zu antworten; das Feld hat **Chat öffnen** für den ganzen Chat: **Ablehnen** oder **Einmal zulassen**, **Genehmigen** oder **Änderungen anfordern** bei einem Plan, oder die Optionen und dein eigener Text bei einer Frage. Klicke auf einer beendeten Karte auf **×**, um sie von der Tafel zu nehmen, oder öffne **Kürzlich beendet** und klicke oben in **Fertig** auf **Alle entfernen**, um diese Karten von der Tafel zu nehmen: Zuerst zeigt ein Dialog, wie viele Karten welches Projekts gehen, und ungelesene (grüne) Karten bleiben. In den 8 Sekunden danach legt **Rückgängig** die Karten zurück; **Entfernt (N)** unter **Fertig** listet die Karten, die von der Tafel genommen sind, und **Zurücklegen** zeigt eine davon wieder in **Fertig**. Kein Chat wird gelöscht: Die Chats bleiben in der Seitenleiste von dsh, die Tafel merkt sich das auch nach einem Neustart (Tether zeigt dieselbe Tafel), und ein Chat, der wieder läuft, kommt zurück. Zeige auf eine Karte in **In Arbeit** (oder setze den Tastaturfokus darauf), um ihren Fortschritt zu sehen: wie lange der Chat läuft, den Schritt seiner To-do-Liste, das Tool, das gerade läuft, und die letzte Zeile des Agenten. Unter Einstellungen → Composer Plus → Aufgabentafel wählt **Fortschritt beim Darüberfahren** zwischen **Schnell (ohne KI)** (Standard: liest nur den Chat) und **KI-Zusammenfassung** (ein kurzer Aufruf an das Modell des Chats schreibt zusätzlich ein oder zwei Sätze). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Screenshot: Aufgabentafel"></a> |
|
|
75
75
|
| **Projektgedächtnis** | <a id="feature-projectmemory"></a>Standardmäßig aus: Schalte die Funktion unter **Einstellungen → Composer Plus** ein. Jeder Projektordner bekommt ein eigenes Gedächtnis, das spätere Chats dieses Projekts lesen, so wie DS Bot eines pro Bot führt. Nach jeder abgeschlossenen Runde liest ein Aufruf an das Modell des Chats die neuen Nachrichten (keine zurückgenommenen), speichert deine dauerhaften Vorlieben, Entscheidungen und Fakten als kurze Notizen und ändert oder entfernt alte. Der Agent kann Notizen auch selbst speichern, entfernen und suchen (`memory_remember`, `memory_forget`, `memory_recall`). Eine Notiz kann auch global sein: Jedes Projekt liest sie. Ein neuer Chat bekommt die Notizen in seinem Systemprompt; eine später gespeicherte Notiz erscheint ab dem nächsten Chat. Die Dateien sind Markdown im dsh-Basisordner (`storages/dsh-composer-plus/memory/`), nie im Projektordner. **Gedächtnis öffnen** in derselben Zeile zeigt alle gespeicherten Notizen nach Projekt gruppiert (und das globale Gedächtnis), mit einem Filter. Schreibe in eigenen Worten, was sich ändern soll (zum Beispiel „ich nutze jetzt pnpm statt yarn“), dann **Änderungen ansehen**: Das Standardmodell von dsh schlägt die Änderungen vor, und erst **Anwenden** speichert sie. In Tether: Menü des Chat-Titels → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Screenshot: Projektgedächtnis"></a> |
|
|
76
|
+
| **Versionsverlauf des Gedächtnisses** | <a id="feature-memoryhistory"></a>Standardmäßig an, solange **Projektgedächtnis** an ist. Vor jedem Speichern des Gedächtnisses (der Agent, die Prüfung nach einem Durchgang, **Gedächtnis öffnen**) wird eine Kopie der Notizen im vorherigen Zustand behalten. Wähle in **Gedächtnis öffnen** ein Projekt oder **Globales Gedächtnis** und dann **Verlauf**: die Versionen nach Datum und wer das Gedächtnis danach geändert hat. Wähle eine Version, um als Diff zu sehen, was eine Wiederherstellung ändert, dann **Wiederherstellen**. Die Notizen vor einer Wiederherstellung werden auch behalten, sodass du sie rückgängig machen kannst. Die neuesten 50 Versionen jedes Gedächtnisses bleiben. In Tether: Menü des Chat-Titels → Project memory → History. | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="Screenshot: Versionsverlauf des Gedächtnisses"></a> |
|
|
77
|
+
| **Gedächtnis nach AGENTS.md exportieren** | <a id="feature-memoryexport"></a>Wähle in **Gedächtnis öffnen** ein Projekt und dann **Nach AGENTS.md exportieren**: Die Notizen dieses Projekts kommen in einen markierten Abschnitt von `AGENTS.md` in seinem Ordner, damit du sie committen und mit deinem Team und anderen Agent-Tools teilen kannst. Du siehst die Änderung zuerst als Diff; nur **AGENTS.md schreiben** speichert sie. Der nächste Export ersetzt nur diesen Abschnitt. Globales Gedächtnis, Quellen und Daten bleiben draußen. In Tether: Menü des Chat-Titels → Project memory → Export to AGENTS.md. | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="Screenshot: Gedächtnis nach AGENTS.md exportieren"></a> |
|
|
78
|
+
| **Quellenlink für Gedächtnisnotizen** | <a id="feature-memorysource"></a>In **Gedächtnis öffnen** steht neben einer Notiz aus einem Chat (der Agent hat sie gespeichert, die Prüfung nach einem Durchgang hat sie behalten oder du hast einen Vorschlag angenommen) **Quelle**: Ein Klick öffnet diesen Chat an der Nachricht, damit du prüfen kannst, warum die Notiz da ist, bevor du sie änderst oder löschst. Eine Notiz aus einer früheren Version öffnet nur ihren Chat. In Tether: Menü des Chat-Titels → Project memory → Source. | <a href="assets/features/memorySource.webp"><img src="assets/features/memorySource.webp" width="160" alt="Screenshot: Quellenlink für Gedächtnisnotizen"></a> |
|
|
79
|
+
| **Gedächtnis in ein anderes Projekt kopieren** | <a id="feature-memorycopy"></a>Wähle in **Gedächtnis öffnen** ein Projekt oder **Globales Gedächtnis** und dann **In Projekt kopieren**: Markiere die Notizen, suche in den dsh-Projekten und klicke eines an. Alle markierten Notizen kommen in das Gedächtnis dieses Projekts (mit Thema und Quelle) oder keine: Passt eine nicht, wird nichts kopiert und der Grund angezeigt. Eine Notiz, die das Projekt schon hat, wird übersprungen. In Tether: Menü des Chat-Titels → Project memory → Copy to project. | <a href="assets/features/memoryCopy.webp"><img src="assets/features/memoryCopy.webp" width="160" alt="Screenshot: Gedächtnis in ein anderes Projekt kopieren"></a> |
|
|
80
|
+
| **Veraltete Gedächtnisnotizen finden** | <a id="feature-memorystale"></a>Wenn du in **Gedächtnis öffnen** ein Projekt wählst, werden die Dateipfade (in `Code`), npm-Skripte und Branch-Namen in seinen Notizen mit dem aktuellen Projekt verglichen. Eine Notiz, die etwas nennt, das das Projekt nicht mehr hat, zeigt ⚠ mit dem Fehlenden, damit du sie korrigieren oder löschen kannst, bevor das Modell damit arbeitet. Gelesen werden nur normale Dateien im Projektordner und eine Git-Liste der Branches; nichts wird geändert und kein Modell aufgerufen. In Tether: Menü des Chat-Titels → Project memory. | <a href="assets/features/memoryStale.webp"><img src="assets/features/memoryStale.webp" width="160" alt="Screenshot: Veraltete Gedächtnisnotizen finden"></a> |
|
|
81
|
+
| **Gedächtnis in diesem Chat nicht nutzen** | <a id="feature-memoryperchat"></a>Solange **Projektgedächtnis** an ist, zeigt die Chat-Kopfzeile **Gedächtnis an**: Klicke darauf, um das Gedächtnis nur für diesen Chat auszuschalten (**Gedächtnis aus**). Das Modell dieses Chats bekommt dann keinen Gedächtnisabschnitt und keine Gedächtnis-Tools, und die Prüfung nach jedem Durchgang liest ihn nicht. Ab dsh 0.2.1 ist derselbe Knopf auf dem Bildschirm Neuer Chat, sodass ein Test-Chat ohne Gedächtnis beginnt. Andere Chats ändern sich nicht. In Tether: Menü des Chat-Titels → Use project memory. | <a href="assets/features/memoryPerChat.webp"><img src="assets/features/memoryPerChat.webp" width="160" alt="Screenshot: Gedächtnis in diesem Chat nicht nutzen"></a> |
|
|
82
|
+
| **Gedächtnisnotizen aus einem Chat vorschlagen** | <a id="feature-memorysuggest"></a>Solange **Projektgedächtnis** an ist, hat die Chat-Kopfzeile **Für das Gedächtnis vorschlagen**: Ein Klick fragt das Modell des Chats, welche Regeln und Entscheidungen dieses Chats es wert sind, für spätere Chats behalten zu werden. Jeder Vorschlag nennt den Grund; **Annehmen** speichert ihn mit einem Link zum Chat und zur Nachricht, aus der er stammt, **Ablehnen** verwirft ihn. Vor dem Annehmen wird nichts gespeichert, und das Modell wird nur bei einem Klick aufgerufen. Von einem Zurücksetzen zurückgezogene Nachrichten werden nicht gesendet. In Tether: Menü des Chat-Titels → Suggest for memory. | <a href="assets/features/memorySuggest.webp"><img src="assets/features/memorySuggest.webp" width="160" alt="Screenshot: Gedächtnisnotizen aus einem Chat vorschlagen"></a> |
|
|
76
83
|
| **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, bis das Zeitlimit abläuft (standardmäßig 1 Stunde; wähle es unter **Einstellungen → Composer Plus → Für diesen Chat zulassen**). Danach fragt der Agent wieder. Ein Chip in der Kopfzeile listet die Freigaben mit ihrer Endzeit 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> |
|
|
84
|
+
| **Mit Notiz ablehnen** | <a id="feature-rejectnote"></a>Die Genehmigungskarte zeigt **Mit Notiz ablehnen…** neben **Ablehnen**. Klicke darauf, schreibe den Grund oder was stattdessen zu tun ist, und klicke auf **Ablehnen** (oder drücke `Enter`; `Shift+Enter` fügt eine Zeile ein, `Esc` schließt das Feld). Die Notiz geht zuerst an den Agenten, als Nachricht in den wartenden Durchgang, dann wird die Anfrage abgelehnt: Das Modell liest die Ablehnung und deine Notiz im selben Durchgang, ohne eine weitere Nachricht von dir. Kann die Notiz nicht gesendet werden, wird nichts abgelehnt und das Feld bleibt offen. In Tether: Genehmigungsblatt → Reject with note. | <a href="assets/features/rejectNote.webp"><img src="assets/features/rejectNote.webp" width="160" alt="Screenshot: Mit Notiz ablehnen"></a> |
|
|
85
|
+
| **Geheime Eingabe** | <a id="feature-secretinput"></a>Der Agent bekommt das Tool `request_secret`. Braucht er ein Passwort, einen Token oder einen API-Schlüssel, fragt er damit statt im Chat: In der Zeile des Tools erscheint eine Karte mit dem Namen, dem Grund, einem Passwortfeld, **Speichern** und **Ablehnen**. **Speichern** schreibt den Wert in eine Datei auf diesem Mac, die nur du lesen kannst, und der Agent bekommt nur den Pfad der Datei, den er als Eingabe eines Befehls nutzt (zum Beispiel `"$(cat <path>)"`). Zeigt ein späteres Tool-Ergebnis den Wert, ersetzt `[secret]` ihn, bevor das Modell ihn sieht. Die Datei wird am Ende des Durchgangs gelöscht. **Ablehnen** sagt dem Agenten, dass du ihn nicht gegeben hast. Schalte die Funktion unter **Einstellungen → Composer Plus** aus, um das Tool zu entfernen. In Tether: die Leiste „Secret: …“ über dem Eingabefeld → Enter. | <a href="assets/features/secretInput.webp"><img src="assets/features/secretInput.webp" width="160" alt="Screenshot: Geheime Eingabe"></a> |
|
|
86
|
+
| **In Antwort zitieren** | <a id="feature-quotereply"></a>Markiere einen Teil einer Antwort: Über der Markierung erscheint die Schaltfläche **Zitieren**. Klicke darauf: Der Teil kommt als Markdown-Zitat (`> …`) an die Cursorposition im Eingabefeld, gefolgt von einer leeren Zeile, und das Eingabefeld bekommt den Fokus, sodass du deine Antwort darunter schreibst. Nur der Antworttext zählt, nicht das Nachdenken, Tool-Zeilen oder deine eigenen Nachrichten. Ein Zitat hat höchstens 2.000 Zeichen. `Cmd+Z` (`Strg+Z`) entfernt es. In Tether: eine Antwort gedrückt halten → Quote (die ganze Antwort). | <a href="assets/features/quoteReply.webp"><img src="assets/features/quoteReply.webp" width="160" alt="Screenshot: In Antwort zitieren"></a> |
|
|
87
|
+
| **Nebenchat** | <a id="feature-sidechat"></a>Schreibe eine Nebenfrage ins Eingabefeld und klicke auf den Sprechblasen-Knopf (**Im Nebenchat fragen**): Eine Kopie des Chats öffnet sich und beantwortet sie im Nur-lesen-Modus von dsh, während der Chat weiterarbeitet. Die Kopie kennt den Chat bis jetzt, außer Nachrichten, die noch in der Warteschlange warten, und nutzt sein Modell. Eine Leiste über ihrem Eingabefeld hat **Zurückholen**: Der Chat öffnet sich, und sein Eingabefeld bekommt deine Fragen (als `> `-Zitate) und die Antworten. **Zurück zum Chat** öffnet nur den Chat. Der Nebenchat bleibt als „↳ <Frage>“ in der Seitenleiste; archiviere ihn dort. In Tether: Menü des Chat-Titels → Side chat…. | <a href="assets/features/sideChat.webp"><img src="assets/features/sideChat.webp" width="160" alt="Screenshot: Nebenchat"></a> |
|
|
88
|
+
| **Diff-Notizen** | <a id="feature-diffcomments"></a>Öffne im **Änderungsbereich** das Diff einer Datei und klicke bei einer Zeile auf **+** (Umschalt-Klick auf eine zweite Zeile desselben Blocks für einen Bereich), schreibe eine Notiz und klicke auf **Notiz speichern**. Die Notizen des Chats warten in einer Leiste oben im Bereich; **In Eingabefeld senden** legt sie an der Cursorposition als Markdown ab: `path:12-14`, die Zeilen als `diff`-Block und deine Notiz. **Löschen** verwirft sie. Die Notizen bleiben in diesem Browser, bis du sie sendest oder löschst. Braucht den **Änderungsbereich**. In Tether: das Diff einer Datei → eine Zeile gedrückt halten → Add note…. | <a href="assets/features/diffComments.webp"><img src="assets/features/diffComments.webp" width="160" alt="Screenshot: Diff-Notizen"></a> |
|
|
77
89
|
| **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. In der Ansicht **Arbeitsbereichsbaum** zeigt die Zeile eines übergeordneten Ordners auch die Chats jedes Projekts darin (zum Beispiel jedes Branch-Ordners in `.worktrees/`), auch wenn der Ordner eingeklappt ist. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Screenshot: Projektstatus"></a> |
|
|
78
90
|
| **Git-Branch in Chatzeilen** | <a id="feature-sessionbranch"></a>In der Ansicht „In einer Liste“ der Seitenleiste zeigt jede Chatzeile ein kleines graues Etikett mit dem git-Branch, auf dem der Projektordner des Chats in dessen letzter Runde war (zum Beispiel `main` oder `feature/login`; ein losgelöster HEAD hat keinen Branch und zeigt kein Etikett). Zwei Chats eines Projekts auf verschiedenen Branches sehen nicht mehr gleich aus, und du siehst sofort, wenn du einen Chat auf dem falschen Branch fortsetzen willst. Fahre mit der Maus über das Etikett, um den vollen Namen zu sehen. Die Host-Hälfte liest den Branch (`git branch --show-current`, nur lesend), wenn eine Runde beginnt und wenn sie endet; ein Chat ohne Runde seit der Installation oder ein Ordner, der kein git-Repository ist, zeigt kein Etikett. In „Arbeitsbereich“ und „Arbeitsbereichsbaum“ zeigt keine Chatzeile das Etikett, weil der Chat schon unter seiner Projektzeile steht. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Screenshot: Git-Branch in Chatzeilen"></a> |
|
|
79
91
|
| **Alle als gelesen markieren** | <a id="feature-markprojectread"></a>Klicke in der Seitenleiste auf die Schaltfläche **…** eines Projekts → **Alle als gelesen markieren**. Bei allen Chats in diesem Projekt verschwindet sofort der grüne Punkt für ungelesene Chats. Andere Projekte behalten ihre Punkte. Der Eintrag ist ausgegraut (**Keine ungelesenen Chats**), wenn das Projekt keine hat. | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="Screenshot: Alle als gelesen markieren"></a> |
|
|
@@ -83,8 +95,11 @@ Starte dsh danach neu. (Die CLI kann nicht in das Desktop-Profil installieren; d
|
|
|
83
95
|
| **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> |
|
|
84
96
|
| **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> |
|
|
85
97
|
| **Wartenden Chat bei Inaktivität öffnen** | <a id="feature-idleswitch"></a>Wenn ein Chat eine Frage stellt, auf eine Genehmigung oder eine Planprüfung wartet (der orangefarbene Punkt) oder eine Runde beendet, die du noch nicht gelesen hast (der grüne Punkt), und du dsh 30 Sekunden lang nicht benutzt, öffnet dsh diesen Chat. Orangefarbene Chats öffnen sich vor grünen. In jeder Gruppe öffnet sich zuerst der, der am längsten wartet; der nächste öffnet sich nach weiteren 30 Sekunden ohne Benutzung. Eine Taste, ein Klick, eine Mausbewegung, das Mausrad oder eine Berührung starten die 30 Sekunden neu. Text im Feld mit dem Fokus, markierter Text oder ein offenes Menü oder ein offener Dialog verhindern den Wechsel ebenfalls. Solange ein wartender Chat auf dem Bildschirm ist, ändert sich nichts. Verlässt du einen wartenden Chat ohne Antwort, kann er sich nach den nächsten 30 Sekunden ohne Benutzung wieder öffnen. Öffnet sich ein grüner Chat, verschwindet sein Punkt; der nächste grüne Chat öffnet sich erst, nachdem du dsh wieder benutzt hast und es dann 30 Sekunden lang nicht benutzt. Das funktioniert auch, wenn dsh im Hintergrund ist, aber dsh kommt nicht in den Vordergrund. | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="Screenshot: Wartenden Chat bei Inaktivität öffnen"></a> |
|
|
98
|
+
| **Nächster wartender Chat** | <a id="feature-nextwaiting"></a>Eine Schaltfläche in der Kopfzeile der Seitenleiste zeigt, wie viele andere Chats auf Sie warten, mit einem Punkt in der Farbe des nächsten: orange, wenn er eine Frage stellt oder auf eine Genehmigung oder eine Planprüfung wartet, grün, wenn er eine Runde beendet hat, die Sie noch nicht gelesen haben. Klicken Sie darauf oder drücken Sie Cmd+Shift+E (Strg+Shift+E unter Windows und Linux), um diesen Chat zu öffnen. Orangefarbene Chats kommen vor grünen; in jeder Gruppe kommt zuerst der Chat, der am längsten wartet. Der Chat auf dem Bildschirm zählt nicht. Wenn kein anderer Chat wartet, ist die Schaltfläche nicht sichtbar und die Taste tut nichts. Die Taste können Sie auf der Seite Tastenkürzel von dsh ändern (Nächster wartender Chat). | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="Screenshot: Nächster wartender Chat"></a> |
|
|
99
|
+
| **Options-Schaltflächen** | <a id="feature-optionpicks"></a>Wenn eine Antwort mit einer Liste von Optionen endet (eine nummerierte Liste mit 1 bis 9 Einträgen unter einer Überschrift „Optionen“ oder einer fetten Zeile „Optionen“, auch „Nächste Schritte“ und dieselben Wörter in den Sprachen der App), erscheint unter der Antwort für jede Option eine Schaltfläche. Ein Klick sendet „Option N: …“ mit der ganzen Option als Ihre Nachricht, als hätten Sie sie getippt. Die mit „(empfohlen)“ markierte Option ist hervorgehoben. Die Schaltflächen erscheinen nur unter der neuesten Antwort, solange der Chat untätig und das Eingabefeld leer ist; eine bereits gewählte Antwort und eine durch ein Zurücksetzen zurückgezogene Antwort zeigen keine. Solange sie sichtbar sind, macht die Vorhersage der nächsten Nachricht keinen Vorschlag. Auf einer Fragekarte des Agenten wählen die Tasten 1–9 diese Option wie ein Klick (nicht im Antwortfeld und nicht in den ersten 0,8 Sekunden nach dem Erscheinen der Frage). | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="Screenshot: Options-Schaltflächen"></a> |
|
|
86
100
|
| **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> |
|
|
87
101
|
| **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 (mit Fotos: das **+** im Eingabefeld → Camera, Photos oder Paste image), 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. Das Panel **Mobile Verbindung** listet die gekoppelten iPhones mit ihrer letzten Verbindung auf: **Remove** trennt eines sofort. „Tailscale only“ lehnt das lokale Netzwerk ab (für ein geteiltes WLAN), und das Zugriffsprotokoll zeigt, wer sich verbinden wollte. In Tether sperrt „Settings → Privacy“ die App mit Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Screenshot: Mobile Verbindung (iPhone)"></a> |
|
|
102
|
+
| **Remote-Computer** | <a id="feature-remotecomputers"></a>Öffne dsh auf deinen anderen Macs über [Tailscale](https://tailscale.com) und setze ihre Chats hier fort. Schalte die Funktion auf jedem Mac unter **Einstellungen → Composer Plus** ein (sie ist standardmäßig aus, weil sie Netzwerkports öffnet). Schalte auf dem Mac, den du öffnen willst, **Anderen Computern erlauben, diesen Mac zu öffnen** ein, klicke auf **Kopplungslink erstellen** und kopiere den Link. Wähle auf diesem Mac in der Computerauswahl links vom Chattitel **Computer hinzufügen…**, füge den Link ein und klicke auf **Verbinden**. Klicke dann auf dem anderen Mac auf **Genehmigen**. Danach listet die Auswahl **Dieser Mac** und deine Computer auf: Wähle einen, und sein dsh öffnet sich im Browser-Tab der rechten Seitenleiste (oder in einem Browserfenster), mit seinen eigenen Chats, Tools und Dateien. Im Einstellungsbereich kannst du Computer umbenennen und entfernen. Dort siehst du auch die Computer, die diesen Mac öffnen können (**Entfernen** trennt einen sofort). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Screenshot: Remote-Computer"></a> |
|
|
88
103
|
| **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 in der Sprache von **App-Sprache** (sie kommen mit der neuen Version, ohne weiteren Netzwerkaufruf; eine Sprache ohne Notes zeigt die englischen); **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> |
|
|
89
104
|
| **Sicherung** | <a id="feature-backup"></a>Einstellungen → Composer Plus → **Sicherung** → **Jetzt sichern** schreibt dein ganzes dsh-Home (Chats, Einstellungen, Plugins, MCP, Skills) mit Prüfsumme in ein einziges Archiv in `~/Desktop/dsh-backups`. Geheimnisse werden im Archiv maskiert: Dateien mit Anmeldedaten, Schlüsseldateien (`.pem`, `.key`) und die Werte token, secret und password der yml-Einstellungen bleiben nur auf diesem Computer, im `vault` des Ordners. `cache/`, `dsh-runtimes/` und `node_modules` kommen nicht ins Archiv (dsh erstellt sie neu). Jede Sicherung in der Liste hat **Prüfen** (liest sie vollständig), **Für einen anderen Computer** (ein Ordner zum Kopieren auf den neuen Computer, mit der Rettungskonsole) und **Löschen**. Archive von dsh-backup im selben Ordner erscheinen und funktionieren auch. Zum Wiederherstellen beende dsh und nutze die Rettungskonsole. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Screenshot: Sicherung"></a> |
|
|
90
105
|
| **Automatische Sicherung** | <a id="feature-autobackup"></a>Schalte **Automatische Sicherung** ein (standardmäßig aus: Jede Kopie ist etwa so groß wie dein dsh-Home ohne seinen Cache). Wähle, wie oft gesichert wird (**Alle**: 6 Stunden bis 7 Tage, standardmäßig 24 Stunden) und wie viele Sicherungen bleiben (**Behalten**: 3 bis 14, standardmäßig 7). Der nächste Zeitpunkt steht unter dem Schalter; eine fehlgeschlagene Sicherung erscheint dort auch und wird 30 Minuten später erneut versucht. Wenn dsh oder Composer Plus mit einer neuen Version startet, entsteht kurz nach dem Start ein Snapshot, bevor die neue Version deine Daten lange benutzt hat (die zwei neuesten bleiben, markiert mit **Vor einem Upgrade**). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Screenshot: Automatische Sicherung"></a> |
|
|
@@ -137,6 +152,9 @@ Jedes Paket hat 3.280 Texte: jeden Oberflächentext von dsh `0.2.0-rc.2` und `0.
|
|
|
137
152
|
| `Cmd+F` auf einem Mac, `Ctrl+F` unter Windows und Linux | geöffneter Chat | **Im Chat suchen** öffnen |
|
|
138
153
|
| `Enter` / `Shift+Enter`, `↓` / `↑` | Feld von **Im Chat suchen** | nächster / vorheriger Treffer |
|
|
139
154
|
| `Esc` | Feld von **Im Chat suchen** | Feld schließen |
|
|
155
|
+
| `Cmd+Shift+E` auf dem Mac, `Strg+Shift+E` unter Windows und Linux | überall in dsh | den **Nächster wartender Chat** öffnen (auf der Seite Tastenkürzel von dsh änderbar) |
|
|
156
|
+
| `Cmd+Shift+K` auf dem Mac, `Strg+Shift+K` unter Windows und Linux | überall in dsh | die **Aufgabentafel** öffnen (auf der Seite Tastenkürzel von dsh änderbar) |
|
|
157
|
+
| `1`–`9` | Fragekarte von dsh, nicht im Antwortfeld | diese Option wählen (**Options-Schaltflächen**) |
|
|
140
158
|
|
|
141
159
|
Ein geöffnetes `/`- oder `@`-Menü behält diese Tasten für sich.
|
|
142
160
|
|
|
@@ -162,17 +180,20 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
162
180
|
- **Für diesen Chat zulassen:** Freigaben werden mit dem Zeitpunkt, zu dem sie erteilt wurden, in `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json` gespeichert (Rechte nur für den Besitzer). Eine Freigabe gilt für genau ein Tool in einem Chat, bis das Zeitlimit abläuft (standardmäßig 1 Stunde). Wenn dieses Tool schreiben kann, deckt die Freigabe auch jeden Schreibvorgang ab. Widerrufe sie über den Chip in der Kopfzeile.
|
|
163
181
|
- Die automatische Prüfung läuft weiterhin bei jedem Aufruf. Fehlgeschlagene Prüfungen werden nie automatisch erlaubt.
|
|
164
182
|
- **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. „Tailscale only“ lehnt jede Verbindung aus dem lokalen Netzwerk ab, auch bereits offene. Das Zugriffsprotokoll speichert die neuesten 200 Verbindungsversuche (Zeit, IP-Adresse, Gerätename, zugelassen oder abgelehnt und warum) in `access.json`. Es enthält nie ein Token oder einen Kopplungscode. Daten: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (Dateien nur für den Besitzer). Details: [tether/README.md](tether/README.md).
|
|
183
|
+
- **Remote-Computer:** aus, bis du die Funktion auf jedem Mac einschaltest. **Anderen Computern erlauben, diesen Mac zu öffnen** öffnet einen zweiten HTTPS-Port (19392), nur auf der Tailscale-Adresse dieses Macs (nicht im WLAN, keine Ankündigung über Bonjour). Ein anderer Mac braucht einen einmaligen Kopplungslink (5 Minuten gültig), das passende Zertifikat (gepinnt) und deine Bestätigung mit **Genehmigen**. Dieser Mac speichert von seinem Token nur einen Hash. Ein gekoppelter Computer bekommt die volle Kontrolle über dsh auf diesem Mac, als ob du dsh hier benutzen würdest: Chats, Modelle, Tools, Dateien und Terminal. Entferne ihn im Einstellungsbereich, dann schließen sich seine Verbindungen sofort. Der Mac, der einen anderen öffnet, speichert das Token dieses Computers in `$DSH_HOME/storages/dsh-composer-plus/computers.json` (nur für den Besitzer). Er öffnet für jeden Computer, den du wählst, ein Relay auf `127.0.0.1`. Die Seite bekommt einen einmaligen Link (60 Sekunden gültig), und das Relay nimmt nur seine eigene Seite an (seine Adresse, keine andere Website). Eine Seite, die ein anderer Mac geöffnet hat, zeigt keine Computerauswahl und kann die Computer dieses Macs nicht ändern.
|
|
165
184
|
- **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.
|
|
185
|
+
- **Nutzungszählung:** Einmal am Tag fragt die Host-Hälfte GitHub nach der kleinen Datei `active.txt` im Release der installierten Version (`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/active.txt`). GitHub zählt diese Anfragen pro Datei; der Autor sieht also nur, wie viele Kopien jeder Version an diesem Tag gefragt haben. Die Anfrage enthält keine ID, kein Cookie und keine Daten über dich oder deine Chats; GitHub sieht deine IP-Adresse, wie bei jeder Update-Prüfung. Der Tag der letzten Anfrage steht in `$DSH_HOME/storages/dsh-composer-plus/active.json`. Ein Git-Checkout dieses Repositorys und eine umbenannte Kopie senden nichts. Es gibt keinen Schalter dafür.
|
|
166
186
|
- **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).
|
|
167
187
|
- **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).
|
|
168
188
|
- **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).
|
|
169
189
|
- **Zielprüfung:** Sie läuft nur, wenn der Agent ein `/goal` in einem automatischen Durchlauf als abgeschlossen markiert (oder wenn du auf **Jetzt ausführen** klickst). Die Host-Hälfte führt den Testbefehl im Ordner des Chats im Sandbox-Modus des Chats aus (wie das eigene `bash`-Werkzeug von dsh: dieselbe Richtlinie für den Dateizugriff; kann diese Sandbox nicht starten, läuft der Test nicht und die Prüfung schlägt fehl). Um den Befehl zu finden, liest sie nur `package.json`, `Makefile`, `Cargo.toml`, `go.mod`, `pyproject.toml` und `pytest.ini`, als reguläre Dateien im Ordner (kein Symlink aus dem Ordner hinaus, kein FIFO). Dann sendet sie das Ziel, den Chat seit dem Start des Ziels (deine Nachrichten, die Antworten des Agenten, Werkzeugaufrufe gekürzt auf 1.000 Zeichen und die letzten 2.000 Zeichen jedes Werkzeugergebnisses; kein Reasoning, keine zurückgenommenen Schritte; höchstens etwa 60.000 Zeichen, den neuesten Teil), `git status --short` und das Ende der Testausgabe als eine einzige Anfrage ohne Werkzeuge an das unter **Zielprüfung** gewählte Modell (standardmäßig das eigene Modell des Chats). Werkzeugausgaben können enthalten, was der Agent gelesen hat. Daher kann diese Anfrage Teile deiner Dateien enthalten, so wie der Chat selbst. In den Chat und ins Projekt wird nichts geschrieben. Dein Testbefehl, die Limits, das letzte Ergebnis (mit dem Ende seiner Ausgabe) und die Modellwahl liegen in `$DSH_HOME/storages/dsh-composer-plus/goal-check.json` (Datei nur für den Besitzer, die neuesten 500 Chats).
|
|
170
190
|
- **In einem neuen Chat fortsetzen:** Nichts läuft, bis du darauf klickst. Dann sendet die Host-Hälfte den Chat (so, wie die Zielprüfung ihn liest: kein Reasoning, keine zurückgenommenen Schritte) an das eigene Modell des Chats und zeigt die Übergabenotiz. Nur **Neuen Chat starten** erstellt einen neuen Chat. Ins Projekt wird nichts geschrieben.
|
|
171
191
|
- **Kontextaufschlüsselung:** Die Host-Hälfte liest nur das Chatprotokoll. Kein Modellaufruf, keine Projektdatei.
|
|
172
|
-
- **Aufgabentafel:** Die Tafel zeigt die Chats von dsh aus den eigenen Listen von dsh in diesem Fenster; sie fügt keine eigenen Chatdaten hinzu.
|
|
192
|
+
- **Aufgabentafel:** Die Tafel zeigt die Chats von dsh aus den eigenen Listen von dsh in diesem Fenster; sie fügt keine eigenen Chatdaten hinzu. **Neue Aufgabe** öffnet den eigenen neuen Chat von dsh, und du schreibst die erste Nachricht im Eingabefeld von dsh; Freigaben, die Sandbox und das Modell des Chats gelten also wie sonst. Die Host-Hälfte behält die erste Nachricht dieses Chats als Prompt der Karte und sendet sie (ihre ersten 4.000 Zeichen, sonst nichts) in einer weiteren Anfrage ohne Tools an das Modell dieses Chats, um bis zu 3 Schlagwörter zu bekommen. Prompt, Schlagwörter und Startzeit jeder Aufgabe liegen in `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` (Datei nur für den Besitzer, die neuesten 2.000), dazu die IDs der Chats, die du mit **×** oder **Alle entfernen** von der Tafel genommen hast (die neuesten 5.000); der Schalter liegt daneben in `board-switch.json`. Nichts wird in einen Projektordner geschrieben. **Antworten** sendet deine Antwort an die offene Anfrage von dsh, so wie es die Karte im Chat selbst tut. Die alte Aufgabenliste früherer Versionen (`board.json`) bleibt unverändert auf der Festplatte und wird nicht gelesen. **Fortschritt beim Darüberfahren** liest das Protokoll des Chats auf diesem Mac. Mit **Schnell (ohne KI)** (Standard) wird nichts gesendet. Mit **KI-Zusammenfassung** sendet die Host-Hälfte, solange das Fortschrittsfeld einer laufenden Karte zu sehen ist (oder solange die Tafel in Tether offen ist, für bis zu 8 laufende Karten), den neuesten Teil dieses Chats (höchstens etwa 6.000 Zeichen: deine Nachrichten, die Textantworten des Agenten, seine Werkzeugaufrufe und das Ende ihrer Ergebnisse; kein Reasoning, keine zurückgenommenen Nachrichten) als eine Anfrage ohne Werkzeuge an das Modell des Chats. Erneut sendet sie erst, wenn der Chat weitergekommen ist, höchstens alle 20 Sekunden pro Chat. Die Notiz bleibt nur im Speicher; die Einstellung liegt in `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` (Datei nur für den Besitzer).
|
|
173
193
|
- **Geschützte Dateien:** Die Liste und der Schalter liegen in `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` (Datei nur für den Besitzer). Die Prüfung liest nur den Pfad jedes Aufrufs eines Datei-Tools (und seinen echten Pfad), nie die Datei.
|
|
174
194
|
- **Blockierte Befehle:** Die Regeln und der Schalter liegen in `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` (Datei nur für den Besitzer). Die Prüfung liest nur den Befehlstext jedes Aufrufs von `bash` und `pwsh`; sie führt nichts aus und sendet nichts.
|
|
175
|
-
- **
|
|
195
|
+
- **Geheime Eingabe:** Der Wert geht von der Karte (oder von Tether über das Gateway, das keine Anfrageinhalte protokolliert) nur in der Antwortanfrage an den Host. Der Host schreibt ihn nach `$DSH_HOME/storages/dsh-composer-plus/secrets/<zufälliger Name>` (Ordner 0700, Datei 0600); nichts geht ins Projekt, ins Chatprotokoll oder ins Tool-Ergebnis. Der Host hält den Wert im Speicher, um ihn in späteren Tool-Ergebnissen dieses Chats durch `[secret]` zu ersetzen. Die Datei und diese Kopie werden am Ende des Durchgangs des Chats und beim Start von dsh gelöscht. Der Schalter liegt daneben in `secrets.json`. Ein Befehl, den der Agent mit der Datei ausführt, kann den Wert dorthin senden, wohin dieser Befehl sendet: Das ist der Zweck.
|
|
196
|
+
- **Projektgedächtnis:** aus, bis du es einschaltest. Solange es an ist, schickt der Host-Teil nach jeder abgeschlossenen Runde eines Chats der obersten Ebene die neuen Nachrichten dieses Chats seit der letzten Prüfung (deine Nachrichten und die Textantworten des Agenten; keine Werkzeugausgabe, kein Reasoning, kein verborgener Kontext, keine zurückgenommenen Nachrichten; in einem abgezweigten Chat bleibt die Kopie des Eltern-Chats weg; höchstens etwa 16.000 Zeichen) und die gespeicherten Notizen an das Modell des Chats, als eine Anfrage ohne Werkzeuge. Die Notizen sind Markdown-Dateien unter `$DSH_HOME/storages/dsh-composer-plus/memory/` (nur für den Eigentümer): `projects/<id>/` für jeden Projektordner (`<id>` ist ein Hash des echten Pfads des Ordners; `project.json` nennt den Ordner), `global/`, `journal.jsonl` (jede Änderung mit der Zeile davor und danach) und `reviewed.json` (wie weit jeder Chat gelesen wurde). In den Projektordner wird nichts geschrieben. Notizen, die wie ein Schlüssel, ein Token, ein Passwort oder eine Ausweisnummer aussehen, werden abgelehnt. Die Notizen eines Projekts kommen in den Systemprompt jedes neuen Chats in diesem Ordner und gehen so mit jeder Anfrage dieses Chats an das Modell. Der Schalter liegt in `memory.json` am selben Ort. **Gedächtnis öffnen** schickt nichts, bis du auf **Änderungen ansehen** klickst; dann schickt es die angezeigten Notizen und deinen Text als eine Anfrage ohne Werkzeuge an das Standardmodell von dsh. Die Änderungen werden erst mit **Anwenden** geschrieben, mit `editor` im Journal. Tether liest und ändert die Notizen über dieselbe Route. **Versionsverlauf des Gedächtnisses** (standardmäßig an) behält vor jedem Speichern eine Kopie der Gedächtnisdateien in `memory/history/` daneben (nur für den Besitzer, die neuesten 50 je Gedächtnis); er sendet nichts an ein Modell. **Gedächtnis nach AGENTS.md exportieren** sendet nichts an ein Modell und schreibt nur, wenn du auf **AGENTS.md schreiben** klickst: Es liest und schreibt `AGENTS.md` im Projektordner dieses Gedächtnisses (nur eine normale Datei darin, nie über einen symbolischen Link, der ihn verlässt) und ändert nur seinen markierten Abschnitt. **Veraltete Gedächtnisnotizen finden** sendet nichts an ein Modell und schreibt nichts: Es prüft Pfade im Projektordner mit realpath (keine Datei wird gelesen), liest `package.json` nur als normale Datei im Ordner und führt dort ein `git for-each-ref` aus. **Gedächtnis in diesem Chat nicht nutzen** speichert jeden Chat, den du ausschaltest, in `memory-chats.json` daneben (nur für den Besitzer, die neuesten 500); ein solcher Chat sendet kein Gedächtnis an sein Modell. **Gedächtnisnotizen aus einem Chat vorschlagen** sendet nichts, bis du auf **Für das Gedächtnis vorschlagen** klickst; dann sendet es die gespeicherten Notizen des Projekts des Chats und die globalen Notizen sowie die eigenen Nachrichten und Textantworten des Chats (keine Tool-Ausgabe, keine zurückgesetzten Nachrichten; die Kopie des Eltern-Chats in einem Fork bleibt draußen; höchstens etwa 24.000 Zeichen) als eine Anfrage ohne Tools an das eigene Modell des Chats. Ein Vorschlag wird nur mit **Annehmen** gespeichert.
|
|
176
197
|
- **Sicherung:** Nichts verlässt deinen Rechner. Archive landen in `~/Desktop/dsh-backups` (Dateien nur für den Besitzer). Geheimnisse sind nicht im Archiv: Dateien mit Anmeldedaten (`.credentials.yaml`, `.env`), Schlüsseldateien (`.pem`, `.key`, `.p12`, `.pfx`) und die Werte der Einstellungen token, secret, password und API-Schlüssel in den yml-Dateien werden maskiert. Ihre echten Kopien bleiben in `composer-plus-vault/<archive>/` im selben Ordner (nur für den Besitzer), nur auf diesem Computer. **Für einen anderen Computer** kopiert keinen vault: Gib diese Geheimnisse dort neu ein. Deine Chatprotokolle, Einstellungen und der Rest des dsh-Home liegen unverändert im Archiv: Halte den Ordner privat, so wie `$DSH_HOME` selbst. Die Sicherung liest Dateien mit `O_NOFOLLOW | O_NONBLOCK`. Ein Symlink wird als Link gespeichert (nie verfolgt), ein FIFO oder Gerät wird übersprungen. Schalter und Einstellungen der automatischen Sicherung liegen in `$DSH_HOME/storages/dsh-composer-plus/auto-backup.json`, der Schalter der Rettungskonsole in `rescue-console.json`. Solange dsh läuft, nennt `running/host-<pid>.json` jeden dsh-Prozess (die Rettungskonsole liest diese Dateien, um eine Wiederherstellung abzulehnen).
|
|
177
198
|
- **Rettungskonsole:** ein Menü im Terminal; sie öffnet keinen Netzwerkport. Eine Wiederherstellung schreibt nur in einen neuen Ordner neben dem dsh-Home (Dateien mit `O_EXCL | O_NOFOLLOW`, Symlinks zuletzt und nie verfolgt). Sie lehnt ein Archiv ab, das einen unsicheren Namen (`..`, einen absoluten Pfad), ein Gerät oder FIFO, mehr als einen obersten Ordner oder einen Eintrag unter einem Link enthält.
|
|
178
199
|
|
|
@@ -194,7 +215,7 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
194
215
|
- **Kein Branch-Etikett an einer Chatzeile:** Die Seitenleiste ist nicht in „In einer Liste“ (in „Arbeitsbereich“ und „Arbeitsbereichsbaum“ zeigt keine Chatzeile ein Etikett), der Chat hatte seit der Installation dieser Version keine Runde, sein Ordner ist kein git-Repository, oder **Git-Branch in Chatzeilen** ist aus. Starte dsh nach einem Update neu (die Host-Hälfte zeichnet den Branch auf).
|
|
195
216
|
- **Zielprüfung meldet, dass der Test mit Code 127 oder „not found“ beendet wurde:** Ein dsh, das aus dem Finder oder dem Dock gestartet wurde, kann einen kürzeren PATH als dein Terminal haben und findet daher `npm`, `pnpm` oder `cargo` nicht. Starte dsh aus einem Terminal, oder lege unter **Zielprüfung** → **Bearbeiten** deinen eigenen Testbefehl mit dem vollständigen Pfad fest. **Jetzt ausführen** zeigt das Ergebnis sofort.
|
|
196
217
|
- **Das Ziel schließt sich nicht und der Agent arbeitet weiter:** **Zielprüfung** hat einen fehlschlagenden Test oder fehlende Arbeit gefunden. Die Zeile unter dem Ziel zeigt den Grund (fahre mit der Maus über das Ergebnis, um die Details zu sehen). Behebe die Ursache oder den Testbefehl, oder schließe das Ziel selbst mit `/goal` oder der Zielleiste ab (das wird nicht geprüft).
|
|
197
|
-
- **Die Installation schlägt direkt nach einem Release fehl:** Gib die Version mit an (`dsh-composer-plus@1.
|
|
218
|
+
- **Die Installation schlägt direkt nach einem Release fehl:** Gib die Version mit an (`dsh-composer-plus@1.21.0`), siehe den Hinweis zur Installation oben.
|
|
198
219
|
- **Jetzt sichern meldet „Eine andere Sicherungsaktion läuft“:** Eine Aktion läuft in einem anderen dsh-Fenster oder in der Rettungskonsole (sie teilen sich eine Sperrdatei, `.composer-plus.lock`, im Sicherungsordner). Warte, bis sie fertig ist. Läuft keine Aktion, wird die Sperre eines beendeten Prozesses beim nächsten Klick übernommen.
|
|
199
220
|
- **Die Rettungskonsole meldet „dsh is running“:** Beende zuerst dsh. Ist dsh wirklich geschlossen, ist die in der Meldung genannte Datei von einem Absturz übrig: Entferne sie und versuche es erneut.
|
|
200
221
|
- **Nach einer Wiederherstellung startet dsh nicht oder ein Plugin fehlt:** Die Plugin-Pakete eines Profils müssen neu installiert werden. Die Rettungskonsole bietet das nach einer Wiederherstellung an; oder führe `pnpm install` in jedem Ordner unter `$DSH_HOME/profiles/` aus, den sie auflistet. Geheimnisse, die nicht im vault waren (anderer Computer), müssen neu eingegeben werden: Die Konsole listet sie auf.
|
|
@@ -215,11 +236,17 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
215
236
|
- 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.
|
|
216
237
|
- 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.
|
|
217
238
|
- **Neu in Composer Plus N** zeigt die Notes in der Sprache von **App-Sprache**. Eine UI-Sprache mit einer anderen Region bekommt die Notes ihrer Grundsprache (`en-GB` die englischen, `zh-TW` die chinesischen von `zh`). Eine Sprache ohne Notes (eine, die ein anderes Sprachpaket hinzufügt, oder `pt-PT`, das nicht `pt-BR` ist) zeigt die englischen Notes. Die Notes kommen mit der neuen Version. Hat die laufende Kopie keine lesbare Notes-Datei (`release-notes.json`), zeigt das Fenster die englischen Notes von GitHub.
|
|
239
|
+
- **Mit Notiz ablehnen** sendet die Notiz als Nachricht in die wartende Runde und lehnt dann die Anfrage ab. dsh zeigt die Notiz im Chat als deine Nachricht. Solange das Notizfeld offen ist, zeigt die Karte nur **Abbrechen** und **Ablehnen**, sodass ein Klick die Anfrage nicht aus Versehen zulassen kann. `Esc` oder **Abbrechen** bringt die Schaltflächen von dsh zurück. Eine leere Notiz sendet nichts (nutze die eigene Schaltfläche **Ablehnen** von dsh). Schlägt die Ablehnung fehl, nachdem die Notiz gesendet wurde (zum Beispiel, weil die Anfrage inzwischen an anderer Stelle beantwortet wurde), bleibt die Notiz im Chat, und das Modell liest sie bei seinem nächsten Schritt. Die Schaltfläche kommt in das Markup der Genehmigungskarte von dsh (`data-approval-key`), weil dsh keinen Platz für Aktionen der Karte hat. Ändert ein dsh-Update dieses Markup, erscheint die Schaltfläche nicht, und die eigene Schaltfläche **Ablehnen** von dsh funktioniert wie zuvor. Eine Notiz kann höchstens 4.000 Zeichen haben.
|
|
240
|
+
- **Geheime Eingabe** verbirgt nur den genauen Text eines Werts: `[secret]` ersetzt ihn in den späteren Tool-Ergebnissen desselben Chats. Der Agent kann die Datei trotzdem mit einem Shell-Befehl lesen und den Wert in anderer Form ausgeben (base64, ein Teil davon, mit Leerzeichen), und diese Form erreicht das Modell. Die eigenen Datei-Tools des Agenten (read, grep, write, edit) können den Geheimnis-Ordner nicht öffnen. Ist der Wert auch ein häufiges Wort, zeigen andere Ergebnisse dieses Chats ebenfalls `[secret]`. Die Datei bleibt bis zum Ende des Durchgangs; beendet sich dsh währenddessen, löscht der nächste Start sie. Ein Chat kann jeweils nur eine offene Anfrage haben. Das Tool fügt jeder Modellanfrage etwa 870 Zeichen hinzu (geschätzt etwa 220 Tokens): Schalte es aus, wenn du es nicht nutzt.
|
|
241
|
+
- **In Antwort zitieren** zitiert den Text so, wie die Seite ihn zeigt: Ein Codeblock, eine Tabelle oder eine Liste kommt als einfache Zeilen, ohne Markdown-Zeichen. Eine Markierung, die in einer Antwort beginnt und in einer anderen endet oder das Nachdenken, eine Tool-Zeile oder deine eigene Nachricht berührt, zeigt keine Schaltfläche: Markiere innerhalb einer Antwort. Die Schaltfläche findet die Antwort über die Chatstruktur von dsh, weil dsh keinen Slot für eine Textmarkierung hat; ändert ein dsh-Update diese Struktur, erscheint die Schaltfläche nicht. Steht das Zitat am Ende des Felds, folgt eine weitere leere Zeile, damit die nächste getippte Zeile darunter beginnt; dsh entfernt leere Zeilen am Ende beim Senden.
|
|
242
|
+
- **Nebenchat** ist durch den eigenen Nur-lesen-Modus von dsh schreibgeschützt: Datei-Tools können nicht schreiben, und Shell-Befehle laufen in der Sandbox von dsh ohne Schreibrechte (oder gar nicht, wenn die Sandbox nicht starten kann). Der Agent kann trotzdem mit der Freigabekarte von dsh mehr Zugriff anfragen, und ein Netzwerkaufruf (zum Beispiel eine API-Anfrage) kann trotzdem etwas außerhalb des Computers ändern. Die Kopie entsteht zum neuesten Zeitpunkt, an dem keine Nachricht in der Warteschlange wartete: Eine Frage, die du stellst, während Nachrichten warten, sieht nicht, was danach geschah. Ein laufender Schritt des Chats wird in der Kopie geschlossen: Der Nebenchat kennt den Anfang dieses Schritts, aber nicht sein Ergebnis. Der Nebenchat ist ein normaler Chat: Er bleibt in der Seitenleiste und zählt zu deiner Modellnutzung; archiviere ihn dort. Zurückholen nimmt nur die eigenen Nachrichten des Nebenchats (höchstens 12.000 Zeichen) und nur die letzte Antwort jeder Frage; Notizen des Agenten zwischen seinen Tool-Aufrufen bleiben draußen. dsh bietet Plugins keinen Platz für einen Chat in der rechten Seitenleiste, darum öffnet sich der Nebenchat in der Hauptansicht.
|
|
243
|
+
- **Diff-Notizen** funktioniert nur im Änderungsbereich, nicht in der Ansicht Letzter Durchlauf von dsh. Ein Bereich muss in einem Block des Diffs bleiben (ein `@@`-Teil). Die Notizen liegen im Speicher dieses Browsers: Ein anderer Browser oder dsh auf einem anderen Computer sieht sie nicht; Tether hält seine eigenen Notizen im Arbeitsspeicher. Eine Notiz behält die Zeilen so, wie sie beim Klick waren: Ändert der Agent die Datei später, zeigt die Notiz weiter die alten Zeilen und Nummern. Höchstens 50 Notizen pro Chat, 2.000 Zeichen pro Notiz und 40 Zeilen pro Notiz (danach eine `…`-Zeile).
|
|
218
244
|
- **Für diesen Chat zulassen** zählt das Zeitlimit ab dem Moment der Freigabe. Ein neues Zeitlimit gilt sofort für die laufenden Freigaben. Ein kürzeres Limit kann sie daher sofort beenden. Freigaben aus Version 1.12 und älter haben keine Zeit: Nach dem Update fragt der Agent für diese Tools noch einmal.
|
|
219
245
|
- **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.
|
|
220
246
|
- **Fragekarte an das Fenster anpassen** ändert nur die Fragekarte von dsh, nicht die Karte zur Planprüfung. Sie findet die Karte über das Markup von dsh (`data-question-key`, `data-question-scroll`); ändert ein dsh-Update dieses Markup, erscheint die Karte so, wie dsh sie zeichnet. Die Höhe der Karte folgt dem Fenster, nicht dem Chat: In einem Chat in einem schmalen Seitenbereich kann eine hohe Karte noch über den Chat hinausragen.
|
|
221
247
|
- **Chat-Kopfzeile an Fenster anpassen** findet die Chat-Kopfzeile von dsh über ihre generierten Klassennamen (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`), weil dsh dafür keinen Layout-Haken bietet. Benennt ein dsh-Update sie um, erscheint die Kopfzeile so, wie dsh sie zeichnet. In einer sehr schmalen Chat-Spalte kann die Kopfzeile zwei oder drei Zeilen belegen, sodass über den Nachrichten weniger Platz bleibt.
|
|
222
|
-
- **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). Tether sendet sie erst, wenn du in Tether „Settings → Notifications → Send notifications“ einschaltest. Der Schalter ist standardmäßig aus, und iOS fragt beim Einschalten nach der Erlaubnis. Die iOS-App ist noch nicht im App Store: Baue sie mit Xcode aus `tether/ios`. „Tailscale only“ braucht trotzdem eine WLAN- oder Ethernet-Adresse auf dem Mac (das Gateway startet nur mit einer solchen Adresse). Das Zugriffsprotokoll gilt pro Mac und speichert nur die neuesten 200 Versuche. Ein wiederholter Versuch innerhalb einer Minute zählt dieselbe Zeile um eins hoch. Die App-Sperre von Tether blendet Mitteilungsvorschauen auf dem Sperrbildschirm des iPhone nicht aus: Schalte sie in den iOS-Einstellungen aus. 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.
|
|
248
|
+
- **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). Tether sendet sie erst, wenn du in Tether „Settings → Notifications → Send notifications“ einschaltest. Tether speichert den Schalter und seine Uhrzeiten für jeden gekoppelten Mac getrennt. Der Schalter ist auf jedem Mac standardmäßig aus, und iOS fragt beim Einschalten nach der Erlaubnis. Die iOS-App ist noch nicht im App Store: Baue sie mit Xcode aus `tether/ios`. „Tailscale only“ braucht trotzdem eine WLAN- oder Ethernet-Adresse auf dem Mac (das Gateway startet nur mit einer solchen Adresse). Das Zugriffsprotokoll gilt pro Mac und speichert nur die neuesten 200 Versuche. Ein wiederholter Versuch innerhalb einer Minute zählt dieselbe Zeile um eins hoch. Die App-Sperre von Tether blendet Mitteilungsvorschauen auf dem Sperrbildschirm des iPhone nicht aus: Schalte sie in den iOS-Einstellungen aus. 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.
|
|
249
|
+
- **Remote-Computer** braucht Tailscale auf beiden Macs und Composer Plus mit eingeschalteter Funktion auf dem Mac, den du öffnest. Dieser Mac muss wach sein, und dsh muss dort laufen. Der andere Computer öffnet sich im Browser-Tab der rechten Seitenleiste des Chats, der gerade zu sehen ist. Der Tab gehört zu diesem Chat, deshalb zeigt ein anderer Chat seine eigene Seitenleiste. Ohne Chat (oder in dsh web ohne Browser-Tab) öffnet sich der Computer in einem Browserfenster. Die Auswahl erscheint nur, wenn ein Chat oder der Bildschirm für einen neuen Chat im Hauptbereich ist, nicht auf der Aufgabentafel. Die Funktion nutzt Port 19392 (nur ein dsh pro Mac kann andere Computer hereinlassen). Ein Computer, den du in der Seite eines anderen Computers geöffnet hast, hat keine Auswahl. Von dort kannst du also keinen dritten Mac öffnen.
|
|
223
250
|
- Ein Sitzungslink funktioniert in Chats; ein Klick darauf öffnet den Chat nicht. Ein mit **Nachrichtenlink kopieren** erstellter Link öffnet seine Nachricht nur ab dsh 0.2.1 und nur aus einer Nachricht in einem Chat (dsh 0.2.0 hat keine Regeln für Benutzertext, dort wird der Link kopiert, erscheint aber als einfacher Text). Eine Nachricht, die ein Zurücknehmen entfernt hat oder die die Komprimierung aus dem Verlauf entfernt hat, den dsh lädt, kann nicht angezeigt werden: Der Link sagt das dann. Die 🔗-Schaltflächen hängen sich an die Nachrichtenzeilen von dsh. Wenn ein dsh-Update dieses Markup ändert, erscheinen sie nicht.
|
|
224
251
|
- **Alle als gelesen markieren** ändert die eigenen Ungelesen-Punkte von dsh über einen Teil von dsh, der keine öffentliche API ist (die Liste `completionUnread` im Sitzungsstatus von dsh). Wenn ein dsh-Update sie umbenennt, erscheint der Eintrag nicht. Der Eintrag kommt in das „…“-Menü des Projekts in dsh, das keinen Platz für Plugins hat. Wenn dsh dieses Menü ändert, erscheint der Eintrag ebenfalls nicht.
|
|
225
252
|
- **Eingereihte Nachricht direkt bearbeiten** ändert keine Nachricht, deren Senden inzwischen begonnen hat, und überschreibt keine Nachricht, die sich inzwischen geändert hat (zum Beispiel in Tether auf dem iPhone): Ein Hinweis meldet das. Ein neues Bild braucht ein Modell, das Bilder annimmt (die eigenen Bildgrenzen von dsh gelten), und eine neue Datei muss fertig hochgeladen sein, bevor du speichern kannst. Nur deine eigenen eingereihten Nachrichten lassen sich bearbeiten: Eine Zielrunde oder eine Antwort auf eine Frage in der Warteschlange nicht. Nach einem Update des Plugins funktionieren nur Textänderungen sofort: Starte dsh neu, bevor du eine Nachricht mit Bildern oder Dateien speicherst (die Host-Hälfte lädt beim Start).
|
|
@@ -234,6 +261,8 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
234
261
|
- **Branches im Arbeitsbereichsbaum** schreibt ohne Klick in git: Wenn es einen Chat verschiebt, setzt es den Projektordner auf seinen vorherigen Branch zurück (`git switch`) und fügt einen Worktree hinzu (`git worktree add`). Es löscht nie einen Branch, einen Worktree oder eine Datei. dsh kann den Ordner eines Chats nicht ändern, daher ist ein verschobener Chat eine Kopie (dshs eigener Fork, mit neuer ID), und der alte Chat wird archiviert. Die Kopie setzt die angehaltene Aufgabe fort; ein Tool-Aufruf, der lief, als der Branch erschien, endet mit einer Ablehnung, und der Agent führt ihn im neuen Ordner erneut aus. Ein Ziel des alten Chats zieht nicht mit. Nur ein Chat, dessen Ordner der Hauptordner des Repositorys ist, wird verschoben, und nur für einen Branch, den er in diesem Durchgang erstellt und ausgecheckt hat (`git switch -c`, `git checkout -b`): Ein nur mit `git branch` erstellter Branch, ein Ordner mit nicht committeten Änderungen, ein verknüpfter Worktree oder ein Unterordner verschieben nichts. Im Baum erscheinen nur Worktrees direkt in `<project>/.worktrees/` mit einem Branch; ein losgelöster (detached) Worktree oder einer an anderer Stelle erscheint nicht. Die Kopie öffnet sich nur von selbst, wenn ihr Chat der geöffnete war (das Plugin liest das aus dshs Zeile in der Seitenleiste); sonst ist sie im Branch-Projekt.
|
|
235
262
|
- **Im Chat suchen** durchsucht nur, was die Seite zeigt: die geladenen Nachrichten und Antworten (scrolle nach oben oder klicke auf **Ältere laden** für ältere), nicht geschlossene Tool-Schritte und nicht den eingeklappten Text in der Ausgabe eines Tools. Die Suche zählt höchstens 2.000 Treffer (dann „2000+“). Sie nutzt die Highlight-API des Browsers (Chromium 105 und neuer; die Desktop-App hat sie): In einem älteren Browser funktionieren die Zählung und das Springen ohne die Farbe. `Cmd+F` auf einem Mac (`Ctrl+F` unter Windows und Linux) öffnet sie nur, solange ein Chat auf dem Bildschirm ist. Anderswo funktioniert die eigene Suche des Browsers wie bisher. Auf einem Mac behält `Ctrl+F` in Textfeldern seine macOS-Funktion (der Cursor geht ein Zeichen weiter).
|
|
236
263
|
- **Wartenden Chat bei Inaktivität öffnen** kennt nur, was das Fenster von dsh sieht: Arbeit in einer anderen App zählt nicht. Ist dsh im Hintergrund, kann es also nach 30 Sekunden einen wartenden Chat öffnen. dsh kommt dabei nicht in den Vordergrund. Lesen ohne Taste, Klick oder Mausbewegung zählt als Inaktivität. Es achtet nur auf Chats mit dem orangefarbenen Punkt von dsh (eine Frage, eine Genehmigung oder eine Planprüfung) oder mit dem grünen Punkt (eine fertige Runde, die du noch nicht geöffnet hast); die Anfrage eines Subagenten erscheint in seinem übergeordneten Chat. Orangefarbene Chats öffnen sich zuerst. Das Öffnen eines grünen Chats entfernt seinen Punkt, daher beginnen die 30 Sekunden des nächsten grünen Chats erst nach deiner nächsten Taste, deinem nächsten Klick, deiner nächsten Mausbewegung, dem Mausrad oder einer Berührung: Wenn du zurückkommst, sind die anderen grünen Punkte noch da. Solange ein wartender Chat auf dem Bildschirm ist, öffnet sich kein anderer; ein Chat, den du ohne Antwort verlassen hast, kann sich nach den nächsten 30 Sekunden ohne Benutzung wieder öffnen. Die 30 Sekunden lassen sich nicht ändern.
|
|
264
|
+
- **Nächster wartender Chat** zählt dieselben Chats wie **Wartenden Chat bei Inaktivität öffnen**: den orangefarbenen Punkt von dsh (eine Frage, eine Genehmigung oder eine Planprüfung, die Sie hier beantworten können) und den grünen Punkt (eine beendete Runde, die Sie noch nicht geöffnet haben); die Anfrage eines Subagenten erscheint in seinem übergeordneten Chat. dsh speichert nicht, wann ein Chat zu warten begann. Deshalb zählt die Reihenfolge ab dem Moment, in dem dieses Fenster ihn gesehen hat: Nach einem Neuladen behalten die Chats, die schon warteten, die Reihenfolge von dsh. Die Taste ist ein dsh-Tastenkürzel: In einem Browser unter Linux hat sie keine Taste, bis Sie auf der Seite Tastenkürzel von dsh eine festlegen, und eine Browsererweiterung oder eine andere App kann `Cmd+Shift+E` zuerst nehmen. dsh hat keinen Erweiterungsplatz in der Kopfzeile der Seitenleiste, deshalb kommt die Schaltfläche in die Struktur dieser Kopfzeile. Ändert ein dsh-Update sie, wird die Schaltfläche nicht angezeigt, und die Taste funktioniert weiter. In der schmalen Seitenleiste gibt es die Schaltfläche nicht.
|
|
265
|
+
- **Options-Schaltflächen** liest nur Antworten, die mit einer Optionsliste enden: einer nummerierten Liste mit 1 bis 9 Einträgen, ab 1 nummeriert, als letzter Teil der Antwort, direkt unter einer Überschrift oder einer fetten Zeile „Optionen“ oder „Nächste Schritte“ (oder den englischen Wörtern „Options“, „Choices“ und „Next steps“ und denselben Wörtern in den anderen Sprachen der App). Eine Liste in der Mitte einer Antwort, in einem Codeblock oder unter einer anderen Überschrift bekommt keine Schaltflächen. Composer Plus bittet den Agenten nicht, eine solche Liste zu schreiben. Die Schaltflächen erscheinen nur unter der neuesten Antwort, solange der Chat untätig und das Eingabefeld leer ist, und erst, wenn Composer Plus weiß, welche Antworten ein Zurücksetzen zurückgezogen hat. Auf der Fragekarte von dsh tun die Tasten 1–9 in den ersten 0,8 Sekunden nach dem Erscheinen einer Frage nichts. So wählt eine Taste, die Sie für etwas anderes gedrückt haben, keine Option, die Sie nicht gelesen haben. dsh hat keine Tasten-API für seine Fragekarte, deshalb finden die Tasten die Schaltflächen der Karte über das Markup von dsh. Ändert ein dsh-Update dieses Markup, tun die Tasten nichts.
|
|
237
266
|
- Eine Benachrichtigung, die vor einem Neustart gesendet wurde, holt dsh beim Klicken nur in den Vordergrund.
|
|
238
267
|
- 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.
|
|
239
268
|
- 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. In **Arbeitsbereichsbaum** bleibt ein übergeordneter Ordner sichtbar, solange ein Projekt darin aktiv ist, und auch die Chatzeilen, die in den letzten 2 Stunden nicht aktiv waren, werden ausgeblendet; in **Arbeitsbereich** werden nur Projektzeilen gefiltert. Der Filter liest die Ansicht, die dsh zeigt, aus der gespeicherten Ansichtseinstellung von dsh (keine öffentliche API); benennt ein dsh-Update sie um, wird **Arbeitsbereichsbaum** wie **Arbeitsbereich** gefiltert. Die Funktion Projektstatus liest dieselbe Einstellung: In **Arbeitsbereichsbaum** zählt die Zeile eines übergeordneten Ordners auch die Chats der Projekte darin; benennt dsh die Einstellung um, zeigt jede Zeile nur ihre eigenen Chats. **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.
|
|
@@ -249,9 +278,16 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
249
278
|
- **In einem neuen Chat fortsetzen** sendet den Chat (Nachrichten, Werkzeugaufrufe und das Ende jedes Werkzeugergebnisses, höchstens etwa 60.000 Zeichen, den neuesten Teil) an das eigene Modell des Chats. Die Übergabenotiz kann eine Entscheidung oder eine Datei auslassen: Lies sie vor dem Start. Der neue Chat kennt nur die Notiz und den verlinkten Chat (dsh hängt den alten Chat als schreibgeschützten Kontext an). Sein Modellkontext beginnt klein, der alte Chat bleibt, wie er ist. Pro Chat läuft immer nur eine Notiz oder ein Start.
|
|
250
279
|
- **Kontextaufschlüsselung** zeigt Schätzungen nach der eigenen Regel von dsh (etwa 4 Zeichen pro Token), derselben Regel wie beim Kontextring von dsh. Die eigene Zählung des Modells kann abweichen. Die Tool-Definitionen sind die der neuesten Anfrage. Die Funktion zeigt den Kontext so, wie das Chatprotokoll ihn enthält. Eine Runde, die gerade läuft, erscheint nach ihrem nächsten Schritt.
|
|
251
280
|
- **Geplante Schritte** spart nur dann Tokens, wenn das Modell plant: Solange die Funktion an ist, trägt jede Anfrage das Tool `plan_next_steps` und eine kurze Anweisung (etwa 500 Tokens), auch in Chats, in denen das Modell nie plant. Eine Bedingung beweist nur, was sie sagt (zum Beispiel: der Exit-Code des Builds war 0), nicht, dass die Arbeit stimmt. `ok` liest die eigenen Ergebnismarken von dsh (`[exit code: N]`, Zeitüberschreitungen, Sandbox-Ablehnungen); ein Befehl, der ohne Exit-Code ungleich null fehlschlägt, gilt als bestanden. Schritte laufen einzeln; zwei gleichzeitig bereite Schritte gehen an das Modell zurück. Die Nachricht des Schritts wird als Assistentennachricht des Chat-Modells gespeichert (dsh hat keine Markierung für eine Nachricht, die ein Plugin schreibt), daher sagt ihr Text, dass Composer Plus ihn ausgeführt hat. Nicht in Tether.
|
|
252
|
-
- **Aufgabentafel** zeigt die Chats, die dsh in diesem Fenster auflistet: Ein Chat außerhalb eines Projekts erscheint nur unter **Alle Projekte**, und der Ordner eines Branches pro Chat (`<project>/.worktrees/<name>`) zählt zu seinem Projekt. Die Spalte einer Karte ist der Live-Zustand des Chats, daher lassen sich Karten nicht ziehen: Ein Chat kommt nach **Fertig**, wenn seine Runde endet, auch nach einem Fehler oder einem Stopp, und zurück nach **In Arbeit**, wenn er wieder läuft. Der grüne Punkt ist der Fertig-Punkt von dsh, den dsh nur in diesem Fenster behält: Nach einem Neuladen erscheinen beendete Chats ohne ihn. **Fertig** zeigt die neuesten 50 Chats (**N ältere anzeigen** zeigt den Rest). **Projekte durchsuchen** findet ein Projekt nur über seinen Namen, nicht über seinen Ordnerpfad. **In den letzten 2 Stunden aktiv** blendet ein Projekt aus, wenn jeder seiner Chats älter als 2 Stunden, inaktiv und gelesen ist; die Tafel zeigt das Projekt, das du gewählt hast, weiterhin. Die Schlagwörter kommen aus einem Modellaufruf pro
|
|
281
|
+
- **Aufgabentafel** zeigt die Chats, die dsh in diesem Fenster auflistet: Ein Chat außerhalb eines Projekts erscheint nur unter **Alle Projekte**, und der Ordner eines Branches pro Chat (`<project>/.worktrees/<name>`) zählt zu seinem Projekt. Die Spalte einer Karte ist der Live-Zustand des Chats, daher lassen sich Karten nicht ziehen: Ein Chat kommt nach **Fertig**, wenn seine Runde endet, auch nach einem Fehler oder einem Stopp, und zurück nach **In Arbeit**, wenn er wieder läuft. Der grüne Punkt ist der Fertig-Punkt von dsh, den dsh nur in diesem Fenster behält: Nach einem Neuladen erscheinen beendete Chats ohne ihn. **Fertig** zeigt die neuesten 50 Chats (**N ältere anzeigen** zeigt den Rest). **Projekte durchsuchen** findet ein Projekt nur über seinen Namen, nicht über seinen Ordnerpfad. **In den letzten 2 Stunden aktiv** blendet ein Projekt aus, wenn jeder seiner Chats älter als 2 Stunden, inaktiv und gelesen ist; die Tafel zeigt das Projekt, das du gewählt hast, weiterhin. **Neue Aufgabe** merkt sich nur den neuesten neuen Chat dieses Fensters: Wenn du vor der ersten Nachricht einen anderen Chat öffnest, bleibt dieser Chat als **Neue Aufgabe** oben in **In Arbeit**, bis du darin schreibst, aber die Tafel kommt nur für den neuesten von selbst zurück. Nach einem Neuladen steht ein neuer Chat ohne Nachricht nicht auf der Tafel (dsh behält ihn als seine leere Neue Sitzung). Die Schlagwörter kommen aus einem Modellaufruf pro Aufgabe, aus ihrer ersten Nachricht: Sie können falsch sein, und ein Chat, den du nicht auf der Tafel gestartet hast, hat keine. Der Titel ist der Chattitel von dsh (der Titeldienst von dsh, mit dem Modell des Chats); bis er da ist, zeigt die Karte die erste Zeile der ersten Nachricht. **×** und **Alle entfernen** nehmen Karten nur von der Tafel: Kein Chat wird gelöscht. **Rückgängig** erscheint nur 8 Sekunden lang, in diesem Fenster; später holt **Entfernt (N)** → **Zurücklegen** eine Karte zurück, und ein Chat, der wieder läuft, kommt von selbst zurück. **Alle entfernen** fragt zuerst und nimmt die gelesenen fertigen Karten des gezeigten Projekts von der Tafel (bei **Alle Projekte** die aller Projekte), auch die hinter **N ältere anzeigen**; eine ungelesene (grüne) Karte bleibt. dsh behält seinen grünen Punkt nur in diesem Fenster, daher kann Alle entfernen nach einem Neuladen eine Karte nehmen, deren Antwort du nicht gelesen hast. Die Liste liegt auf diesem Mac, für jedes Fenster und für Tether; wenn sie 5.000 Chats hat, kommen die ältesten zurück. **Antworten** beantwortet nur die neueste Anfrage des Chats: Wenn sie an anderer Stelle beantwortet wurde (ein anderes Fenster, Tether, die automatische Prüfung) oder der Chat etwas Neues fragt, sagt das Panel das und sendet nichts. Frühere Versionen hatten eine Aufgabenliste mit Kommentaren und Agenten-Tools; diese gibt es nicht mehr, und die alte `board.json` wird nicht angezeigt. Die Idee und das Aussehen stammen von [Kanzo](https://github.com/emanuele-em/kanzo) von emanuele-em (AGPL-3.0); Composer Plus nutzt keinen Code daraus. `Cmd+Shift+K` ist ein dsh-Tastenkürzel: Im Browser unter Linux hat es keine Standardtaste (lege eine auf der Seite Tastenkürzel von dsh fest), und eine Browser-Erweiterung oder eine andere App kann die Taste vorher belegen. Eine Karte verlässt **Fertig**, wenn der grüne Punkt von dsh verschwindet (du hast den Chat geöffnet), oder, bei einem Chat, der hinter der Tafel als offener Chat fertig wurde, wenn dieser Chat ohne Panel darüber zu sehen ist. Dieser Gelesen-Zustand lebt nur in diesem dsh-Fenster, wie die Punkte von dsh: Nach einem Neuladen oder in einem anderen Fenster zählt jeder beendete Chat als gelesen und steht in **Kürzlich beendet**.
|
|
253
282
|
- **Neue Nachricht nach Stoppen zuerst** wirkt nur, nachdem du den Chat gestoppt hast (oder nach einer fehlgeschlagenen Runde, oder wenn du einen Chat öffnest, der noch eine Warteschlange hat): Eine Nachricht, die du sendest, während eine Runde läuft, wartet weiterhin am Ende der Warteschlange. Sie überholt nur deine eigenen eingereihten Nachrichten: Wartet eine Zielrunde oder eine Antwort auf eine Frage in der Warteschlange, bleibt die Reihenfolge von dsh. Die Funktion liest einen Teil von dsh, der keine öffentliche API ist (ob die gestoppte Runde noch endet); benennt ein dsh-Update ihn um, rückt die Nachricht erst vor, wenn diese Runde beendet ist. Subagent-Chats behalten die Reihenfolge von dsh.
|
|
254
283
|
- **Projektgedächtnis** gehört zum ersten Ordner des Chats (dem Projektordner von dsh): Ein Chat, der seinen Ordner mit `cd` wechselt, behält das Gedächtnis seines ersten Projekts, und derselbe Ordner, über einen anderen Pfad zu denselben Dateien geöffnet, teilt es. Ein Chat friert seinen Gedächtnisteil beim Start ein, daher erscheint eine später gespeicherte Notiz ab dem nächsten Chat (`memory_recall` findet sie sofort). Die Prüfung behält nur, was das Modell behalten will: Sie kann einen Fakt übersehen oder einen falschen behalten. Prüfe sie in **Gedächtnis öffnen** und ändere sie dort, oder bearbeite die Dateien von Hand, während dsh geschlossen ist. **Gedächtnis öffnen** schickt die Notizen des gewählten Projekts und die globalen Notizen (alle Projekte, wenn du Alle Notizen wählst; höchstens etwa 60.000 Zeichen, der Rest wird nur gezählt und kann in dieser Anfrage nicht geändert werden) und deinen Text an das Standardmodell von dsh, nicht an das Modell des Chats. Eine Vorschau bleibt 30 Minuten und bis zum Neustart von dsh auf dem Mac; ändern eine Prüfung oder der Agent die Notizen in der Zwischenzeit, lehnt **Anwenden** ab und du holst eine neue Vorschau. **Anwenden** speichert alle Änderungen einer Vorschau oder keine: Lässt sich eine Änderung nicht speichern (zum Beispiel, weil MEMORY.md voll ist), bleiben die Notizen, wie sie waren, und der Grund wird angezeigt. Jede abgeschlossene Runde mit einer Nachricht von dir kostet einen Modellaufruf; ein fehlgeschlagener Aufruf liest dieselben Nachrichten nach der nächsten Runde erneut. Chats von Subagenten werden nicht geprüft. Die Idee und das Dateiformat stammen von [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0); Composer Plus nutzt keinen Code daraus und liest oder schreibt nie das eigene Gedächtnis von DS Bot.
|
|
284
|
+
- **Versionsverlauf des Gedächtnisses** behält die neuesten 50 Versionen jedes Gedächtnisses (jedes Projekt und das globale Gedächtnis); ältere werden gelöscht. Eine Version enthält das ganze Gedächtnis dieses Projekts, nicht eine Notiz. **Wiederherstellen** setzt alle Dateien dieser Version zurück (Themen eingeschlossen) und lehnt ab, wenn sich das Gedächtnis nach dem Öffnen der Version geändert hat; das Gedächtnis vor der Wiederherstellung wird eine neue Version, sodass du sie rückgängig machen kannst. Solange der Schalter aus ist, wird keine neue Version behalten und **Wiederherstellen** lehnt ab; behaltene Versionen bleiben. Versionen von vor dieser Funktion gibt es nicht: Der Verlauf beginnt mit dem ersten Speichern nach der Installation.
|
|
285
|
+
- **Gedächtnis nach AGENTS.md exportieren** schreibt nur die Notizen eines Projektgedächtnisses; globale Notizen, Quellen und Daten bleiben draußen. Der nächste Export ersetzt den ganzen markierten Abschnitt, daher geht eine Änderung, die du darin von Hand machst, verloren (der Diff zeigt sie vorher); Text außerhalb der Markierungen bleibt. Sind die Markierungen kaputt (eine fehlt oder sie stehen doppelt da), lehnt der Export ab, bis du sie korrigierst. Eine AGENTS.md über 512 kB, ein symbolischer Link aus dem Projektordner hinaus und alles, was keine normale Datei ist, werden abgelehnt. Ändern sich AGENTS.md oder die Notizen nach der Vorschau, lehnt **AGENTS.md schreiben** ab und du exportierst erneut.
|
|
286
|
+
- **Quellenlink für Gedächtnisnotizen** gilt für Notizen, die nach der Installation dieser Version gespeichert werden: Eine ältere Notiz nennt nur ihren Chat (oder nichts), daher öffnet **Quelle** nur den Chat oder wird nicht angezeigt. Ist die Nachricht weg (ein Zurücksetzen hat sie zurückgezogen oder der Chat wurde gelöscht), öffnet sich der Chat und ein Hinweis sagt, dass die Nachricht nicht mehr da ist.
|
|
287
|
+
- **Gedächtnis in ein anderes Projekt kopieren** kopiert höchstens 100 Notizen auf einmal und nur in ein Projekt, das dsh auflistet (es liest dsh’ eigene Projektliste; kein Pfad kommt aus dem Fenster). Jede Kopie ist unabhängig: Eine spätere Änderung einer Notiz in einem Projekt ändert die Kopie nicht. Passt eine markierte Notiz nicht (MEMORY.md oder Thema im Ziel ist voll, oder es hat schon 40 Themen), wird nichts kopiert. Eine Notiz, deren Text und Thema schon im Ziel sind, wird übersprungen, und die Anzahl wird genannt.
|
|
288
|
+
- **Veraltete Gedächtnisnotizen finden** findet nur, was eine Notiz in einer bekannten Form schreibt: einen Pfad in einem Code-Abschnitt (`src/cart.ts`), ein npm-Skript nach `npm run` (oder `npm test`, `pnpm lint`), einen Branch-Namen in einem Code-Abschnitt neben dem Wort „Branch“. Ein Pfad, der den Projektordner verlässt, wird nicht gemeldet; ein Skript wird nur geprüft, wenn das Projekt eine `package.json` hat, ein Branch nur in einem Git-Repository. Höchstens 200 Dinge werden auf einmal geprüft. Eine Warnung heißt „jetzt nicht gefunden“, nicht „falsch“: Auch eine Datei, die ein Build erst später erzeugt, wird gemeldet.
|
|
289
|
+
- **Gedächtnis in diesem Chat nicht nutzen** wirkt ab der nächsten Modellanfrage des Chats: Eine Anfrage, die schon läuft, behält, was sie hat. Ein Wechsel in einem laufenden Chat ändert seinen System-Prompt einmal, daher kann diese eine Anfrage den Cache des Modellanbieters nicht nutzen. Ein Subagent folgt seinem Wurzel-Chat. Die Prüfung liest die Nachrichten nicht, die ein Chat bekommt, während sein Gedächtnis aus ist, auch nicht, wenn du es später wieder einschaltest. In dsh 0.2.0 hat der Bildschirm Neuer Chat keinen Platz für den Knopf: Er erscheint nach der ersten Nachricht in der Chat-Kopfzeile.
|
|
290
|
+
- **Gedächtnisnotizen aus einem Chat vorschlagen** zeigt höchstens 10 Vorschläge und behält sie 30 Minuten und bis zum Neustart von dsh; danach bittet Annehmen dich, neu vorschlagen zu lassen. Ein langer Chat sendet seine neuesten Nachrichten: Die ältesten Antworten des Agenten fallen zuerst weg. Ein Vorschlag kann falsch sein: Lies ihn, bevor du ihn annimmst, und nutze **Gedächtnis öffnen**, um eine Notiz später zu ändern. Ein abgelehnter Vorschlag kann beim nächsten Klick wiederkommen.
|
|
255
291
|
- **Sicherung** nutzt einen einzigen festen Ordner, `~/Desktop/dsh-backups` (der Standardordner von dsh-backup, damit dessen Archive nutzbar bleiben); eine Einstellung für einen anderen Ordner gibt es nicht. Ein Archiv ist etwa so groß wie das dsh-Home ohne `cache/` und `dsh-runtimes/` (gemessen: 1,6 GB Dateien ergaben auf Apple Silicon in etwa 30 s ein Archiv von 830 MB; dsh reagierte weiter). Eine Datei, die sich beim Lesen ändert, wird so gespeichert, wie sie war, als die Sicherung sie geöffnet hat. Daher kann das Protokoll eines offenen Chats mit einem abgeschnittenen Datensatz enden, den dsh beim nächsten Schreiben repariert. Die Maskierung findet ein Geheimnis in einer yml-Datei am Namen seines Schlüssels in einer Zeile (`token:`, `apiKey:`, …); ein Geheimnis in einer Flow-Map (`{token: x}`), in einer Liste unter einem solchen Schlüssel, in einer JSON-Datei (zum Beispiel der `apiKey` eines MCP-Servers in einer `.json`-Datei) oder unter einem anderen Namen bleibt im Archiv. Die typisierten Archive von dsh-backup (`dsh-t-…`) werden nicht aufgelistet. **Für einen anderen Computer** kopiert das Archiv (unter APFS ein Klon: kein zusätzlicher Platz); der vault kommt nicht mit. **Jetzt sichern** löscht keine Sicherung. Eine automatische Sicherung behält die neuesten Sicherungen, die Composer Plus erstellt hat (die Einstellung **Behalten** von **Automatische Sicherung**), und löscht die älteren davon; Snapshots vor einem Upgrade werden getrennt gezählt (die neuesten 2 bleiben). Archive von dsh-backup werden nie gelöscht: Entferne sie mit **Löschen**. Solange dsh-backup noch installiert ist, zählt es die Archive von Composer Plus zu seiner eigenen Anzahl behaltener Sicherungen und kann sie löschen.
|
|
256
292
|
- **Wiederherstellen** läuft nur in der Rettungskonsole, während dsh geschlossen ist, und ersetzt das ganze dsh-Home. Das alte bleibt daneben als `.dsh.pre-restore-<time>`, bis du es entfernst; die Festplatte braucht also Platz für beide. Chats behalten ihre Projektpfade: Auf einem anderen Computer erscheint ein Projekt unter einem anderen Pfad als fehlend, bis du es neu hinzufügst. Symlinks, die aus dem dsh-Home hinaus zeigen (zum Beispiel Skills, die aus einem anderen Ordner verlinkt sind), kommen als Links zurück; ihre Ziele müssen auf diesem Computer existieren.
|
|
257
293
|
- **Sitzungsprotokoll-Prüfung** liest das neueste Protokoll jedes Chats mit den eigenen Regeln von dsh dafür, was aufgeht: Eine Zeile, die kein JSON ist oder nicht in der richtigen Reihenfolge steht, zählt nur dann als Schaden, wenn danach ein Rundenende kommt (sonst öffnet dsh den Chat ohne die Zeilen ab dort, daher wird er nicht aufgelistet). Sie prüft die Ereignisse eines Protokolls nicht gegen die eigenen Ereignisregeln von dsh. Daher kann ein Protokoll, das sie für intakt hält, nach einem dsh-Upgrade trotzdem nicht aufgehen. Eine Reparatur nimmt die Kopie aus einer Sicherung: Die Nachrichten nach dieser Sicherung gehen in diesem Chat verloren (die beschädigte Datei bleibt daneben). Ein Chat, der in diesem dsh offen ist, wird in den Einstellungen nicht repariert: dsh hält ihn.
|
|
@@ -286,7 +322,13 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
286
322
|
|
|
287
323
|
**Kann sich der Agent meine Vorlieben über Chats hinweg merken, wie das Gedächtnis von DS Bot?** Ja, mit **Projektgedächtnis** (standardmäßig aus): Schalte es unter **Einstellungen → Composer Plus** ein. Nach jeder Runde werden deine dauerhaften Vorlieben und Entscheidungen als kurze Notizen für das Projekt des Chats gespeichert, und jeder neue Chat in diesem Projekt liest sie. Bitte den Agenten, sich etwas zu merken, dann speichert er es sofort. Um die Notizen zu sehen oder zu ändern, klicke in derselben Zeile auf **Gedächtnis öffnen** und schreibe, was sich ändern soll.
|
|
288
324
|
|
|
289
|
-
**
|
|
325
|
+
**Ich oder die KI haben das Gedächtnis falsch geändert. Kann ich die alten Notizen zurückholen?** Ja, mit **Versionsverlauf des Gedächtnisses** (standardmäßig an): Wähle in **Gedächtnis öffnen** das Projekt und dann **Verlauf**. Wähle die Version vor der Änderung, um zu sehen, was zurückkommt, dann **Wiederherstellen**.
|
|
326
|
+
|
|
327
|
+
**Kann ich das Projektgedächtnis mit meinem Team oder einem anderen Agent-Tool teilen?** Ja, mit **Gedächtnis nach AGENTS.md exportieren** (standardmäßig an): Wähle in **Gedächtnis öffnen** das Projekt und dann **Nach AGENTS.md exportieren**. Prüfe den Diff, dann **AGENTS.md schreiben**, und committe die Datei.
|
|
328
|
+
|
|
329
|
+
**Kann die KI vorschlagen, was aus einem langen Chat behalten werden soll?** Ja, mit **Gedächtnisnotizen aus einem Chat vorschlagen** (standardmäßig an, solange **Projektgedächtnis** an ist): Klicke in der Chat-Kopfzeile auf **Für das Gedächtnis vorschlagen** und dann bei den Notizen, die es wert sind, auf **Annehmen**.
|
|
330
|
+
|
|
331
|
+
**Kann ich alle meine Chats als Kanban-Tafel sehen und von dort neue starten?** Ja, mit **Aufgabentafel** (standardmäßig an): Öffne sie in der linken Seitenleiste. Jeder Chat ist eine Karte in **In Arbeit**, **In Prüfung** (er wartet auf dich) oder **Fertig**. **Neue Aufgabe** öffnet den neuen Chat von dsh im Projekt, und die Tafel kommt zurück, wenn deine erste Nachricht abgeht; klicke auf einer orangen Karte auf **Antworten**, um zu antworten, ohne den Chat zu öffnen. **Alle entfernen** in **Fertig** fragt zuerst und nimmt die fertigen Karten, die du gelesen hast, von der Tafel; **Rückgängig** und **Entfernt (N)** holen sie zurück, und die Chats bleiben in dsh.
|
|
290
332
|
|
|
291
333
|
**Kann dsh meine Chats und Einstellungen sichern, so wie dsh-backup?** Ja: **Einstellungen → Composer Plus → Sicherung → Jetzt sichern**. Es schreibt dasselbe Archivformat in denselben Ordner (`~/Desktop/dsh-backups`). Daher erscheinen auch die Archive von dsh-backup und lassen sich wiederherstellen, und du kannst dsh-backup entfernen. Schalte **Automatische Sicherung** ein, um nach Zeitplan zu sichern.
|
|
292
334
|
|
|
@@ -314,10 +356,22 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
314
356
|
|
|
315
357
|
**Wie verhindere ich, dass der Agent `npm publish` oder `git push --force` ausführt?** **Einstellungen → Composer Plus → Blockierte Befehle**: Gib `npm publish` ein, wähle **blockieren** oder **zuerst fragen** und klicke dann auf **Hinzufügen**. Eine Regel mit **blockieren** lehnt den Befehl ab, und der Agent fragt dich; eine Regel mit **zuerst fragen** zeigt jedes Mal die Genehmigungskarte. „Geschützte Dateien“ deckt die Datei-Tools des Agenten ab, „Blockierte Befehle“ seine Shell-Befehle.
|
|
316
358
|
|
|
359
|
+
**Kann ich dem Agenten sagen, warum ich einen Tool-Aufruf abgelehnt habe?** Ja, mit **Mit Notiz ablehnen** (standardmäßig an): Klicke auf der Genehmigungskarte auf **Mit Notiz ablehnen…**, schreibe den Grund oder was stattdessen zu tun ist, und klicke auf **Ablehnen**. Der Agent liest die Ablehnung und deine Notiz in derselben Runde.
|
|
360
|
+
|
|
361
|
+
**Wie gebe ich dem Agenten ein Passwort oder einen Token, ohne es in den Chat zu schreiben?** Mit **Geheime Eingabe** (standardmäßig an): Bitte den Agenten, `request_secret` zu nutzen, oder warte, bis er fragt. Gib den Wert in der Karte in der Zeile des Tools ein und klicke auf **Speichern**. Der Agent bekommt nur den Pfad einer Datei mit dem Wert, und die Datei wird am Ende des Durchgangs gelöscht.
|
|
362
|
+
|
|
363
|
+
**Wie antworte ich nur auf einen Teil einer langen Antwort?** Markiere diesen Teil und klicke auf **Zitieren** über der Markierung (**In Antwort zitieren**, standardmäßig an). Der Teil kommt als `> …`-Zitat ins Eingabefeld, und du schreibst deine Antwort darunter.
|
|
364
|
+
|
|
365
|
+
**Kann ich etwas fragen, während der Agent arbeitet, ohne ihn anzuhalten?** Schreibe die Frage und klicke im Eingabefeld auf **Im Nebenchat fragen** (**Nebenchat**, standardmäßig an). Eine schreibgeschützte Kopie des Chats beantwortet sie, während der Chat weiterarbeitet. Im Nebenchat legt **Zurückholen** die Antwort in das Eingabefeld des Chats.
|
|
366
|
+
|
|
367
|
+
**Wie sage ich dem Agenten, was er in seinem Diff ändern soll?** Öffne im **Änderungsbereich** das Diff der Datei, klicke bei einer Zeile auf **+** und schreibe eine Notiz (**Diff-Notizen**, standardmäßig an). Klicke dann auf **In Eingabefeld senden**: Die Notizen kommen mit Datei, Zeilennummern und Zeilen ins Eingabefeld.
|
|
368
|
+
|
|
317
369
|
**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, standardmäßig für 1 Stunde. Widerrufe es über den Chip in der Kopfzeile. Ändere die Zeit unter **Einstellungen → Composer Plus → Für diesen Chat zulassen**.
|
|
318
370
|
|
|
319
371
|
**Ich habe mein iPhone verloren. Wie verhindere ich, dass es meinen Mac erreicht?** Klicke unten links in der Seitenleiste auf **Mobile Verbindung** und dann neben diesem iPhone auf **Remove**. Sein Schlüssel funktioniert sofort nicht mehr. Es kann nur mit einer neuen Kopplung zurückkommen, die du auf dem Mac bestätigst.
|
|
320
372
|
|
|
373
|
+
**Wie setze ich einen Chat meines anderen Macs auf diesem Mac fort?** Schalte auf dem anderen Mac **Einstellungen → Composer Plus → Remote-Computer** und **Anderen Computern erlauben, diesen Mac zu öffnen** ein, klicke auf **Kopplungslink erstellen** und kopiere den Link (schicke ihn dir selbst, zum Beispiel mit AirDrop oder Notizen). Schalte auf diesem Mac ebenfalls **Remote-Computer** ein, wähle links vom Chattitel **Computer hinzufügen…**, füge den Link ein und klicke auf **Verbinden**. Klicke dann auf dem anderen Mac auf **Genehmigen**. Danach wählst du diesen Computer im selben Menü.
|
|
374
|
+
|
|
321
375
|
**Kann ich Tether mit Face ID sperren?** Ja: Schalte in Tether „Settings → Privacy → Lock with Face ID“ ein. Tether fragt dann beim Öffnen und bei der Rückkehr zur App nach Face ID (oder dem Code).
|
|
322
376
|
|
|
323
377
|
**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.
|
|
@@ -330,6 +384,10 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
330
384
|
|
|
331
385
|
**Kann dsh den Chat, der mir eine Frage stellt, von selbst öffnen?** Ja, mit **Wartenden Chat bei Inaktivität öffnen** (standardmäßig an): Wartet ein Chat auf eine Antwort, eine Genehmigung oder eine Planprüfung und du benutzt dsh 30 Sekunden lang nicht, öffnet dsh ihn. Ein Chat, der eine Runde beendet hat, die du noch nicht gelesen hast (der grüne Punkt), öffnet sich genauso, nach den orangefarbenen. Solange du tippst, scrollst oder die Maus bewegst, wartet es.
|
|
332
386
|
|
|
387
|
+
**Kann ich direkt zum nächsten Chat springen, der auf mich wartet?** Ja, mit **Nächster wartender Chat** (standardmäßig an): Drücken Sie `Cmd+Shift+E` (`Strg+Shift+E` unter Windows und Linux) oder klicken Sie auf die Schaltfläche mit der Zahl in der Kopfzeile der Seitenleiste. Chats, die eine Frage stellen oder auf eine Genehmigung warten, kommen zuerst, danach Chats, die eine Runde beendet haben, die Sie noch nicht gelesen haben.
|
|
388
|
+
|
|
389
|
+
**Kann ich die Optionen eines Agenten mit einem Klick beantworten?** Ja, mit **Options-Schaltflächen** (standardmäßig an): Wenn eine Antwort mit einer Liste „Optionen“ endet, klicken Sie auf eine Schaltfläche darunter. Sie sendet „Option N: …“ als Ihre Nachricht. Drücken Sie auf einer Fragekarte des Agenten 1–9.
|
|
390
|
+
|
|
333
391
|
**Wie stelle ich die Oberfläche von DeepSeek Harness auf Türkisch, Spanisch, Japanisch … um?** Einstellungen → Composer Plus → **App-Sprache**.
|
|
334
392
|
|
|
335
393
|
**Wie nutze ich dsh von meinem iPhone aus?** Baue die Tether-App aus `tether/ios` (Xcode). Schalte **Einstellungen → Composer Plus → Mobile Verbindung (iPhone)** ein und klicke unten links auf **Mobile Verbindung**. Scanne den QR-Code (mit der iPhone-Kamera oder mit **Scan code** in Tether), tippe auf **Connect** und klicke auf **Approve**. Unterwegs nutzt du Tailscale auf beiden Geräten.
|
|
@@ -359,6 +417,10 @@ PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/ds
|
|
|
359
417
|
PLAYWRIGHT=/path/to/playwright node test/browser-recent-tree.mjs /path/to/dsh/lib/bin.js
|
|
360
418
|
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
361
419
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
420
|
+
# Next waiting chat and Option buttons (fake model): the sidebar button and Cmd+Shift+E open the waiting chats in order, the Keyboard shortcuts row, the option buttons and the question card keys, switch off + their thumbnails
|
|
421
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path/to/dsh/lib/bin.js
|
|
422
|
+
# Reject with note, Secret input, Quote in reply, Side chat and Diff notes (fake model + a test-only approval gate): the button on dsh's card, the note after the rejection in the next request, Esc; the secret card, Save, the value in no request, file or page, Decline, Stop; a selected part of an answer → Quote → the sent message; a side question while the chat waits on a card (read-only, no queued message in it), Bring back; notes on a diff line and range → Send to composer → the sent message; switch off + their thumbnails
|
|
423
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
|
|
362
424
|
# every Settings feature row shows a loading screenshot and a ? link to its README row
|
|
363
425
|
PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
|
|
364
426
|
# What's new after an update: the release notes show once, Esc and Close close them
|
|
@@ -408,7 +470,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
|
|
|
408
470
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
409
471
|
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
410
472
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
411
|
-
# Task board:
|
|
473
|
+
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
|
|
412
474
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
413
475
|
```
|
|
414
476
|
|