dsh-composer-plus 1.12.0 → 1.13.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 +36 -13
- package/README.es.md +36 -13
- package/README.fr.md +36 -13
- package/README.hi.md +36 -13
- package/README.id.md +36 -13
- package/README.ja.md +36 -13
- package/README.ko.md +36 -13
- package/README.md +36 -13
- package/README.pt-BR.md +36 -13
- package/README.ru.md +36 -13
- package/README.tr.md +36 -13
- package/README.vi.md +36 -13
- package/README.zh.md +36 -13
- package/assets/features/changesPanel.webp +0 -0
- package/assets/features/copyMessageLink.webp +0 -0
- package/assets/features/markProjectRead.webp +0 -0
- package/assets/features/queueEdit.webp +0 -0
- package/client.js +917 -133
- package/index.js +439 -83
- package/package.json +7 -3
- package/tether/gateway/admin.html +47 -3
- package/tether/gateway/server.mjs +98 -28
package/README.de.md
CHANGED
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Starte dsh danach neu. (Die CLI kann nicht in das Desktop-Profil installieren; dieses Profil verwaltet die App.)
|
|
31
31
|
|
|
32
|
-
> Das pnpm von dsh überspringt Versionen, die jünger als 24 Stunden sind. Gib direkt nach einem Release die Version mit an: `dsh-composer-plus@1.
|
|
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.13.0`.
|
|
33
33
|
|
|
34
34
|
## Funktionen
|
|
35
35
|
|
|
@@ -37,10 +37,10 @@ Starte dsh danach neu. (Die CLI kann nicht in das Desktop-Profil installieren; d
|
|
|
37
37
|
|
|
38
38
|
| Funktion | So nutzt du sie | Screenshot |
|
|
39
39
|
|---|---|---|
|
|
40
|
-
| **Änderungsbereich** | <a id="feature-changespanel"></a>Rechte Seitenleiste → `+` → **Änderungen**. Wähle **Nicht committet**, **Nicht gestagt**, **Gestagt** oder **Branch**, um die geänderten Dateien mit `+/-`-Zählern zu sehen. Klicke auf eine Datei, um ihren Diff zu sehen. **Letzte Runde** öffnet die eigene Prüfansicht von dsh für die letzte Runde. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Screenshot: Änderungsbereich"></a> |
|
|
40
|
+
| **Änderungsbereich** | <a id="feature-changespanel"></a>Rechte Seitenleiste → `+` → **Änderungen**. Wähle **Nicht committet**, **Nicht gestagt**, **Gestagt** oder **Branch**, um die geänderten Dateien mit `+/-`-Zählern zu sehen. Klicke auf eine Datei, um ihren Diff zu sehen. **Letzte Runde** öffnet die eigene Prüfansicht von dsh für die letzte Runde. Klicke auf den Branch-Namen (oder wähle **Baum**), um den Branch-Baum zu sehen. Ein Klick auf einen Branch darüber springt zu diesem Branch, ein Klick auf einen Commit zeigt seine Dateien und Diffs. **Dieser Chat** listet nur die Dateien auf, die die Datei-Tools (write, edit) des offenen Chats in allen seinen Runden geschrieben haben, mit ihrem gesamten Diff seit seiner ersten Nachricht. Die Schaltfläche **␣** blendet Leerraum-Änderungen aus (`git diff -w`): Zeilen, die sich nur in der Einrückung oder den Zeilenenden geändert haben, werden nicht angezeigt. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Screenshot: Änderungsbereich"></a> |
|
|
41
41
|
| **Funktionsideen** | <a id="feature-featureideas"></a>Rechte Seitenleiste → `+` → **Funktionsideen** → **Funktionen vorschlagen**. Das eigene Modell des Chats liest eine kurze Zusammenfassung des Projekts (Dateien der obersten Ebene, den Anfang von README und Manifest, die letzten 15 Commits). Dann schlägt es bis zu 8 Funktionen vor. Sie erscheinen als Kartenstapel in der Oberflächensprache von dsh. Wische eine Karte nach rechts (oder klicke auf **✓** oder drücke `→`; die Karte fliegt in jedem Fall zu ihrer Seite hinaus), um einen neuen Chat im selben Projekt zu starten. Dieser Chat startet im Planmodus mit der Idee als Anfrage. So ändert sich nichts, bevor du den Plan genehmigst. Um den Plan auszulassen, klicke auf **▶ Sofort umsetzen** (oder drücke `↑`; die Karte fliegt nach oben hinaus). Dann startet der neue Chat sofort mit der Idee als normaler Anfrage, und das Modell nimmt die Änderung vor und führt seine Prüfungen aus (Genehmigungen gelten wie gewohnt). Wische nach links (oder **✕** oder `←`), um die Karte zu überspringen. **Rückgängig** (oder `Z`) holt eine übersprungene Karte zurück. Klicke auf **↓** (oder drücke `↓`), um eine gute Idee für später zu merken. Sie kommt in die Liste **Später** des Projekts. Jeder Chat im selben Projektordner zeigt diese Liste (auch nach einem Neustart). **Später (N)** öffnet die Liste. **Planen** startet für die Idee denselben Chat im Planmodus, **Sofort umsetzen** den Chat ohne Plan. Beide nehmen die Idee von der Liste. **Alle planen (N)** startet einen einzigen Chat im Planmodus für alle Ideen der Liste. So werden gemeinsame Teile nur einmal geplant. **Aus der Liste entfernen** löscht sie. **Als Checkliste kopieren** kopiert die ganze Liste als Markdown-Checkliste (`- [ ] Title — Summary`, eine Zeile pro Idee) in die Zwischenablage, für einen Issue-Tracker oder eine TODO-Datei; dabei gibt es keinen Netzwerkaufruf. **Weitere Ideen** fügt Karten hinzu. Für Ideen zu nur einem Bereich tippe ein kurzes **Fokusthema** in das Feld neben **Funktionen vorschlagen** (höchstens 80 Zeichen; `Enter` schlägt ebenfalls vor), oder klicke auf eines der festen Themen darunter: **Leistung**, **Barrierefreiheit**, **Tests**, **Sicherheit**, **Bedienbarkeit** oder **Dokumentation** (ein erneuter Klick leert es). Das Modell schlägt dann nur Funktionen zu diesem Thema vor; ein leeres Feld bedeutet jede Funktion. In einem Projekt wird keine Idee zweimal vorgeschlagen: Jede vorgeschlagene Idee (übersprungen, gemerkt oder gestartet) kommt in den **Verlauf** des Projekts. Das Modell erhält die Anweisung, diese Ideen nicht erneut vorzuschlagen, und ein wiederholter Titel wird verworfen. **Verlauf** listet sie mit **Gestartet** oder **Vorgeschlagen**; **Vergessen** (oder **Alle vergessen**) lässt eine Idee wieder zu; eine Idee, die noch in der Liste **Später** steht, bleibt aus den Vorschlägen heraus, bis du sie dort entfernst. Das Modell läuft nur, wenn du klickst. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Screenshot: Funktionsideen"></a> |
|
|
42
42
|
| **Inhaltssuche** | <a id="feature-contentsearch"></a>Die eigene Seitenleisten-Suche von dsh (die Lupe neben **Arbeitsbereiche**; `Cmd+K` in der Desktop-App, `Cmd+Alt+K` im Browser) findet Chats auch über die Wörter in deinen Nachrichten und in den Antworten, nicht nur über den Titel. Unter dem Chat zeigt sie den passenden Text. dsh hat diese Suche bereits, liefert sie aber ausgeschaltet aus. Diese Funktion schaltet sie ein, mit einer Suchindex-Datei auf deinem Computer. Der Index entsteht bei der ersten Suche nach einem Start (etwa 15 s für 250 Chats, siehe Grenzen) und bleibt für die nächsten Starts erhalten. Standardmäßig an; eine Änderung gilt, nachdem du dsh neu gestartet hast. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Screenshot: Inhaltssuche"></a> |
|
|
43
|
-
| **Runde zurücknehmen** | <a id="feature-turnrollback"></a>Fahre mit der Maus über eine deiner Nachrichten und klicke auf **↶** (neben Kopieren). **Nur Chat** nimmt diese Nachricht und alles danach (Antworten, Tool-Aufrufe) aus dem Chat und aus dem Kontext des Modells. Die Nachricht kommt zurück ins Eingabefeld: Ändere sie und sende sie erneut. **Chat und Dateien** listet zuerst die Projektdateien auf, die sich seit dieser Nachricht geändert haben. Dann setzt es auch diese Dateien auf ihren alten Stand zurück, einschließlich Änderungen durch Befehle (`bash`), nicht nur durch die Bearbeitungs-Tools von dsh. Eine laufende Runde stoppt zuerst. Das Chatprotokoll wird nie umgeschrieben: Eine verborgene Markierung blendet den zurückgenommenen Teil aus, so wie `/compact` von dsh alte Nachrichten ausblendet. Wenn [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) installiert ist, übernimmt es diese Aufgabe, und Composer Plus zeigt keine zweite Schaltfläche. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Screenshot: Runde zurücknehmen"></a> |
|
|
43
|
+
| **Runde zurücknehmen** | <a id="feature-turnrollback"></a>Fahre mit der Maus über eine deiner Nachrichten und klicke auf **↶** (neben Kopieren). **Nur Chat** nimmt diese Nachricht und alles danach (Antworten, Tool-Aufrufe) aus dem Chat und aus dem Kontext des Modells. Die Nachricht kommt zurück ins Eingabefeld: Ändere sie und sende sie erneut. **Chat und Dateien** listet zuerst die Projektdateien auf, die sich seit dieser Nachricht geändert haben. Dann setzt es auch diese Dateien auf ihren alten Stand zurück, einschließlich Änderungen durch Befehle (`bash`), nicht nur durch die Bearbeitungs-Tools von dsh. Eine laufende Runde stoppt zuerst. Das Chatprotokoll wird nie umgeschrieben: Eine verborgene Markierung blendet den zurückgenommenen Teil aus, so wie `/compact` von dsh alte Nachrichten ausblendet. Wenn [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) installiert ist, übernimmt es diese Aufgabe, und Composer Plus zeigt keine zweite Schaltfläche. Nach dem Zurücknehmen erscheint über dem Eingabefeld eine Leiste mit **Wiederholen**. Sie startet einen neuen Chat ab dem Moment direkt vor dem Zurücknehmen (dieselben Nachrichten und derselbe Kontext). Mit **Chat und Dateien** holt sie auch die Dateien zurück. Eine Datei, die du nach dem Zurücknehmen geändert hast, wird aufgelistet und bleibt erhalten, außer du setzt das Häkchen, das sie überschreibt. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Screenshot: Runde zurücknehmen"></a> |
|
|
44
44
|
| **Chat löschen** | <a id="feature-deletechat"></a>Seitenleiste → Menü **…** eines Chats (oder Rechtsklick) → **Löschen…** → **Löschen**. dsh selbst kann nur archivieren. Der Chat stoppt (seine Runde, Jobs, Subagents und geplanten Erinnerungen, wie beim Archivieren in dsh). Sein gespeicherter Verlauf kommt mit den Chats seiner Subagents in den macOS-Papierkorb (auf anderen Systemen: `$DSH_HOME/trash`). Um ihn zurückzuholen, lege den Ordner zurück und starte dsh neu: Der Chat erscheint in der Ansicht **Nur archivierte** der Seitenleiste. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Screenshot: Chat löschen"></a> |
|
|
45
45
|
| **Projektname im Eingabefeld** | <a id="feature-projectname"></a>Die Zeile unter dem Eingabefeld (Runden, Tokens, Cache-Treffer, Kontext) beginnt mit dem Projektnamen des Chats. So siehst du immer, in welchem Projekt ein Chat arbeitet. Es ist der eigene Projekttitel von dsh oder der Ordnername, wenn das Projekt keinen Titel hat. Fahre mit der Maus darüber, um den vollständigen Ordnerpfad zu sehen. Klicke darauf, um den Chat in der Seitenleiste zu finden, in der Listen- oder Projektansicht: Die Seitenleiste und das Projekt öffnen sich (auch ein eingeklapptes Projekt und sein **N weitere Sitzungen anzeigen**), die Liste scrollt zum Chat, und der Chat blinkt 5 Sekunden lang. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Screenshot: Projektname im Eingabefeld"></a> |
|
|
46
46
|
| **Eingabeverlauf** | <a id="feature-inputhistory"></a>Drücke in einem leeren Eingabefeld `↑` / `↓`, um wie in einem Terminal durch deine gesendeten Nachrichten zu gehen. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Screenshot: Eingabeverlauf"></a> |
|
|
@@ -49,22 +49,25 @@ Starte dsh danach neu. (Die CLI kann nicht in das Desktop-Profil installieren; d
|
|
|
49
49
|
| **Fortsetzen mit einem Klick** | <a id="feature-continuebutton"></a>Nach einer gestoppten, fehlgeschlagenen oder abgebrochenen Runde zeigt ein leeres Eingabefeld **▶**. Ein Klick setzt das vorhandene Gespräch fort. Dabei schreibt er nichts ins Eingabefeld und fügt keine sichtbare Chatnachricht hinzu. (Das Modell erhält einen kurzen verborgenen Hinweis „mach dort weiter, wo du aufgehört hast“, weil manche Anbieter, etwa Claude, eine Anfrage ablehnen, die mit einer Assistentenantwort endet.) Nachrichten in der Warteschlange bleiben dort: ▶ setzt nur die gestoppte Aufgabe fort, danach läuft die Warteschlange. Nach einer abgeschlossenen Runde bleibt die normale Senden-Schaltfläche. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Screenshot: Fortsetzen mit einem Klick"></a> |
|
|
50
50
|
| **Nach Neustart fortsetzen** | <a id="feature-resumeafterrestart"></a>Standardmäßig aus: Schalte die Funktion unter **Einstellungen → Composer Plus** ein. Wenn du dsh beendest (oder dsh sich schließt), während ein Chat arbeitet, macht dieser Chat von selbst weiter, sobald du dsh wieder öffnest. Er bekommt denselben verborgenen Hinweis wie bei Fortsetzen mit einem Klick. Lief gerade eine Zielrunde (`/goal`), geht das Ziel mit seiner nächsten Runde weiter (dsh pausiert Ziele bei jedem Start, bis du sie fortsetzt). Chats, die du gestoppt hast, die abgeschlossen sind oder die fehlgeschlagen sind, werden nicht fortgesetzt. dsh selbst hat dafür keine Einstellung: Es markiert eine solche Runde nur als unterbrochen. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Screenshot: Nach Neustart fortsetzen"></a> |
|
|
51
51
|
| **Warteschlange per Drag-and-drop** | <a id="feature-queuereorder"></a>Eingereihte Nachrichten bekommen einen Griff (⠿). Ziehe ihn, um die Reihenfolge zu ändern, oder setze den Fokus auf den Griff und drücke `↑` / `↓`. `Esc` bricht ab. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Screenshot: Warteschlange per Drag-and-drop"></a> |
|
|
52
|
+
| **Eingereihte Nachricht direkt bearbeiten** | <a id="feature-queueedit"></a>Doppelklicke auf eine eingereihte Nachricht. Sie wird zum eigenen Bearbeitungsfeld von dsh: Ändere den Text und drücke `Enter` zum Speichern oder `Esc` zum Abbrechen. Die Nachricht behält ihren Platz in der Warteschlange. Nachrichten mit Bildern oder Dateien lassen sich so nicht bearbeiten (die Warteschlange von dsh bearbeitet nur Text). | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="Screenshot: Eingereihte Nachricht direkt bearbeiten"></a> |
|
|
52
53
|
| **Sitzungslink kopieren** | <a id="feature-copydeeplink"></a>Rechtsklick auf einen Chat in der Seitenleiste → **Sitzungslink kopieren**. Füge den Link `dsh-session:…` in einen anderen Chat ein, um diesen Chat als schreibgeschützten Kontext anzuhängen. dsh 0.2.1 hat ein eigenes **Sitzungs-ID kopieren**, das nur die reine ID kopiert. Dieser Eintrag steht direkt danach. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Screenshot: Sitzungslink kopieren"></a> |
|
|
54
|
+
| **Nachrichtenlink kopieren** | <a id="feature-copymessagelink"></a>Fahre mit der Maus über eine Nachricht und klicke auf **🔗** (in ihrer Aktionszeile, bei einer Antwort neben der Uhrzeit). Der Link ist der Sitzungslink plus die Nachrichtennummer: `dsh-session:…#42`. Füge ihn in eine Nachricht ein und sende sie. Ab dsh 0.2.1 erscheint der Link als Chip. Ein Klick darauf öffnet diesen Chat, scrollt zur Nachricht und hebt sie 2 Sekunden lang hervor. Wie ein Sitzungslink hängt er diesen Chat auch als schreibgeschützten Kontext an. | <a href="assets/features/copyMessageLink.webp"><img src="assets/features/copyMessageLink.webp" width="160" alt="Screenshot: Nachrichtenlink kopieren"></a> |
|
|
53
55
|
| **Chat als Markdown exportieren** | <a id="feature-exportmarkdown"></a>Rechtsklick auf einen Chat in der Seitenleiste (oder sein Menü **…** öffnen) → **Als Markdown exportieren…**. Ein Dialog zeigt, wie viele Nachrichten der Chat hat. **In die Zwischenablage kopieren** kopiert den Chat als Markdown, **.md-Datei speichern** speichert ihn als `<chat title>.md` über den Download des Browsers (dsh-Desktop: in deinen Ordner Downloads oder über einen Speichern-Dialog, je nach Einstellung deines Systems). Die Datei enthält den Chattitel, den Projektnamen und das Datum, dann pro Nachricht einen Abschnitt `## Du` oder `## Assistent`. Codeblöcke bleiben, wie sie sind; ein Codeblock, den eine Nachricht offen lässt, wird geschlossen. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Screenshot: Chat als Markdown exportieren"></a> |
|
|
54
56
|
| **Projektpfad kopieren** | <a id="feature-copyprojectpath"></a>Rechtsklick auf ein Projekt in der Seitenleiste → **Pfad kopieren** kopiert den vollständigen Pfad seines Ordners. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Screenshot: Projektpfad kopieren"></a> |
|
|
55
57
|
| **Projektsuche im neuen Chat** | <a id="feature-projectpicker"></a>Neuer Chat → die Projektschaltfläche über dem Eingabefeld. Die Projekte erscheinen in A–Z-Reihenfolge, oben mit dem Feld **Projekte durchsuchen**. Gib einen Teil eines Namens ein (Groß- und Kleinschreibung und Akzente spielen keine Rolle) und drücke `Enter`, um den ersten Treffer zu wählen. Passt nichts, erscheint **Kein passendes Projekt**. Die gespeicherte Projektreihenfolge von dsh in der Seitenleiste ändert sich nicht. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Screenshot: Projektsuche im neuen Chat"></a> |
|
|
56
58
|
| **Vorhersage der nächsten Nachricht** | <a id="feature-nextprediction"></a>Standardmäßig an: Du kannst die Funktion unter **Einstellungen → Composer Plus** ausschalten. Wenn der Agent eine Runde beendet (keine gestoppte oder fehlgeschlagene), zeigt das leere Eingabefeld in Grau eine Vermutung deiner nächsten Nachricht, mit dem Hinweis **Tab zum Übernehmen**. `Tab` setzt den Text ins Eingabefeld, sendet ihn aber nicht. `Esc` blendet die Vermutung für diese Runde aus. Auch Tippen blendet sie aus, und eine neue Runde ersetzt sie. Das Menü **Modell** unter dem Schalter listet die eigenen Modelle von dsh (dieselbe Liste wie im Modellmenü von dsh). **dsh-Standard** ist vorausgewählt und folgt dem Standardmodell von dsh. Jede beendete Runde kostet einen kurzen Modellaufruf. In Tether erscheint die Vermutung über dem leeren Eingabefeld: Tippe darauf, um sie ins Feld zu setzen. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Screenshot: Vorhersage der nächsten Nachricht"></a> |
|
|
57
59
|
| **Beim Tippen vervollständigen** | <a id="feature-typingcompletion"></a>Standardmäßig aus: Du kannst die Funktion unter **Einstellungen → Composer Plus** einschalten. Während du tippst, zeigt grauer Text direkt nach dem Cursor, wie deine Nachricht weitergehen kann. `Tab` fügt ihn der Nachricht hinzu, sendet sie aber nicht. `Esc` blendet ihn aus. Er schlägt nur deine eigenen nächsten Wörter vor: nie eine Antwort an dich und keine erfundenen Fehlertexte oder Namen. Wenn die Nachricht fertig aussieht oder das Modell nicht sicher ist, erscheint nichts. Wenn du die nächsten Buchstaben des grauen Texts tippst, bleibt er stehen, ohne neuen Modellaufruf. Die Funktion hat ein eigenes Menü **Modell** unter ihrem Schalter. Der erste Eintrag, **Wie Vorhersage der nächsten Nachricht**, nutzt das Modell von **Vorhersage der nächsten Nachricht** (das ist der Standard). Wähle ein anderes Modell, um für jede Funktion ein eigenes Modell zu nutzen, zum Beispiel ein schnelleres Modell für Vervollständigungen. Sie macht bei jeder Pause beim Tippen einen Modellaufruf und verbraucht deshalb viel mehr Tokens als die Vorhersage: Wähle ein schnelles, günstiges Modell. Sie läuft nicht bei einem Slash-Befehl, bei einer Nachricht mit einem Datei-Chip oder wenn der Cursor nicht am Ende steht. In Tether erscheint der Rest beim Tippen über dem Feld: Tippe darauf, um ihn hinzuzufügen. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Screenshot: Beim Tippen vervollständigen"></a> |
|
|
58
60
|
| **Prompt verbessern** | <a id="feature-promptimprove"></a>Tippe eine grobe Anfrage und klicke dann auf den Zauberstab (**Prompt verbessern**) neben dem Modellmenü. Ein Modellaufruf schreibt sie als klareren Prompt neu: zuerst das Ziel, kurze nummerierte Schritte, wenn es mehrere Teile gibt, und die Prüfung, die laufen soll. Die Funktion liest diesen Chat (ohne zurückgenommene Nachrichten), README, AGENTS.md und Manifest des Projekts, die geänderten Dateien und die Dateien, deren Namen zu deinen Wörtern passen, und behält deine Sprache bei. Sie erfindet nie Dateinamen. Der neue Text ersetzt deinen Entwurf, wird aber nicht gesendet: Lies ihn, bearbeite ihn und drücke dann `Enter`. `Cmd/Ctrl+Z` holt deinen Text in einem Schritt zurück, ebenso die Schaltfläche (**Verbesserung rückgängig machen**). Wenn du tippst, während sie arbeitet, bleibt dein neuer Text stehen. `Esc` oder ein zweiter Klick bricht ab. Sie hat ein eigenes Menü **Modell** in den Einstellungen (Standard: **Wie das Modell des Chats**). Nicht für Slash-Befehle oder eine Nachricht mit einem Datei-Chip. In Tether ist der Zauberstab neben dem Feld. | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="Screenshot: Prompt verbessern"></a> |
|
|
59
|
-
| **Für diesen Chat zulassen** | <a id="feature-allowforchat"></a>Wenn die automatische Prüfung dich fragt, bekommt die Genehmigungskarte **Für diesen Chat zulassen**: Dasselbe Tool ist im selben Chat ab dann erlaubt, mit beliebigen Argumenten. Ein Chip in der Kopfzeile listet die Freigaben auf und widerruft sie. Freigaben bleiben nach einem Neustart erhalten. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Screenshot: Für diesen Chat zulassen"></a> |
|
|
61
|
+
| **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> |
|
|
60
62
|
| **Projektstatus** | <a id="feature-projectstatus"></a>Eine Projektzeile in der Seitenleiste zeigt dieselbe Markierung (Spinner / wartet / fertig) wie ihre Chats. So zeigt auch ein eingeklapptes Projekt, dass ein Chat darin arbeitet oder dich braucht. Ein Chat, der auf dich wartet, kommt zuerst, dann ein fertiger Chat, den du noch nicht geöffnet hast (der grüne Punkt, auch während ein anderer Chat noch läuft), dann der Spinner. Fahre mit der Maus darüber, um Details zu sehen. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Screenshot: Projektstatus"></a> |
|
|
63
|
+
| **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> |
|
|
61
64
|
| **Aktive Projekte zuerst** | <a id="feature-activeprojectsfirst"></a>Wenn ein Chat zu laufen beginnt oder dich braucht, rückt sein Projekt mit der eigenen Zeilenanimation von dsh an den Anfang der Seitenleiste (dieselbe Bewegung wie beim Hinziehen von Hand). Fertige Projekte bleiben, wo sie sind; ziehe sie wie gewohnt an eine beliebige Stelle. Die Verschiebungen werden in der Projektreihenfolge von dsh gespeichert. Wenn du die Funktion ausschaltest, bleibt die aktuelle Reihenfolge also erhalten. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Screenshot: Aktive Projekte zuerst"></a> |
|
|
62
65
|
| **Filter für aktuelle Projekte** | <a id="feature-recentprojects"></a>Seitenleiste → Ansichtsoptionen (Schieberegler-Symbol) → **In den letzten 2 Stunden aktiv**. Solange diese Option ausgewählt ist, zeigt die Seitenleiste nur Projekte mit einem Chat, der in den letzten 2 Stunden aktiv war. Das ist ein Chat, der in dieser Zeit aktualisiert wurde, ein laufender oder wartender Chat, der geöffnete Chat oder ein fertiger Chat, den du noch nicht geöffnet hast (der grüne „Fertig“-Punkt von dsh), auch nach den 2 Stunden. Projekte ohne einen solchen Chat sind ausgeblendet, auch neue und leere Projekte. Wähle die Option erneut, um alle Projekte zu zeigen. Die Auswahl bleibt auf diesem Gerät gespeichert. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Screenshot: Filter für aktuelle Projekte"></a> |
|
|
63
66
|
| **Alle Projekte einklappen** | <a id="feature-collapseprojects"></a>Solange ein Projekt in der Seitenleiste geöffnet ist, erscheint neben den Ansichtsoptionen (Schieberegler-Symbol) eine Schaltfläche. Klicke darauf, um alle geöffneten Projekte auf einmal zu schließen, zum Beispiel 3 geöffnete von 5 Projekten. Die Schaltfläche verschwindet wieder, wenn kein Projekt geöffnet ist. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Screenshot: Alle Projekte einklappen"></a> |
|
|
64
67
|
| **Nach Status sortieren** | <a id="feature-statusorder"></a>Seitenleiste → Ansichtsoptionen → **Sortieren nach** → **Nach Status** (mit **In einer Liste**). Fertige Chats kommen zuerst (mit dem „Fertig“-Punkt von dsh, den auch eine mit Fehler beendete Runde bekommt). Danach kommen laufende oder wartende Chats, dann Chats mit einer aktiven Automatisierungsaufgabe und dann der Rest in der Reihenfolge von dsh. Wenn du einen fertigen Chat öffnest, rückt er nach unten. Nur die Ansicht ändert sich: Wähle **Manuell** oder **Zuletzt aktualisiert**, um zurückzugehen. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Screenshot: Nach Status sortieren"></a> |
|
|
65
68
|
| **Hintergrundbenachrichtigungen** | <a id="feature-notifications"></a>Solange dsh im Hintergrund läuft, bekommst du eine Benachrichtigung, wenn eine Runde fertig ist (erste Zeile der Antwort). Du bekommst auch eine, wenn ein Chat wirklich auf dich wartet: auf eine Genehmigung (Toolname), eine Antwort (die Frage) oder eine Planprüfung. Eine Anfrage muss 1,5 s später noch offen sein. So bleiben automatisch beantwortete Genehmigungen (Freigaben der automatischen Prüfung, andere Plugins) stumm. Eine Benachrichtigung verschwindet, sobald ihre Anfrage beantwortet ist. Das Kennzeichen im Dock bzw. in der Taskleiste zählt die wartenden Chats. Ein Klick öffnet den Chat. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Screenshot: Hintergrundbenachrichtigungen"></a> |
|
|
66
69
|
| **App-Sprache** | <a id="feature-language"></a>Einstellungen → Composer Plus → **App-Sprache** stellt die ganze dsh-Oberfläche auf Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt oder हिन्दी um (siehe unten). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Screenshot: App-Sprache"></a> |
|
|
67
|
-
| **Mobile Verbindung (iPhone)** | <a id="feature-mobileconnect"></a>Nutze dsh mit der App [Tether](tether/) von deinem iPhone aus, im selben WLAN oder über [Tailscale](https://tailscale.com). Schalte die Funktion unter **Einstellungen → Composer Plus** ein (sie ist standardmäßig aus, weil sie einen Netzwerkport auf diesem Mac öffnet). Klicke dann unten links in der Seitenleiste auf **Mobile Verbindung**: Scanne den QR-Code mit der iPhone-Kamera (tippe auf **Open in Tether**) oder mit **Scan code** in Tether, tippe auf **Connect** und klicke auf **Approve**. Installiere Tether zuerst: Ohne die App kann die Kamera den Code nicht öffnen. Das Telefon zeigt deine Chats, sendet Nachrichten, beantwortet Genehmigungen und Fragen und wechselt Modelle und Agenten. Kopple so viele Macs, wie du willst: Mit dem Mac-Namen oben links in der App wechselst du zwischen ihnen. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Screenshot: Mobile Verbindung (iPhone)"></a> |
|
|
70
|
+
| **Mobile Verbindung (iPhone)** | <a id="feature-mobileconnect"></a>Nutze dsh mit der App [Tether](tether/) von deinem iPhone aus, im selben WLAN oder über [Tailscale](https://tailscale.com). Schalte die Funktion unter **Einstellungen → Composer Plus** ein (sie ist standardmäßig aus, weil sie einen Netzwerkport auf diesem Mac öffnet). Klicke dann unten links in der Seitenleiste auf **Mobile Verbindung**: Scanne den QR-Code mit der iPhone-Kamera (tippe auf **Open in Tether**) oder mit **Scan code** in Tether, tippe auf **Connect** und klicke auf **Approve**. Installiere Tether zuerst: Ohne die App kann die Kamera den Code nicht öffnen. Das Telefon zeigt deine Chats, sendet Nachrichten, beantwortet Genehmigungen und Fragen und wechselt Modelle und Agenten. Kopple so viele Macs, wie du willst: Mit dem Mac-Namen oben links in der App wechselst du zwischen ihnen. 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> |
|
|
68
71
|
| **Automatische Updates** | <a id="feature-autoupdate"></a>Wenn dsh startet, prüft das Plugin das [neueste GitHub-Release](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Ist es neuer und schon auf npm, installiert das Plugin genau diese Version über die eigene Plugin-Verwaltung von dsh (derselbe Weg wie Einstellungen → Plugins) und benachrichtigt dich. Starte dsh neu, um die Version zu laden. **Einstellungen → Composer Plus → Composer-Plus-Updates** zeigt die Version und hat **Nach Updates suchen** / **Jetzt aktualisieren**. Beim ersten Start von dsh mit der neuen Version zeigt ein Fenster **Neu in Composer Plus N** einmal die Release Notes dieser Version (aus derselben Update-Prüfung, ohne weiteren Netzwerkaufruf); **Schließen** oder `Esc` schließt es. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Screenshot: Automatische Updates"></a> |
|
|
69
72
|
|
|
70
73
|
<!-- END GENERATED FEATURES -->
|
|
@@ -119,15 +122,15 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
119
122
|
- **Fortsetzen:** Der authentifizierte lokale Endpunkt setzt nur die letzte unterbrochene Runde fort, lehnt veraltete oder doppelte Anfragen ab und behält die vorhandenen Genehmigungs-Hooks bei. Er sendet keine neue Benutzernachricht.
|
|
120
123
|
- **Nach Neustart fortsetzen:** aus, bis du es einschaltest. Die Host-Hälfte speichert nur Chat-IDs und Startzeiten in `$DSH_HOME/storages/dsh-composer-plus/resume.json` (Rechte nur für den Besitzer), und nichts verlässt deinen Rechner. Sie setzt einen Chat nur fort, wenn das eigene Protokoll von dsh sagt, dass dsh (nicht du) seine letzte Runde gestoppt hat. Genehmigungen und die automatische Prüfung gelten für die fortgesetzte Runde wie gewohnt.
|
|
121
124
|
|
|
122
|
-
- **Änderungsbereich:** git läuft nur lesend auf deinem Rechner, im eigenen Ordner des Chats, über den authentifizierten `/api`-Kanal von dsh. Es führt nie Commits, Staging oder Fetches aus und zeigt nur Pfade, die git selbst aufgelistet hat.
|
|
125
|
+
- **Änderungsbereich:** git läuft nur lesend auf deinem Rechner, im eigenen Ordner des Chats, über den authentifizierten `/api`-Kanal von dsh. Es führt nie Commits, Staging oder Fetches aus und zeigt nur Pfade, die git selbst aufgelistet hat. Der Baum zeigt die neuesten 300 Commits der lokalen und entfernten Branches; er wechselt nie den Branch (Checkout). In einem sehr großen Repository ohne commit-graph-Datei kann das Öffnen des Baums einige Sekunden dauern. **Dieser Chat** liest das eigene Protokoll des Chats, um die Dateien zu finden, die seine Datei-Tools geschrieben haben. Er vergleicht sie mit dem Snapshot von Runde zurücknehmen für diesen Chat, in einem temporären Ordner, der sofort gelöscht wird. Er schreibt nichts in dein Repository und nichts in den Snapshot-Speicher.
|
|
123
126
|
- **Funktionsideen:** Nichts läuft, bis du auf **Funktionen vorschlagen** klickst. Dann liest die Host-Hälfte nur den eigenen Ordner des Chats (der Browser sendet nie einen Pfad): die Namen der Einträge auf oberster Ebene, die ersten 6 kB von README, AGENTS.md und Manifest (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …) und `git log --oneline -15`, insgesamt höchstens 16 kB. Sie überspringt `.env*`, Schlüsseldateien und Ordner wie `node_modules`. Sie liest nur reguläre Dateien, die im Ordner bleiben: Ein Symlink, der aus dem Ordner hinauszeigt, ein FIFO oder ein Gerät wird übersprungen. Diese Zusammenfassung geht als eine einzige Anfrage an das Modell, das der Chat nutzt, über die eigenen Anbietereinstellungen von dsh. Sie wird keinem Chat hinzugefügt. Im Projekt wird nichts geschrieben. Eine nach rechts gewischte Idee startet einen neuen Chat im Planmodus, also gelten Genehmigungen und Planprüfung wie gewohnt. **Sofort umsetzen** startet den Chat ohne Planmodus: Das Modell kann sofort Dateien ändern, mit den üblichen Genehmigungen des Chats und der automatischen Prüfung. Für später gemerkte Ideen (Titel, Zusammenfassung, Begründung, Aufwand) werden mit dem Ordnerpfad des Projekts in `storages/dsh-composer-plus/later.json` im dsh-Home gespeichert (Datei nur für den Besitzer). Ins Projekt kommt nichts. Der Verlauf der vorgeschlagenen Ideen (Titel, Zusammenfassung, Begründung, Aufwand, Datum, ob gestartet) wird auf dieselbe Weise in `storages/dsh-composer-plus/idea-history.json` gespeichert, höchstens 200 pro Projekt (die ältesten fallen zuerst weg). Seine Titel gehen beim nächsten **Funktionen vorschlagen** in diesem Projekt an das Modell.
|
|
124
127
|
- **Inhaltssuche:** Kein neuer Code durchsucht deine Chats. Das Plugin schaltet nur den eigenen Nachrichtenindex von dsh ein (SQLite FTS5, `dsh-session-query-sqlite`) und gibt ihm eine Datei: `$DSH_HOME/cache/composer-plus/session-search.db` (Datei und Ordner nur für den Besitzer). Die Datei enthält den Text deiner Benutzer- und Assistentennachrichten. Sie ist also so privat wie die Chatprotokolle in `$DSH_HOME/sessions`. Nichts verlässt deinen Rechner. Die Datei ist eine Kopie, die dsh neu erstellen kann: Du kannst sie löschen, während dsh geschlossen ist. Der Schalter liegt in `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
|
|
125
|
-
- **Runde zurücknehmen:** Vor jeder deiner Nachrichten macht der Host einen git-Snapshot des Chat-Ordners in einem eigenen Speicher: `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (Ordner nur für den Besitzer). Er enthält Kopien der Dateien in diesem Ordner, die git sieht (keine ignorierten Dateien), und ist also so privat wie das Projekt. Er liest die Objekte deines Repositorys (keine Kopie dessen, was git schon hat) und schreibt nie in Index, `HEAD`, Branches, Tags, Stash oder Config deines Repositorys. Die einzige Änderung, die git dort macht, ist ein neuerer Zeitstempel an Objektdateien, die es wiederverwendet (das verzögert ihre Bereinigung durch `git gc`). Ein Zurücknehmen mit Dateien schreibt nur reguläre Dateien im Ordner des Chats. Es überspringt Symlinks, Pipes und alles außerhalb des Ordners. Nichts verlässt deinen Rechner. Du kannst den Speicher löschen, während dsh geschlossen ist (das Zurücknehmen funktioniert dann nur für den Chat, bis neue Nachrichten kommen). **Chat löschen** löscht auch den Speicher eines Chats. Der Schalter liegt in `$DSH_HOME/storages/dsh-composer-plus/rollback.json`.
|
|
128
|
+
- **Runde zurücknehmen:** Vor jeder deiner Nachrichten macht der Host einen git-Snapshot des Chat-Ordners in einem eigenen Speicher: `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (Ordner nur für den Besitzer). Er enthält Kopien der Dateien in diesem Ordner, die git sieht (keine ignorierten Dateien), und ist also so privat wie das Projekt. Er liest die Objekte deines Repositorys (keine Kopie dessen, was git schon hat) und schreibt nie in Index, `HEAD`, Branches, Tags, Stash oder Config deines Repositorys. Die einzige Änderung, die git dort macht, ist ein neuerer Zeitstempel an Objektdateien, die es wiederverwendet (das verzögert ihre Bereinigung durch `git gc`). Ein Zurücknehmen mit Dateien schreibt nur reguläre Dateien im Ordner des Chats. Es überspringt Symlinks, Pipes und alles außerhalb des Ordners. Nichts verlässt deinen Rechner. Du kannst den Speicher löschen, während dsh geschlossen ist (das Zurücknehmen funktioniert dann nur für den Chat, bis neue Nachrichten kommen). **Chat löschen** löscht auch den Speicher eines Chats. Der Schalter liegt in `$DSH_HOME/storages/dsh-composer-plus/rollback.json`. Ein Zurücknehmen mit Dateien behält auch die Dateien, wie sie direkt davor waren (`refs/r/…` im selben Speicher), für **Wiederholen**. Die wiederholten Rücknahmen stehen in `$DSH_HOME/storages/dsh-composer-plus/redone.json` (nur für den Besitzer).
|
|
126
129
|
- **Chat als Markdown exportieren:** Die Host-Hälfte liest nur das eigene Protokoll des Chats (dieselben Nachrichten, die dsh zeigt) und gibt sie an die Seite. Sie liest keine Projektdatei und sendet nichts über das Netzwerk. Das Markdown geht nur in deine Zwischenablage oder in die Datei, die du speicherst.
|
|
127
130
|
- **Chat löschen:** verschiebt die eigenen Protokollordner des Chats (`$DSH_HOME/sessions/<project>/<chat>`) in den Papierkorb. Den Projektordner fasst es nicht an.
|
|
128
|
-
- **Für diesen Chat zulassen:** Freigaben werden in `$DSH_HOME/storages/dsh-composer-plus/grants.json` gespeichert (Rechte nur für den Besitzer). Eine Freigabe gilt für genau ein Tool in einem Chat. Wenn dieses Tool schreiben kann, deckt die Freigabe auch jeden Schreibvorgang ab. Widerrufe sie über den Chip in der Kopfzeile.
|
|
131
|
+
- **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.
|
|
129
132
|
- Die automatische Prüfung läuft weiterhin bei jedem Aufruf. Fehlgeschlagene Prüfungen werden nie automatisch erlaubt.
|
|
130
|
-
- **Mobile Verbindung:** aus, bis du sie einschaltest. Solange sie an ist, betreibt die Host-Hälfte das Tether-Gateway: HTTPS auf Port 19390, das nur dein WLAN-Subnetz und dein Tailnet (100.64.0.0/10) annimmt, und eine Kopplungsseite auf `127.0.0.1:19391` (nur dieser Mac). Ein Telefon braucht einen Einmalcode aus dem QR-Code (5 Minuten gültig) und deine Bestätigung mit **Approve** auf dem Mac. Das Telefon pinnt das Zertifikat des Gateways. Der Mac speichert von jedem Telefon-Token nur einen Hash (30 Tage, wird bei Nutzung verlängert). **Remove** schließt die Verbindungen dieses Telefons sofort. Telefone können nur dsh-Methoden aus einer Positivliste aufrufen (Chats, Prompts, Anhänge, Slash-Befehle, Genehmigungen, Fragen, Modelle, Agenten, Ziele), aber keine Einstellungen, Zugangsdaten, den Dateibrowser oder das Terminal. Daten: `$DSH_HOME/storages/dsh-composer-plus/mobile
|
|
133
|
+
- **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).
|
|
131
134
|
- **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.
|
|
132
135
|
- **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).
|
|
133
136
|
- **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).
|
|
@@ -144,8 +147,9 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
144
147
|
- **Keine ↶-Schaltfläche an meinen Nachrichten:** Runde zurücknehmen ist aus, der Chat ist ein Subagent-Chat, oder dsh-rewind-plugin ist installiert (nutze dessen ↶-Schaltfläche). Starte dsh nach einem Update neu.
|
|
145
148
|
- **Chat und Dateien ist ausgegraut:** Das Projekt ist kein git-Repository, es gibt keinen Snapshot von vor dieser Nachricht (die Nachricht ist älter als das Plugin, oder einer der 50 neuesten Snapshots hat ihn ersetzt), oder keine Datei hat sich geändert.
|
|
146
149
|
- **Löschen meldet, dass ein anderes dsh diesen Chat geöffnet hat:** Ein zweites dsh mit demselben dsh-Home hält die Sperre des Chats. Schließe dieses Fenster oder dieses dsh und lösche dann erneut. Der Chat bleibt in der Zwischenzeit archiviert.
|
|
150
|
+
- **Mein iPhone verbindet sich nicht, seit ich „Tailscale only“ eingeschaltet habe:** Tailscale muss auf dem Mac und auf dem iPhone eingeschaltet sein. Das Panel Mobile Verbindung warnt, wenn es auf dem Mac aus ist. Das Zugriffsprotokoll zeigt jeden abgelehnten Versuch mit seinem Grund.
|
|
147
151
|
- **Ein Chat wurde nach einem Neustart nicht fortgesetzt:** Nach Neustart fortsetzen war aus, als dsh beendet wurde, du hast die Runde selbst gestoppt, die Runde war beendet (fertig oder fehlgeschlagen), der Chat war archiviert, oder mehr als 20 Chats liefen (die neuesten 20 werden fortgesetzt).
|
|
148
|
-
- **Die Installation schlägt direkt nach einem Release fehl:** Gib die Version mit an (`dsh-composer-plus@1.
|
|
152
|
+
- **Die Installation schlägt direkt nach einem Release fehl:** Gib die Version mit an (`dsh-composer-plus@1.13.0`), siehe den Hinweis zur Installation oben.
|
|
149
153
|
|
|
150
154
|
## Grenzen
|
|
151
155
|
|
|
@@ -161,9 +165,14 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
161
165
|
- **Chat löschen** braucht das Archiv von dsh (dsh 0.2.0 und neuer). Ein Chat (oder einer seiner Subagent-Chats), der nicht innerhalb von 15 s stoppt oder den ein anderes dsh hält, bleibt archiviert, und nichts wird verschoben. Auf anderen Systemen als macOS muss der Papierkorb-Ordner auf demselben Laufwerk liegen wie der Chatverlauf. Ein geöffneter Chat, den du löschst, bleibt archiviert und ausgeblendet im Speicher von dsh, bis dsh neu startet. Leere den Papierkorb selbst; dsh tut das nicht.
|
|
162
166
|
- 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.
|
|
163
167
|
- 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.
|
|
168
|
+
- **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.
|
|
164
169
|
- **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.
|
|
165
|
-
- **Mobile Verbindung** funktioniert nur unter macOS (sie nutzt `en0`, `openssl`, `swift` und `dns-sd`). Sie nutzt die festen Ports 19390 und 19391. Daher kann auf jedem Mac nur ein dsh sie gleichzeitig ausführen (jeder Mac ist ein Eintrag in der Mac-Liste des Telefons). Das Telefon bekommt Benachrichtigungen nur, solange Tether offen ist oder gerade in den Hintergrund gewechselt ist (kein Push-Dienst). Die iOS-App ist noch nicht im App Store: Baue sie mit Xcode aus `tether/ios`. Die grünen Punkte in Tether folgen dem Mac: Ein Chat, den du in dsh öffnest, verliert seinen Punkt auch auf dem Telefon. Ein Chat, den du in Tether öffnest, verliert seinen Punkt nur auf den Telefonen. Der eigene Punkt von dsh auf dem Mac bleibt, bis du den Chat dort öffnest.
|
|
166
|
-
- Ein Sitzungslink funktioniert in Chats; ein Klick darauf öffnet den Chat nicht.
|
|
170
|
+
- **Mobile Verbindung** funktioniert nur unter macOS (sie nutzt `en0`, `openssl`, `swift` und `dns-sd`). Sie nutzt die festen Ports 19390 und 19391. Daher kann auf jedem Mac nur ein dsh sie gleichzeitig ausführen (jeder Mac ist ein Eintrag in der Mac-Liste des Telefons). Das Telefon bekommt Benachrichtigungen nur, solange Tether offen ist oder gerade in den Hintergrund gewechselt ist (kein Push-Dienst). Die iOS-App ist noch nicht im App Store: Baue sie mit Xcode aus `tether/ios`. „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.
|
|
171
|
+
- 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.
|
|
172
|
+
- **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.
|
|
173
|
+
- **Eingereihte Nachricht direkt bearbeiten** öffnet den eigenen Warteschlangen-Editor von dsh und hat daher dessen Grenzen: Eine Nachricht mit Bildern oder Dateien lässt sich nicht bearbeiten, und eine Nachricht, deren Senden inzwischen begonnen hat, wird nicht geändert (dsh zeigt seinen eigenen Fehler).
|
|
174
|
+
- **Wiederholen** ändert nie den zurückgenommenen Chat: Es startet einen neuen Chat ab dem Moment direkt vor dem Zurücknehmen (die eigene Abzweigung von dsh, derselbe Kontext des Modells). Der neue Chat hat daher eine neue ID und einen neuen Titel. Nur das neueste Zurücknehmen eines Chats lässt sich wiederholen, einmal, und nur solange danach nichts kam (eine neue Nachricht beendet das Angebot). Eine Datei, die du nach dem Zurücknehmen geändert hast, bleibt erhalten, außer du setzt das Häkchen, das sie überschreibt. Wiederholen braucht den Snapshot, den das Zurücknehmen behalten hat (dasselbe Fenster von 50 Einträgen). Ein Zurücknehmen vor dieser Version oder mit **Nur Chat** holt nur die Nachrichten zurück.
|
|
175
|
+
- **Dieser Chat** zählt nur Dateien, die die Datei-Tools von dsh (`write`, `edit`, `str_replace_editor`) geschrieben haben. Dateien, die ein Befehl (`bash`) geändert hat, sind nicht in dieser Ansicht. Sie erscheinen unter **Nicht committet**. Ohne Snapshot von Runde zurücknehmen für den Chat (Runde zurücknehmen aus, dsh-rewind-plugin installiert oder ein Chat, der älter als das Plugin ist) vergleicht die Ansicht mit dem letzten Commit und sagt das. Runde zurücknehmen behält die 50 neuesten Snapshots eines Chats: In einem längeren Chat vergleicht die Ansicht mit dem ältesten behaltenen, nennt die Nachricht und zählt frühere Änderungen nicht. **Leerraum-Änderungen ausblenden** ist `git diff -w`: Auch eine Zeile, die sich nur in Leerzeichen in ihrem Inneren geändert hat, wird ausgeblendet.
|
|
167
176
|
- Eine Benachrichtigung, die vor einem Neustart gesendet wurde, holt dsh beim Klicken nur in den Vordergrund.
|
|
168
177
|
- 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.
|
|
169
178
|
- dsh hat keinen Erweiterungspunkt im Menü der Ansichtsoptionen der Seitenleiste. Deshalb kommt die Option für aktuelle Projekte in das eigene Menü von dsh. Wenn ein dsh-Update dieses Menü ändert, erscheint die Option nicht, und alle Projekte bleiben sichtbar. Der Filter wirkt auf Projektzeilen, daher wird **In einer Liste** nicht gefiltert. Nutze ihn mit **Arbeitsbereich**: In **Arbeitsbereichsbaum** blendet ein ausgeblendeter übergeordneter Ordner auch die aktiven Projekte darin aus. **Nach Status** hat dieselbe Art von Grenze: dsh hat keinen Platz für eine Sortierung. Deshalb hängen sich der Eintrag und die Zeilenreihenfolge an das Menü- und Listen-Markup von dsh.
|
|
@@ -200,7 +209,21 @@ Getestet mit dsh `0.2.0-rc.2` (Desktop und Web) und `0.2.1-rc.2` (Web). Die CI f
|
|
|
200
209
|
|
|
201
210
|
**Wie ordne ich eingereihte Nachrichten in dsh neu?** Ziehe den Griff ⠿ an einer eingereihten Nachricht, oder setze den Fokus darauf und drücke `↑` / `↓`.
|
|
202
211
|
|
|
203
|
-
**Wie
|
|
212
|
+
**Wie korrigiere ich einen Tippfehler in einer eingereihten Nachricht?** Doppelklicke auf die Nachricht in der Warteschlange, ändere den Text und drücke `Enter` (`Esc` bricht ab). Sie behält ihren Platz in der Warteschlange.
|
|
213
|
+
|
|
214
|
+
**Wie entferne ich alle Ungelesen-Punkte eines Projekts auf einmal?** Seitenleiste → Schaltfläche **…** des Projekts → **Alle als gelesen markieren**.
|
|
215
|
+
|
|
216
|
+
**Kann ich auf eine einzelne Nachricht in einem langen Chat verlinken?** Ja: Fahre mit der Maus über die Nachricht und klicke auf **🔗**. Sende den Link in einem Chat: Ab dsh 0.2.1 öffnet ein Klick darauf den Chat an dieser Nachricht.
|
|
217
|
+
|
|
218
|
+
**Ich habe eine Runde aus Versehen zurückgenommen. Bekomme ich sie zurück?** Ja, mit **Wiederholen** über dem Eingabefeld, direkt nach dem Zurücknehmen: Es startet einen neuen Chat ab dem Moment direkt vor dem Zurücknehmen, mit denselben Nachrichten. Mit **Chat und Dateien** holt es auch die Dateien zurück.
|
|
219
|
+
|
|
220
|
+
**Wie sehe ich nur die Dateien, die ein Chat geändert hat?** Rechte Seitenleiste → **Änderungen** → **Dieser Chat**. Klicke auf **␣**, um Änderungen auszublenden, die nur Leerraum sind.
|
|
221
|
+
|
|
222
|
+
**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**.
|
|
223
|
+
|
|
224
|
+
**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.
|
|
225
|
+
|
|
226
|
+
**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).
|
|
204
227
|
|
|
205
228
|
**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.
|
|
206
229
|
|
package/README.es.md
CHANGED
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Después, reinicia dsh. (La CLI no puede instalar en el perfil de escritorio: de eso se encarga la app).
|
|
31
31
|
|
|
32
|
-
> El pnpm de dsh omite las versiones publicadas hace menos de 24 horas. Justo después de una versión nueva, añade la versión: `dsh-composer-plus@1.
|
|
32
|
+
> El pnpm de dsh omite las versiones publicadas hace menos de 24 horas. Justo después de una versión nueva, añade la versión: `dsh-composer-plus@1.13.0`.
|
|
33
33
|
|
|
34
34
|
## Funciones
|
|
35
35
|
|
|
@@ -37,10 +37,10 @@ Después, reinicia dsh. (La CLI no puede instalar en el perfil de escritorio: de
|
|
|
37
37
|
|
|
38
38
|
| Función | Cómo usarla | Captura |
|
|
39
39
|
|---|---|---|
|
|
40
|
-
| **Panel de cambios** | <a id="feature-changespanel"></a>Barra lateral derecha → `+` → **Cambios**. Elige **Sin confirmar**, **Sin preparar**, **Preparados** o **Rama** para ver los archivos cambiados con sus contadores `+/-`; haz clic en un archivo para ver su diff. **Último turno** abre la revisión propia de dsh del último turno. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Captura: Panel de cambios"></a> |
|
|
40
|
+
| **Panel de cambios** | <a id="feature-changespanel"></a>Barra lateral derecha → `+` → **Cambios**. Elige **Sin confirmar**, **Sin preparar**, **Preparados** o **Rama** para ver los archivos cambiados con sus contadores `+/-`; haz clic en un archivo para ver su diff. **Último turno** abre la revisión propia de dsh del último turno. Haz clic en el nombre de la rama (o elige **Árbol**) para ver el árbol de ramas: haz clic en una rama de arriba para ir a ella y en un commit para ver sus archivos y sus diffs. **Este chat** muestra solo los archivos que escribieron las herramientas de archivos del chat abierto (write, edit), en todos sus turnos, y su diff total desde su primer mensaje. El botón **␣** oculta los cambios de espacios en blanco (`git diff -w`): no se muestran las líneas que solo cambiaron en la sangría o en los finales de línea. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Captura: Panel de cambios"></a> |
|
|
41
41
|
| **Ideas de funciones** | <a id="feature-featureideas"></a>Barra lateral derecha → `+` → **Ideas de funciones** → **Sugerir funciones**. El modelo del propio chat lee un breve resumen del proyecto del chat (los archivos del nivel superior, el principio del README y del manifiesto, los últimos 15 commits) y sugiere hasta 8 funciones. Las muestra como un montón de tarjetas en el idioma de la interfaz de dsh. Desliza una tarjeta hacia la derecha (o haz clic en **✓**, o pulsa `→`; en todos los casos la tarjeta sale volando hacia su lado) para iniciar un nuevo chat en el mismo proyecto: empieza en modo plan con la idea como petición, así que nada cambia antes de que apruebes el plan. Para saltarte el plan, haz clic en **▶ Crear ahora** (o pulsa `↑`; la tarjeta sale volando hacia arriba): el nuevo chat empieza enseguida con la idea como una petición normal, y el modelo hace el cambio y ejecuta sus comprobaciones (las aprobaciones se aplican como siempre). Desliza hacia la izquierda (o **✕**, o `←`) para omitirla; **Deshacer** (o `Z`) recupera una tarjeta omitida. Haz clic en **↓** (o pulsa `↓`) para guardar una buena idea para más tarde: va a la lista **Después** del proyecto, que aparece en todos los chats de la misma carpeta de proyecto (también tras un reinicio). **Después (N)** abre la lista; **Planificar** inicia el mismo chat en modo plan para la idea y **Crear ahora**, el chat sin plan; los dos la quitan de la lista. **Planificar todo (N)** inicia un solo chat en modo plan para todas las ideas de la lista, así que las partes comunes se planifican una sola vez. **Quitar de la lista** la elimina. **Copiar como lista de tareas** copia toda la lista al portapapeles como una lista de tareas de Markdown (`- [ ] Title — Summary`, una línea por idea) para un gestor de incidencias o un archivo TODO; no hace ninguna llamada de red. **Más ideas** añade tarjetas. Para recibir ideas sobre un solo tema, escribe un **Tema de enfoque** corto en el campo junto a **Sugerir funciones** (como máximo 80 caracteres; `Enter` también pide sugerencias), o haz clic en uno de los temas fijos que hay debajo: **Rendimiento**, **Accesibilidad**, **Pruebas**, **Seguridad**, **Usabilidad** o **Documentación** (haz clic otra vez para quitarlo). Entonces el modelo solo sugiere funciones sobre ese tema; un campo vacío significa cualquier función. Las ideas no se sugieren dos veces en un proyecto: cada idea sugerida (omitida, guardada o iniciada) va al **Historial** del proyecto, se le indica al modelo que no vuelva a sugerirlas y se descarta un título repetido. **Historial** las muestra como **Iniciada** o **Sugerida**; **Olvidar** (u **Olvidar todo**) deja que una vuelva a aparecer; una idea que sigue en la lista **Después** queda fuera de las sugerencias hasta que la quitas de allí. El modelo solo se ejecuta cuando haces clic. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Captura: Ideas de funciones"></a> |
|
|
42
42
|
| **Búsqueda en el contenido** | <a id="feature-contentsearch"></a>La búsqueda propia de la barra lateral de dsh (la lupa junto a **Espacios de trabajo**; `Cmd+K` en la app de escritorio, `Cmd+Alt+K` en un navegador) también encuentra chats por las palabras de tus mensajes y de las respuestas, no solo por el título, y muestra el texto que coincide debajo del chat. dsh ya incluye esta búsqueda, pero viene desactivada; esta función la activa con un archivo de índice de búsqueda en tu equipo. El índice se crea en la primera búsqueda después de iniciar dsh (unos 15 s para 250 chats, consulta Límites) y se conserva para los siguientes inicios. Activada de forma predeterminada; un cambio se aplica después de reiniciar dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Captura: Búsqueda en el contenido"></a> |
|
|
43
|
-
| **Revertir turno** | <a id="feature-turnrollback"></a>Pasa el puntero por encima de uno de tus mensajes y haz clic en **↶** (junto a Copiar). **Solo el chat** quita ese mensaje y todo lo que viene después (respuestas, llamadas a herramientas) del chat y del contexto del modelo, y vuelve a poner el mensaje en el editor: cámbialo y envíalo de nuevo. **Chat y archivos** primero muestra los archivos del proyecto que cambiaron desde ese mensaje y después también los devuelve a su estado anterior, incluidos los cambios hechos por comandos (`bash`), no solo por las herramientas de edición de dsh. Si hay un turno en ejecución, primero se detiene. El registro del chat nunca se reescribe: un marcador oculto esconde la parte retirada, igual que el propio `/compact` de dsh esconde los mensajes antiguos. Si [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) está instalado, ese plugin hace este trabajo y Composer Plus no muestra un segundo botón. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Captura: Revertir turno"></a> |
|
|
43
|
+
| **Revertir turno** | <a id="feature-turnrollback"></a>Pasa el puntero por encima de uno de tus mensajes y haz clic en **↶** (junto a Copiar). **Solo el chat** quita ese mensaje y todo lo que viene después (respuestas, llamadas a herramientas) del chat y del contexto del modelo, y vuelve a poner el mensaje en el editor: cámbialo y envíalo de nuevo. **Chat y archivos** primero muestra los archivos del proyecto que cambiaron desde ese mensaje y después también los devuelve a su estado anterior, incluidos los cambios hechos por comandos (`bash`), no solo por las herramientas de edición de dsh. Si hay un turno en ejecución, primero se detiene. El registro del chat nunca se reescribe: un marcador oculto esconde la parte retirada, igual que el propio `/compact` de dsh esconde los mensajes antiguos. Si [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) está instalado, ese plugin hace este trabajo y Composer Plus no muestra un segundo botón. Después de revertir, aparece una barra **Rehacer** encima del editor: inicia un chat nuevo desde justo antes de revertir (los mismos mensajes y el mismo contexto) y, con **Chat y archivos**, devuelve también los archivos. Un archivo que cambiaste después de revertir aparece en la lista y se conserva, salvo que marques la casilla que lo sobrescribe. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Captura: Revertir turno"></a> |
|
|
44
44
|
| **Eliminar chat** | <a id="feature-deletechat"></a>Barra lateral → menú **…** de un chat (o clic derecho) → **Eliminar…** → **Eliminar**. dsh por sí solo solo puede archivar. El chat se detiene (su turno, sus trabajos en segundo plano, sus subagentes y sus recordatorios, igual que con el archivado propio de dsh) y su historial guardado, con los chats de sus subagentes, se mueve a la Papelera de macOS (en otros sistemas: `$DSH_HOME/trash`). Para recuperarlo, devuelve la carpeta a su sitio y reinicia dsh: aparece en la vista **Solo archivadas** de la barra lateral. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Captura: Eliminar chat"></a> |
|
|
45
45
|
| **Nombre del proyecto en el compositor** | <a id="feature-projectname"></a>La fila que hay debajo del editor (turnos, tokens, aciertos de caché, contexto) empieza con el nombre del proyecto del chat, así que siempre ves en qué proyecto trabaja un chat. Es el título del proyecto en dsh, o el nombre de la carpeta si el proyecto no tiene título. Pasa el puntero por encima para ver la ruta completa de la carpeta. Haz clic en él para encontrar el chat en la barra lateral, en la vista de lista o de proyectos: la barra lateral y el proyecto se abren (también un proyecto contraído y su **Mostrar N sesiones más**), la lista se desplaza hasta el chat y el chat parpadea durante 5 segundos. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Captura: Nombre del proyecto en el compositor"></a> |
|
|
46
46
|
| **Historial de entrada** | <a id="feature-inputhistory"></a>Con el editor vacío, pulsa `↑` / `↓` para recorrer los mensajes que enviaste, como en una terminal. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Captura: Historial de entrada"></a> |
|
|
@@ -49,22 +49,25 @@ Después, reinicia dsh. (La CLI no puede instalar en el perfil de escritorio: de
|
|
|
49
49
|
| **Continuar con un clic** | <a id="feature-continuebutton"></a>Después de un turno detenido, fallido o cortado, el editor vacío muestra **▶**. Un clic reanuda la conversación existente sin escribir en el campo de entrada ni añadir un mensaje visible al chat (el modelo recibe una breve nota oculta de “continúa desde donde te detuviste”, porque algunos proveedores, como Claude, rechazan una petición que termina con una respuesta del asistente). Los mensajes de la cola se quedan en ella: ▶ continúa solo la tarea detenida y después se ejecuta la cola. Un turno completado mantiene el botón normal de enviar. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Captura: Continuar con un clic"></a> |
|
|
50
50
|
| **Reanudar tras reiniciar** | <a id="feature-resumeafterrestart"></a>Desactivada de forma predeterminada: actívala en **Configuración → Composer Plus**. Si sales de dsh (o se cierra) mientras un chat está trabajando, ese chat continúa solo cuando vuelves a abrir dsh, con la misma nota oculta que Continuar con un clic. Si había una ronda de un objetivo (`/goal`) en ejecución, el objetivo sigue con su siguiente ronda (dsh pausa los objetivos en cada inicio hasta que los reanudas). Los chats que detuviste, que terminaron o que fallaron no continúan. dsh no tiene ningún ajuste para esto: solo marca ese turno como interrumpido. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Captura: Reanudar tras reiniciar"></a> |
|
|
51
51
|
| **Arrastrar y soltar en la cola** | <a id="feature-queuereorder"></a>Los mensajes en cola tienen un asa (⠿). Arrástrala para reordenar, o pon el foco en el asa y pulsa `↑` / `↓`. `Esc` cancela. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Captura: Arrastrar y soltar en la cola"></a> |
|
|
52
|
+
| **Editar el mensaje en cola en su sitio** | <a id="feature-queueedit"></a>Haz doble clic en un mensaje en cola. Se convierte en el propio cuadro de edición de dsh: cambia el texto y pulsa `Enter` para guardar o `Esc` para cancelar. El mensaje conserva su lugar en la cola. Los mensajes con imágenes o archivos no se pueden editar así (la cola de dsh solo edita texto). | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="Captura: Editar el mensaje en cola en su sitio"></a> |
|
|
52
53
|
| **Copiar enlace de sesión** | <a id="feature-copydeeplink"></a>Haz clic derecho en un chat de la barra lateral → **Copiar enlace de sesión**. Pega el enlace `dsh-session:…` en otro chat para adjuntar ese chat como contexto de solo lectura. dsh 0.2.1 tiene su propia opción **Copiar ID de sesión**, que copia solo el id; esta opción aparece justo después. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Captura: Copiar enlace de sesión"></a> |
|
|
54
|
+
| **Copiar enlace del mensaje** | <a id="feature-copymessagelink"></a>Pasa el puntero por encima de un mensaje y haz clic en **🔗** (en su fila de acciones; en una respuesta, junto a la hora). El enlace es el enlace de sesión más el número del mensaje: `dsh-session:…#42`. Pégalo en un mensaje y envíalo: en dsh 0.2.1 y versiones posteriores, el enlace aparece como un chip. Un clic abre ese chat, se desplaza hasta el mensaje y lo resalta durante 2 segundos. Como un enlace de sesión, también adjunta ese chat como contexto de solo lectura. | <a href="assets/features/copyMessageLink.webp"><img src="assets/features/copyMessageLink.webp" width="160" alt="Captura: Copiar enlace del mensaje"></a> |
|
|
53
55
|
| **Exportar chat como Markdown** | <a id="feature-exportmarkdown"></a>Haz clic derecho en un chat de la barra lateral (o abre su menú **…**) → **Exportar como Markdown…**. Un diálogo muestra cuántos mensajes tiene el chat. **Copiar al portapapeles** copia el chat como Markdown y **Guardar archivo .md** lo guarda como `<chat title>.md` mediante la descarga del navegador (en la app de escritorio de dsh: en tu carpeta Descargas o con un diálogo para guardar, según la configuración de tu sistema). El archivo tiene el título del chat, el nombre del proyecto y la fecha, y después una sección `## Tú` o `## Asistente` por cada mensaje. Los bloques de código quedan como están; un bloque de código que un mensaje deja abierto se cierra. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Captura: Exportar chat como Markdown"></a> |
|
|
54
56
|
| **Copiar ruta del proyecto** | <a id="feature-copyprojectpath"></a>Haz clic derecho en un proyecto de la barra lateral → **Copiar ruta** copia la ruta completa de su carpeta. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Captura: Copiar ruta del proyecto"></a> |
|
|
55
57
|
| **Búsqueda de proyectos en un chat nuevo** | <a id="feature-projectpicker"></a>Chat nuevo → el botón de proyecto encima del editor. Los proyectos aparecen en orden A–Z, con un cuadro **Buscar proyectos** arriba. Escribe parte de un nombre (sin distinguir mayúsculas ni acentos) y pulsa `Enter` para elegir la primera coincidencia. Si nada coincide, aparece **Ningún proyecto coincide**. El orden de proyectos guardado de dsh en la barra lateral no cambia. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Captura: Búsqueda de proyectos en un chat nuevo"></a> |
|
|
56
58
|
| **Predicción del siguiente mensaje** | <a id="feature-nextprediction"></a>Activada de forma predeterminada; puedes desactivarla en **Configuración → Composer Plus**. Cuando el agente termina un turno (no uno detenido o fallido), el editor vacío muestra en gris una predicción de tu siguiente mensaje, con la indicación **Tab para aceptar**. `Tab` pone el texto en el editor, pero no lo envía. `Esc` la oculta durante ese turno. Si empiezas a escribir, también se oculta, y un turno nuevo la sustituye. El menú **Modelo** bajo el interruptor muestra los modelos propios de dsh (la misma lista que el menú de modelos de dsh). **Predeterminado de dsh** está seleccionado de forma predeterminada y sigue el modelo predeterminado de dsh. Cada turno terminado cuesta una llamada breve al modelo. En Tether, la predicción aparece encima del editor vacío: tócala para ponerla en el campo. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Captura: Predicción del siguiente mensaje"></a> |
|
|
57
59
|
| **Completar al escribir** | <a id="feature-typingcompletion"></a>Desactivado de forma predeterminada; puedes activarlo en **Configuración → Composer Plus**. Mientras escribes, un texto gris justo después del cursor muestra cómo puede seguir tu mensaje. `Tab` lo añade al mensaje, pero no lo envía. `Esc` lo oculta. Solo sugiere tus propias palabras siguientes: nunca una respuesta para ti, ni textos de error o nombres inventados. Si el mensaje parece completo o el modelo no está seguro, no aparece nada. Si escribes las letras siguientes del texto gris, este se mantiene, sin una nueva llamada al modelo. Tiene su propio menú **Modelo** bajo su interruptor. Su primera opción, **Igual que la predicción del siguiente mensaje**, usa el modelo de **Predicción del siguiente mensaje** (es la opción predeterminada); elige otro modelo para usar uno distinto en cada función, por ejemplo un modelo más rápido para las compleciones. Hace una llamada al modelo en cada pausa mientras escribes, así que gasta muchos más tokens que la predicción: elige un modelo rápido y de bajo coste. No se ejecuta con un comando de barra, con un mensaje que tenga un chip de archivo ni cuando el cursor no está al final. En Tether, el resto aparece encima del campo mientras escribes: tócalo para añadirlo. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Captura: Completar al escribir"></a> |
|
|
58
60
|
| **Mejorar prompt** | <a id="feature-promptimprove"></a>Escribe una petición aproximada y luego haz clic en la varita mágica (**Mejorar prompt**) junto al menú de modelos. Una llamada al modelo la reescribe como un prompt más claro: primero el objetivo, pasos numerados cortos cuando hay varias partes y la comprobación que hay que ejecutar. Lee este chat (sin los mensajes revertidos), el README, AGENTS.md y el manifiesto del proyecto, los archivos modificados y los archivos cuyo nombre coincide con tus palabras, y mantiene tu idioma. Nunca inventa nombres de archivo. El texto nuevo sustituye tu borrador, pero no se envía: léelo, edítalo y luego pulsa `Enter`. `Cmd/Ctrl+Z` recupera tu texto en un solo paso, y el botón (**Deshacer mejora**) también. Si escribes mientras trabaja, tu texto nuevo se mantiene. `Esc` o un segundo clic lo cancela. Tiene su propio menú **Modelo** en Configuración (predeterminado: **Igual que el modelo del chat**). No funciona con comandos de barra ni con un mensaje que tenga un chip de archivo. En Tether, la varita está junto al campo. | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="Captura: Mejorar prompt"></a> |
|
|
59
|
-
| **Permitir en este chat** | <a id="feature-allowforchat"></a>Cuando la revisión automática te pregunta, la tarjeta de aprobación muestra **Permitir en este chat**: a partir de entonces, la misma herramienta en el mismo chat queda permitida, con cualquier argumento. Un chip en la cabecera muestra los permisos concedidos y permite revocarlos. Los permisos se mantienen tras un reinicio. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Captura: Permitir en este chat"></a> |
|
|
61
|
+
| **Permitir en este chat** | <a id="feature-allowforchat"></a>Cuando la revisión automática te pregunta, la tarjeta de aprobación muestra **Permitir en este chat**: a partir de entonces, la misma herramienta en el mismo chat queda permitida, con cualquier argumento, hasta que termina el límite de tiempo (1 hora por defecto; elígelo en **Configuración → Composer Plus → Permitir en este chat**). Después, el agente vuelve a preguntar. Un chip en la cabecera muestra los permisos concedidos con su hora de fin y permite revocarlos. Los permisos se mantienen tras un reinicio. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Captura: Permitir en este chat"></a> |
|
|
60
62
|
| **Estado del proyecto** | <a id="feature-projectstatus"></a>La fila de un proyecto en la barra lateral muestra el mismo indicador de en ejecución / en espera / terminado que sus chats, así que un proyecto contraído también te dice que un chat de dentro está trabajando o te necesita. Primero se muestra un chat que te espera, luego un chat terminado que aún no has abierto (el punto verde, también mientras otro chat sigue en ejecución) y luego el indicador de en ejecución. Pasa el puntero por encima para ver los detalles. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Captura: Estado del proyecto"></a> |
|
|
63
|
+
| **Marcar todo como leído** | <a id="feature-markprojectread"></a>En la barra lateral, haz clic en el botón **…** de un proyecto → **Marcar todo como leído**. Todos los chats de ese proyecto pierden su punto verde de no leído a la vez; los demás proyectos conservan los suyos. La opción aparece en gris (**No hay chats sin leer**) cuando el proyecto no tiene ninguno. | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="Captura: Marcar todo como leído"></a> |
|
|
61
64
|
| **Proyectos activos primero** | <a id="feature-activeprojectsfirst"></a>Cuando un chat empieza a ejecutarse o te necesita, su proyecto sube al principio de la barra lateral con la animación de filas propia de dsh (el mismo movimiento que al arrastrarlo allí). Los proyectos terminados se quedan donde están; arrástralos a donde quieras, como siempre. Los movimientos se guardan en el orden de proyectos de dsh, así que al desactivar esta función se mantiene el orden actual. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Captura: Proyectos activos primero"></a> |
|
|
62
65
|
| **Filtro de proyectos recientes** | <a id="feature-recentprojects"></a>Barra lateral → opciones de vista (icono de controles deslizantes) → **Activos en las últimas 2 horas**. Mientras está seleccionado, la barra lateral solo muestra los proyectos con un chat activo en las últimas 2 horas: un chat actualizado en ese tiempo, un chat en ejecución o en espera, el chat abierto o un chat terminado que aún no has abierto (el punto verde de “terminado” de dsh), también después de las 2 horas. Los proyectos sin un chat así se ocultan, también los nuevos y vacíos. Selecciónalo otra vez para mostrar todos los proyectos. La elección se guarda en este dispositivo. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Captura: Filtro de proyectos recientes"></a> |
|
|
63
66
|
| **Contraer todos los proyectos** | <a id="feature-collapseprojects"></a>Mientras hay un proyecto abierto en la barra lateral, aparece un botón junto a las opciones de vista (icono de controles deslizantes). Haz clic en él para cerrar a la vez todos los proyectos abiertos, por ejemplo 3 proyectos abiertos de 5. El botón se oculta de nuevo cuando no hay ningún proyecto abierto. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Captura: Contraer todos los proyectos"></a> |
|
|
64
67
|
| **Ordenar por estado** | <a id="feature-statusorder"></a>Barra lateral → opciones de vista → **Ordenar por** → **Por estado** (con **En una sola lista**). Primero aparecen los chats terminados (el punto de “terminado” de dsh, que también recibe un turno que acabó con un error), luego los chats en ejecución o en espera, luego los chats con una automatización activa (Tareas automatizadas) y, por último, el resto en el orden de dsh. Al abrir un chat terminado, este baja. Solo cambia la vista: selecciona **Manual** o **Última actualización** para volver. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Captura: Ordenar por estado"></a> |
|
|
65
68
|
| **Notificaciones en segundo plano** | <a id="feature-notifications"></a>Mientras dsh está en segundo plano, recibes una notificación cuando un turno termina (la primera línea de la respuesta) o cuando un chat de verdad te espera: una aprobación (el nombre de la herramienta), una respuesta (la pregunta) o la revisión de un plan. Una solicitud tiene que seguir abierta 1,5 s después, así que las aprobaciones que se responden automáticamente (permisos de la revisión automática, otros plugins) no generan ningún aviso, y una notificación se retira en cuanto se responde su solicitud. La insignia del Dock o de la barra de tareas cuenta los chats en espera. Al hacer clic se abre ese chat. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Captura: Notificaciones en segundo plano"></a> |
|
|
66
69
|
| **Idioma de la aplicación** | <a id="feature-language"></a>Configuración → Composer Plus → **Idioma de la aplicación** cambia toda la interfaz de dsh a Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt o हिन्दी (consulta más abajo). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Captura: Idioma de la aplicación"></a> |
|
|
67
|
-
| **Conexión móvil (iPhone)** | <a id="feature-mobileconnect"></a>Usa dsh desde tu iPhone con la app [Tether](tether/), en la misma red Wi-Fi o a través de [Tailscale](https://tailscale.com). Actívala en **Configuración → Composer Plus** (está desactivada de forma predeterminada, porque abre un puerto de red en este Mac). Después haz clic en **Conexión móvil**, abajo a la izquierda de la barra lateral: escanea el código QR con la Cámara del iPhone (toca **Open in Tether**) o con **Scan code** en Tether, toca **Connect** y haz clic en **Approve**. Primero instala Tether: sin la app, la Cámara no puede abrir el código. El teléfono muestra tus chats, envía mensajes, responde aprobaciones y preguntas, y cambia de modelo y de agente. Empareja todos los Mac que quieras: el nombre del Mac, arriba a la izquierda en la app, te permite cambiar entre ellos. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Captura: Conexión móvil (iPhone)"></a> |
|
|
70
|
+
| **Conexión móvil (iPhone)** | <a id="feature-mobileconnect"></a>Usa dsh desde tu iPhone con la app [Tether](tether/), en la misma red Wi-Fi o a través de [Tailscale](https://tailscale.com). Actívala en **Configuración → Composer Plus** (está desactivada de forma predeterminada, porque abre un puerto de red en este Mac). Después haz clic en **Conexión móvil**, abajo a la izquierda de la barra lateral: escanea el código QR con la Cámara del iPhone (toca **Open in Tether**) o con **Scan code** en Tether, toca **Connect** y haz clic en **Approve**. Primero instala Tether: sin la app, la Cámara no puede abrir el código. El teléfono muestra tus chats, envía mensajes, responde aprobaciones y preguntas, y cambia de modelo y de agente. Empareja todos los Mac que quieras: el nombre del Mac, arriba a la izquierda en la app, te permite cambiar entre ellos. El panel **Conexión móvil** muestra los iPhone emparejados con su última conexión: **Remove** desconecta uno al instante. “Tailscale only” rechaza la red local (para una red Wi-Fi compartida), y el registro de accesos muestra quién intentó conectarse. En Tether, “Settings → Privacy” bloquea la app con Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Captura: Conexión móvil (iPhone)"></a> |
|
|
68
71
|
| **Actualizaciones automáticas** | <a id="feature-autoupdate"></a>Al iniciar dsh, el plugin consulta la [última versión publicada en GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Si es más reciente y ya está en npm, instala esa versión exacta con el gestor de plugins propio de dsh (el mismo camino que Configuración → Plugins) y te avisa. Reinicia dsh para cargarla. **Configuración → Composer Plus → Actualizaciones de Composer Plus** muestra la versión y tiene los botones **Buscar actualizaciones** / **Actualizar ahora**. La primera vez que dsh se inicia con la nueva versión, una ventana **Novedades de Composer Plus N** muestra una vez las notas de esa versión (de la misma comprobación de actualizaciones, sin otra llamada de red); **Cerrar** o `Esc` la cierra. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Captura: Actualizaciones automáticas"></a> |
|
|
69
72
|
|
|
70
73
|
<!-- END GENERATED FEATURES -->
|
|
@@ -119,15 +122,15 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
|
|
|
119
122
|
- **Continuar:** el endpoint local autenticado solo reanuda el último turno interrumpido, rechaza las peticiones obsoletas o duplicadas y mantiene los hooks de aprobación existentes. No envía un nuevo mensaje del usuario.
|
|
120
123
|
- **Reanudar tras reiniciar:** desactivada hasta que la actives. La parte Host solo guarda los ids de los chats y sus horas de inicio en `$DSH_HOME/storages/dsh-composer-plus/resume.json` (permisos solo para el propietario), y nada sale de tu equipo. Solo continúa un chat cuando el propio registro de dsh indica que fue dsh (no tú) quien detuvo su último turno. Las aprobaciones y la revisión automática se aplican al turno continuado como siempre.
|
|
121
124
|
|
|
122
|
-
- **Panel de cambios:** git se ejecuta en modo de solo lectura en tu equipo, en la carpeta del propio chat, a través del canal `/api` autenticado de dsh. Nunca hace commits, nunca prepara archivos ni ejecuta fetch, y solo muestra las rutas que el propio git listó.
|
|
125
|
+
- **Panel de cambios:** git se ejecuta en modo de solo lectura en tu equipo, en la carpeta del propio chat, a través del canal `/api` autenticado de dsh. Nunca hace commits, nunca prepara archivos ni ejecuta fetch, y solo muestra las rutas que el propio git listó. El árbol muestra los 300 commits más recientes de las ramas locales y remotas; nunca cambia de rama (checkout). En un repositorio muy grande sin archivo commit-graph, el árbol puede tardar unos segundos en abrirse. **Este chat** lee el registro propio del chat para saber qué archivos escribieron sus herramientas de archivos, y los compara con la instantánea de Revertir turno del chat en una carpeta temporal que se elimina al momento; no escribe nada en tu repositorio ni en el almacén de instantáneas.
|
|
123
126
|
- **Ideas de funciones:** no se ejecuta nada hasta que haces clic en **Sugerir funciones**. Entonces la parte Host lee solo la carpeta del propio chat (el navegador nunca envía una ruta): los nombres de las entradas del nivel superior, los primeros 6 kB del README, de AGENTS.md y del manifiesto (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …) y `git log --oneline -15`, con un máximo de 16 kB en total. Omite `.env*`, los archivos de claves y carpetas como `node_modules`, y solo lee archivos normales que estén dentro de la carpeta: omite los enlaces simbólicos que apuntan fuera de la carpeta, los FIFO y los dispositivos. Este resumen va al modelo que usa el chat, con los ajustes de proveedor propios de dsh, en una sola petición; no se añade a ningún chat. No se escribe nada en el proyecto. Una idea deslizada a la derecha inicia un nuevo chat en modo plan, así que las aprobaciones y la revisión del plan se aplican como siempre. **Crear ahora** inicia el chat sin modo plan: el modelo puede cambiar archivos enseguida, con las aprobaciones habituales del chat y la revisión automática. Las ideas guardadas para después (título, resumen, motivo, esfuerzo) se guardan junto con la ruta de la carpeta del proyecto en `storages/dsh-composer-plus/later.json`, dentro del directorio home de dsh (archivo solo para el propietario); nada va al proyecto. El historial de ideas sugeridas (título, resumen, motivo, esfuerzo, fecha, si se inició) se guarda de la misma forma en `storages/dsh-composer-plus/idea-history.json`, como máximo 200 por proyecto (las más antiguas salen primero); sus títulos van al modelo con el siguiente **Sugerir funciones** de ese proyecto.
|
|
124
127
|
- **Búsqueda en el contenido:** ningún código nuevo busca en tus chats: el plugin solo activa el índice de mensajes propio de dsh (SQLite FTS5, `dsh-session-query-sqlite`) y le da un archivo, `$DSH_HOME/cache/composer-plus/session-search.db` (archivo y carpeta solo para el propietario). El archivo contiene el texto de tus mensajes y de los del asistente, así que es tan privado como los registros de chat de `$DSH_HOME/sessions`. Nada sale de tu equipo. Es una copia que dsh puede volver a crear: puedes eliminarla mientras dsh está cerrado. El interruptor está en `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
|
|
125
|
-
- **Revertir turno:** antes de cada uno de tus mensajes, el Host toma una instantánea git de la carpeta del chat en su propio almacén, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (carpeta solo para el propietario). Contiene copias de los archivos de esa carpeta que git ve (no de los archivos ignorados), así que es tan privado como el proyecto. Lee los objetos de tu repositorio (no copia lo que git ya tiene) y nunca escribe en el índice, el `HEAD`, las ramas, las etiquetas, el stash ni la configuración de tu repositorio; el único cambio que git hace allí es una marca de tiempo más reciente en los archivos de objetos que reutiliza (esto retrasa su limpieza con `git gc`). Una reversión con archivos solo escribe archivos normales dentro de la carpeta del chat; omite los enlaces simbólicos, las tuberías y todo lo que esté fuera de la carpeta. Nada sale de tu equipo. Puedes eliminar el almacén mientras dsh está cerrado (entonces la reversión solo funciona para el chat, hasta que haya mensajes nuevos). **Eliminar chat** también elimina el almacén de ese chat. El interruptor está en `$DSH_HOME/storages/dsh-composer-plus/rollback.json`.
|
|
128
|
+
- **Revertir turno:** antes de cada uno de tus mensajes, el Host toma una instantánea git de la carpeta del chat en su propio almacén, `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (carpeta solo para el propietario). Contiene copias de los archivos de esa carpeta que git ve (no de los archivos ignorados), así que es tan privado como el proyecto. Lee los objetos de tu repositorio (no copia lo que git ya tiene) y nunca escribe en el índice, el `HEAD`, las ramas, las etiquetas, el stash ni la configuración de tu repositorio; el único cambio que git hace allí es una marca de tiempo más reciente en los archivos de objetos que reutiliza (esto retrasa su limpieza con `git gc`). Una reversión con archivos solo escribe archivos normales dentro de la carpeta del chat; omite los enlaces simbólicos, las tuberías y todo lo que esté fuera de la carpeta. Nada sale de tu equipo. Puedes eliminar el almacén mientras dsh está cerrado (entonces la reversión solo funciona para el chat, hasta que haya mensajes nuevos). **Eliminar chat** también elimina el almacén de ese chat. El interruptor está en `$DSH_HOME/storages/dsh-composer-plus/rollback.json`. Una reversión con archivos también guarda los archivos tal como estaban justo antes de ella (`refs/r/…` en el mismo almacén), para **Rehacer**; las reversiones rehechas se listan en `$DSH_HOME/storages/dsh-composer-plus/redone.json` (solo para el propietario).
|
|
126
129
|
- **Exportar chat como Markdown:** la parte Host lee solo el registro propio del chat (los mismos mensajes que muestra dsh) y se los pasa a la página; no lee ningún archivo del proyecto y no envía nada por la red. El Markdown va solo a tu portapapeles o al archivo que guardas.
|
|
127
130
|
- **Eliminar chat:** mueve a la Papelera las carpetas de registro propias del chat (`$DSH_HOME/sessions/<project>/<chat>`). No toca la carpeta del proyecto.
|
|
128
|
-
- **Permitir en este chat:** los permisos concedidos se guardan en `$DSH_HOME/storages/dsh-composer-plus/grants.json` (archivo con permisos solo para el propietario). Un permiso cubre una herramienta exacta en un chat. Si esa herramienta puede escribir, el permiso también cubre cualquier escritura. Revócalo desde el chip de la cabecera.
|
|
131
|
+
- **Permitir en este chat:** los permisos concedidos se guardan, con la hora en que se concedieron, en `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json` (archivo con permisos solo para el propietario). Un permiso cubre una herramienta exacta en un chat, hasta que termina el límite de tiempo (1 hora por defecto). Si esa herramienta puede escribir, el permiso también cubre cualquier escritura. Revócalo desde el chip de la cabecera.
|
|
129
132
|
- La revisión automática sigue ejecutándose en cada llamada; los fallos de la revisión nunca se permiten automáticamente.
|
|
130
|
-
- **Conexión móvil:** desactivada hasta que la actives. Mientras está activada, la parte Host ejecuta la pasarela de Tether: HTTPS en el puerto 19390, que solo acepta tu subred Wi-Fi y tu tailnet (100.64.0.0/10), y una página de emparejamiento en `127.0.0.1:19391` (solo este Mac). Un teléfono necesita un código de un solo uso del código QR (válido 5 minutos) y que hagas clic en **Approve** en el Mac. El teléfono fija el certificado de la pasarela. El Mac solo guarda un hash del token de cada teléfono (30 días, se renueva mientras se usa); **Remove** cierra de inmediato las conexiones de ese teléfono. Los teléfonos solo pueden llamar a una lista permitida de métodos de dsh (chats, prompts, adjuntos, comandos de barra, aprobaciones, preguntas, modelos, agentes, objetivos), no a la configuración, las credenciales, el explorador de archivos ni la terminal. Datos: `$DSH_HOME/storages/dsh-composer-plus/mobile
|
|
133
|
+
- **Conexión móvil:** desactivada hasta que la actives. Mientras está activada, la parte Host ejecuta la pasarela de Tether: HTTPS en el puerto 19390, que solo acepta tu subred Wi-Fi y tu tailnet (100.64.0.0/10), y una página de emparejamiento en `127.0.0.1:19391` (solo este Mac). Un teléfono necesita un código de un solo uso del código QR (válido 5 minutos) y que hagas clic en **Approve** en el Mac. El teléfono fija el certificado de la pasarela. El Mac solo guarda un hash del token de cada teléfono (30 días, se renueva mientras se usa); **Remove** cierra de inmediato las conexiones de ese teléfono. Los teléfonos solo pueden llamar a una lista permitida de métodos de dsh (chats, prompts, adjuntos, comandos de barra, aprobaciones, preguntas, modelos, agentes, objetivos), no a la configuración, las credenciales, el explorador de archivos ni la terminal. «Tailscale only» rechaza todas las conexiones desde la red local, también las que ya están abiertas. El registro de accesos guarda los 200 intentos de conexión más recientes (hora, dirección IP, nombre del dispositivo, permitido o rechazado, y el motivo) en `access.json`; nunca guarda un token ni un código de emparejamiento. Datos: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (archivos solo para el propietario). Detalles: [tether/README.md](tether/README.md).
|
|
131
134
|
- **Actualizaciones:** la parte Host pide a `api.github.com` la última versión publicada y a `registry.npmjs.org` esa versión exacta; no se envía nada sobre ti ni sobre tus chats. La instalación usa el gestor de plugins de dsh (`pnpm add dsh-composer-plus@<version>`; cuando dsh 0.2.1 lo rechaza para un plugin ya instalado, `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, y después el perfil indica esa URL como origen del plugin), así que se aplican las comprobaciones propias de dsh del registro, de los scripts y de la compatibilidad de versiones. Nunca se instalan etiquetas de prerelease ni versiones anteriores.
|
|
132
135
|
- **Predicción del siguiente mensaje:** activada de forma predeterminada; desactívala en **Configuración → Composer Plus** para detener estas llamadas al modelo. Después de cada turno terminado, la parte Host envía tus propios mensajes del chat y las respuestas de texto del agente (sin salida de herramientas, sin contexto oculto ni razonamiento), como máximo unos 6.000 caracteres (la parte más reciente), al modelo elegido (el predeterminado de dsh, salvo que elijas otro). Va con los ajustes de proveedor propios de dsh, en una sola petición. No se guarda nada en el chat: la predicción no se añade al historial del chat. El interruptor y el modelo elegido están en `$DSH_HOME/storages/dsh-composer-plus/predict.json` (archivo solo para el propietario).
|
|
133
136
|
- **Completar al escribir:** desactivado hasta que lo actives. Mientras está activado, en cada pausa mientras escribes, la parte Host envía el texto que llevas escrito y tus propios mensajes del chat y las respuestas de texto del agente (sin salida de herramientas, sin contexto oculto ni razonamiento), como máximo unos 3.000 caracteres del chat, al modelo elegido en **Completar al escribir** (de forma predeterminada, el modelo de **Predicción del siguiente mensaje**). Una pausa más reciente detiene la petición anterior. No se guarda nada en el chat. El interruptor está en `$DSH_HOME/storages/dsh-composer-plus/complete.json` (archivo solo para el propietario).
|
|
@@ -144,8 +147,9 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
|
|
|
144
147
|
- **No hay botón ↶ en mis mensajes:** Revertir turno está desactivado, el chat es un chat de subagente, o dsh-rewind-plugin está instalado (usa su botón ↶). Después de una actualización, reinicia dsh.
|
|
145
148
|
- **Chat y archivos aparece en gris:** el proyecto no es un repositorio git, no hay ninguna instantánea de antes de ese mensaje (el mensaje es anterior al plugin, o una de las 50 instantáneas más recientes la sustituyó), o no cambió ningún archivo.
|
|
146
149
|
- **Eliminar dice que otro dsh tiene abierto este chat:** un segundo dsh que usa el mismo directorio home de dsh tiene el bloqueo del chat. Cierra esa ventana o ese dsh y vuelve a eliminarlo. Mientras tanto, el chat sigue archivado.
|
|
150
|
+
- **Mi iPhone no puede conectarse después de activar «Tailscale only»:** Tailscale debe estar activado en el Mac y en el iPhone. El panel Conexión móvil avisa cuando está desactivado en el Mac. El registro de accesos muestra cada intento rechazado con su motivo.
|
|
147
151
|
- **Un chat no continuó tras un reinicio:** Reanudar tras reiniciar estaba desactivado cuando dsh se cerró, detuviste tú mismo ese turno, el turno ya había terminado (completado o fallido), el chat estaba archivado, o había más de 20 chats en ejecución (continúan los 20 más recientes).
|
|
148
|
-
- **La instalación falla justo después de una versión nueva:** añade la versión (`dsh-composer-plus@1.
|
|
152
|
+
- **La instalación falla justo después de una versión nueva:** añade la versión (`dsh-composer-plus@1.13.0`); consulta la nota de instalación de más arriba.
|
|
149
153
|
|
|
150
154
|
## Límites
|
|
151
155
|
|
|
@@ -161,9 +165,14 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
|
|
|
161
165
|
- **Eliminar chat** necesita el archivado de dsh (dsh 0.2.0 y posteriores). Un chat (o uno de los chats de sus subagentes) que no se detiene en 15 s, o que tiene abierto otro dsh, sigue archivado y no se mueve nada. En sistemas distintos de macOS, la carpeta de la papelera tiene que estar en el mismo disco que el historial de chats. Un chat abierto que eliminas se queda en la memoria de dsh, archivado y oculto, hasta que dsh se reinicia. Vacía tú la Papelera; dsh no lo hace.
|
|
162
166
|
- La cola de dsh no tiene una acción `move`, así que la parte Host del plugin mueve el propio mensaje dentro de la cola de dsh (un solo cambio, el mismo mensaje). Los mensajes con imágenes o archivos también se mueven. Solo se mueven tus propios mensajes: una ronda de un objetivo o una respuesta a una pregunta en la cola se queda donde está. Si un mensaje empieza a enviarse mientras arrastras, no se mueve nada y un aviso lo indica.
|
|
163
167
|
- dsh 0.2.1 carga una actualización de inmediato cuando la nueva versión no cambia ningún ajuste de dsh; en caso contrario, y en dsh 0.2.0, reinicia dsh para cargarla. El plugin nunca reinicia dsh por ti. Los perfiles web/CLI sin el gestor de plugins de dsh solo avisan de que hay una versión nueva.
|
|
168
|
+
- **Permitir en este chat** cuenta el límite de tiempo desde el momento en que se concede el permiso. Un nuevo límite de tiempo se aplica al instante a los permisos vigentes, así que uno más corto puede terminarlos al instante. Los permisos de la versión 1.12 y anteriores no tienen hora: después de la actualización, el agente vuelve a preguntar una vez por esas herramientas.
|
|
164
169
|
- **Mantener el foco en el editor** solo devuelve el foco después de un comando `/` o una skill. Mientras dsh resuelve el comando, el editor queda en solo lectura unos milisegundos, así que las teclas que pulses en ese tiempo se pierden. Si el menú `/` de dsh sigue abierto, `Enter` elige la fila resaltada y no envía.
|
|
165
|
-
- **Conexión móvil** solo funciona en macOS (usa `en0`, `openssl`, `swift` y `dns-sd`). Usa los puertos fijos 19390 y 19391, así que solo un dsh por Mac puede ejecutarla a la vez (cada Mac es una entrada en la lista de Mac del teléfono). El teléfono solo recibe notificaciones mientras Tether está abierta o acaba de pasar a segundo plano (no hay servicio push). La app de iOS aún no está en la App Store: compílala desde `tether/ios` con Xcode. Los puntos verdes de Tether siguen al Mac: un chat que abres en dsh también pierde su punto en el teléfono. Un chat que abres en Tether pierde su punto solo en los teléfonos. El punto propio de dsh en el Mac se queda hasta que abres el chat allí.
|
|
166
|
-
- Un enlace de sesión funciona dentro de los chats; hacer clic en él no abre el chat.
|
|
170
|
+
- **Conexión móvil** solo funciona en macOS (usa `en0`, `openssl`, `swift` y `dns-sd`). Usa los puertos fijos 19390 y 19391, así que solo un dsh por Mac puede ejecutarla a la vez (cada Mac es una entrada en la lista de Mac del teléfono). El teléfono solo recibe notificaciones mientras Tether está abierta o acaba de pasar a segundo plano (no hay servicio push). La app de iOS aún no está en la App Store: compílala desde `tether/ios` con Xcode. «Tailscale only» sigue necesitando una dirección Wi-Fi o Ethernet en el Mac (la pasarela solo se inicia con una). El registro de accesos es propio de cada Mac y solo guarda los 200 intentos más recientes; un intento repetido en menos de un minuto suma uno a la misma fila. El bloqueo de la app Tether no oculta las vistas previas de las notificaciones en la pantalla bloqueada del iPhone: desactívalas en Ajustes de iOS. Los puntos verdes de Tether siguen al Mac: un chat que abres en dsh también pierde su punto en el teléfono. Un chat que abres en Tether pierde su punto solo en los teléfonos. El punto propio de dsh en el Mac se queda hasta que abres el chat allí.
|
|
171
|
+
- Un enlace de sesión funciona dentro de los chats; hacer clic en él no abre el chat. Un enlace creado con **Copiar enlace del mensaje** abre su mensaje solo en dsh 0.2.1 y posteriores, y solo desde un mensaje de un chat (dsh 0.2.0 no tiene reglas de texto de usuario, así que allí el enlace se copia, pero se muestra como texto normal). Un mensaje que una reversión quitó, o que la compactación eliminó del historial que carga dsh, no se puede mostrar: el enlace lo indica. Los botones 🔗 se enganchan a las filas de mensajes de dsh; si una actualización de dsh cambia ese marcado, no aparecen.
|
|
172
|
+
- **Marcar todo como leído** cambia los puntos de no leído propios de dsh mediante una parte de dsh que no es una API pública (la lista `completionUnread` del estado de sesión de dsh). Si una actualización de dsh le cambia el nombre, el elemento no aparece. El elemento va en el menú «…» del proyecto de dsh, que no tiene un espacio para plugins; si dsh cambia ese menú, el elemento tampoco aparece.
|
|
173
|
+
- **Editar el mensaje en cola en su sitio** abre el editor de cola propio de dsh, así que tiene sus límites: un mensaje con imágenes o archivos no se puede editar, y un mensaje que empezó a enviarse mientras tanto no cambia (dsh muestra su propio error).
|
|
174
|
+
- **Rehacer** nunca cambia el chat revertido: inicia un chat nuevo desde justo antes de la reversión (la bifurcación propia de dsh, el mismo contexto del modelo), así que el chat nuevo tiene otro id y otro título. Solo se puede rehacer la reversión más reciente de un chat, una vez, y solo mientras no haya nada después (un mensaje nuevo quita la opción). Un archivo que cambiaste después de la reversión se conserva, salvo que marques la casilla que lo sobrescribe. Rehacer necesita la instantánea que guardó la reversión (la misma ventana de 50 entradas); una reversión hecha antes de esta versión, o con **Solo el chat**, solo recupera los mensajes.
|
|
175
|
+
- **Este chat** solo cuenta los archivos que escribieron las herramientas de archivos de dsh (`write`, `edit`, `str_replace_editor`). Los archivos que cambió un comando (`bash`) no están en esta vista; aparecen en **Sin confirmar**. Sin una instantánea de Revertir turno del chat (Revertir turno desactivado, dsh-rewind-plugin instalado o un chat anterior al plugin), la vista compara con el último commit y lo indica. Revertir turno guarda las 50 instantáneas más recientes de un chat: en un chat más largo, la vista compara con la más antigua que se guardó, indica desde qué mensaje y no cuenta los cambios anteriores. **Ocultar cambios de espacios en blanco** es `git diff -w`: también se oculta una línea que solo cambió en los espacios de su interior.
|
|
167
176
|
- Al hacer clic en una notificación enviada antes de un reinicio, solo se trae dsh al frente.
|
|
168
177
|
- Los proyectos activos se mueven con el orden de proyectos guardado de dsh, así que el nuevo orden se mantiene tras un reinicio. Los chats que no pertenecen a ningún proyecto («Sin agrupar») no se pueden mover; dsh siempre los muestra al final.
|
|
169
178
|
- dsh no tiene un punto de extensión en el menú de opciones de vista de la barra lateral, así que la opción de proyectos recientes se añade al menú propio de dsh. Si una actualización de dsh cambia ese menú, la opción no aparece y todos los proyectos siguen visibles. El filtro funciona sobre las filas de proyecto, así que **En una sola lista** no se filtra. Úsalo con **Espacio de trabajo**: en **Árbol de espacios de trabajo**, una carpeta padre oculta también oculta los proyectos activos que contiene. **Por estado** tiene el mismo tipo de límite: dsh no tiene un espacio para el orden, así que la opción y el orden de las filas se enganchan al marcado del menú y de la lista de dsh.
|
|
@@ -200,7 +209,21 @@ Probado en dsh `0.2.0-rc.2` (escritorio y web) y `0.2.1-rc.2` (web). La CI ejecu
|
|
|
200
209
|
|
|
201
210
|
**¿Cómo reordeno los mensajes en cola en dsh?** Arrastra el asa ⠿ de un mensaje en cola, o pon el foco en ella y pulsa `↑` / `↓`.
|
|
202
211
|
|
|
203
|
-
**¿Cómo
|
|
212
|
+
**¿Cómo corrijo una errata en un mensaje en cola?** Haz doble clic en el mensaje en la cola, cambia el texto y pulsa `Enter` (`Esc` cancela). El mensaje mantiene su lugar en la cola.
|
|
213
|
+
|
|
214
|
+
**¿Cómo quito a la vez todos los puntos de no leído de un proyecto?** Barra lateral → botón **…** del proyecto → **Marcar todo como leído**.
|
|
215
|
+
|
|
216
|
+
**¿Puedo enlazar a un solo mensaje de un chat largo?** Sí: pasa el puntero por encima del mensaje y haz clic en **🔗**. Envía el enlace en un chat: en dsh 0.2.1 y posteriores, un clic en él abre el chat en ese mensaje.
|
|
217
|
+
|
|
218
|
+
**Revertí un turno por error. ¿Puedo recuperarlo?** Sí, con **Rehacer** encima del editor, justo después de revertir: inicia un chat nuevo desde justo antes de la reversión con los mismos mensajes, y con **Chat y archivos** también devuelve los archivos.
|
|
219
|
+
|
|
220
|
+
**¿Cómo veo solo los archivos que cambió un chat?** Barra lateral derecha → **Cambios** → **Este chat**. Haz clic en **␣** para ocultar los cambios que solo son espacios en blanco.
|
|
221
|
+
|
|
222
|
+
**¿Cómo evito que la revisión automática pregunte por la misma herramienta en un chat?** Haz clic en **Permitir en este chat** en la tarjeta de aprobación. Solo cubre esa herramienta exacta en ese chat, durante 1 hora por defecto; revoca el permiso desde el chip de la cabecera. Cambia el tiempo en **Configuración → Composer Plus → Permitir en este chat**.
|
|
223
|
+
|
|
224
|
+
**Perdí mi iPhone. ¿Cómo evito que llegue a mi Mac?** Haz clic en **Conexión móvil**, abajo a la izquierda de la barra lateral, y haz clic en **Remove** junto a ese iPhone. Su clave deja de funcionar al instante; solo puede volver con un nuevo emparejamiento que apruebes en el Mac.
|
|
225
|
+
|
|
226
|
+
**¿Puedo bloquear Tether con Face ID?** Sí: en Tether, activa «Settings → Privacy → Lock with Face ID». Después, Tether pide Face ID (o el código) al abrirse y cuando vuelves a la app.
|
|
204
227
|
|
|
205
228
|
**¿Cómo muestro en la barra lateral de dsh solo los proyectos que usé hoy?** Barra lateral → opciones de vista (icono de controles deslizantes) → **Activos en las últimas 2 horas**. Selecciónalo otra vez para mostrar todos los proyectos.
|
|
206
229
|
|