bt, die Kommandozeile
Eine kopflose Kommandozeile, die Text, eine Datei oder einen Ordner voller Dateien über dieselbe Engine übersetzt, die auch das Fenster nutzt. Sie braucht weder das Fenster noch den Agenten-Endpunkt und startet ihr eigenes Gateway.
Was bt ist
Eine ausführbare Datei namens bt, gebaut auf .NET 10, in der Produktdokumentation als die kopflose Kommandozeile für Skripte beschrieben. Kopflos im strengen Sinn: sie braucht kein laufendes Anwendungsfenster und keinen aktivierten Agenten-Endpunkt.
Sie entsteht im Publish-Schritt und wird in der ausgelieferten Anwendung mitgeführt, und der Build schlägt fehl, wenn diese Kopie neben der veröffentlichten Anwendung fehlt: cli\bt.exe
Aufruf
bt <command> [options]
Als erstes Argument haben die Hilfe und die Version je eigene Schalter. Innerhalb eines Befehls geben die Hilfeschalter die Hilfe dieses Befehls aus. Beachten Sie, dass das bloße Wort help akzeptiert wird, aber keiner der vier Befehle ist.
bt --help bt -h bt -? bt help
bt --version bt -v
bt translate --help
Ohne jedes Argument aufgerufen, gibt sie die Root-Hilfe aus und endet erfolgreich.
Die vier Befehle
Es sind genau vier. Ein unbekannter Befehl wird mit einer Meldung abgewiesen, die alle vier nennt.
| Befehl | Was er tut |
|---|---|
| translate | Übersetzt Text, eine Datei oder einen Ordner voller Dateien. |
| languages | Listet die Sprachen auf, die das ausgewählte Modell übersetzen kann. |
| models | Listet installierte Modelle auf oder wählt eines aus. |
| mcp | Stellt die Agentenwerkzeuge über Standardeingabe und -ausgabe bereit. |
Optionen
Sechs Optionen nehmen einen Wert: --from --to --file --batch --out --select
Vier sind Schalter: --json --quiet (-q) --overwrite --memory
Eine Option mit Wert akzeptiert beide Schreibweisen, ein Leerzeichen und ein Gleichheitszeichen werden also gleich geparst. Für eine Übersetzung ist eine Zielsprache erforderlich, und die Quellsprache ist standardmäßig Englisch. Eine Option ohne brauchbaren Wert wird namentlich abgewiesen, und eine Option, die es nicht gibt, ebenso.
Eine Option wird bewusst abgewiesen, statt einfach zu fehlen. Beide Schreibweisen werden zurückgewiesen, bevor irgendein Wert gelesen wird, mit der Begründung, dass der Indexumfang in der Anwendung gewählt wird und diese Kommandozeile ihn nicht einengen kann: --context-dir
Text übersetzen
Text wird als einfaches Argument übergeben oder auf der Standardeingabe hineingeleitet, wenn kein Textargument angegeben ist. Die Standardeingabe wird nur gelesen, wenn sie umgeleitet ist, ein Lauf ohne beides schlägt also fehl und sagt das, statt auf etwas zu warten, das nie eintrifft.
Text, eine Datei und ein Ordner schließen einander aus, jeweils mit einer eigenen Meldung. Der Befehl languages nimmt keine Datei, keinen Ordner und keine freien Argumente.
Dateien und Ordner
Nehmen Sie die Option file für eine Datei und die Option batch für einen Ordner. Die Option output wählt das Ziel, das bei einer einzelnen Datei eine Ausgabedatei und bei einem Stapel ein Ausgabeordner ist.
Die Standardausgabe wird neben der Eingabe geschrieben, mit der Zielsprache im Namen. Aus readme.md ins Tschechische übersetzt wird readme.cs.md, während ein PDF oder ein DOCX stattdessen als Text zurückkommt, zum Beispiel terms.pdf.cs.txt
Ein Stapel umfasst die Dateien unmittelbar im genannten Ordner, sortiert nach vollständigem Pfad, ohne Beachtung der Groß- und Kleinschreibung. Er steigt nicht in Unterordner ab. Ein Ordner ohne etwas Übersetzbares ist ein Fehler und kein stiller Erfolg.
Eine vorhandene Ausgabedatei wird nie stillschweigend ersetzt. Das Überschreiben ist eine bewusste Zuschaltung: --overwrite
Der Gedächtnisumfang unterscheidet sich je nach Weg. Der Gedächtnisschalter ist bei Text eine bewusste Zuschaltung. Eine Datei oder ein Ordner wird immer mit eingeschaltetem Gedächtnis übersetzt, weil eine Datei stets gegen das Projekt übersetzt wird, zu dem sie gehört.
Ausgabedisziplin
Die Standardausgabe trägt das Ergebnis oder den JSON-Umschlag. Alles andere geht auf die Standardfehlerausgabe. Es wird nie nachgefragt. Die Konsolenkodierung ist UTF-8 ohne Byte Order Mark.
Im menschenlesbaren Modus geben Sprachen Code, Name und Verfügbarkeit in festen Spalten aus; Modelle geben eine Markierung für ausgewählt und installiert aus, dann den Namen und die Datei; ein Stapel gibt eine Zeile je Datei mit ihrem Ergebnis aus; und ein Lauf über eine einzelne Datei gibt nur den Ausgabepfad aus.
Der JSON-Umschlag
Mit dem JSON-Schalter wird genau ein Umschlag auf die Standardausgabe geschrieben und sonst nichts. Fortschrittsmeldungen werden unterdrückt. Es gibt fünf Formen:
text { ok, from, to, model, result, note }
files { ok, results[] { file, status, out, error } }
languages { ok, languages[] { code, name, endonym, availability } }
models { ok, models[] { name, file, path, installed, selected } }
failure { ok: false, error { code, message } }
Der Schalter wird irgendwo in der Argumentliste erkannt, bevor der Befehl aufgelöst wird, und genau das lässt einen unbekannten Befehl mit einem Fehlerumschlag statt mit reinem Text antworten.
Exit-Codes
| Code | Bedeutung |
|---|---|
| 0 | Erfolg. |
| 2 | Aufruf- oder Argumentfehler. |
| 3 | Eingabedatei fehlt oder ist nicht lesbar. |
| 4 | Modell-Laufzeitumgebung nicht erreichbar. |
| 5 | Übersetzung fehlgeschlagen oder unvollständig. |
Derselbe Block wird in alle fünf Hilfebildschirme eingesetzt. Ein Fehler ohne eigenen Zweig, etwa ein nicht unterstütztes Format oder eine bereits vorhandene Ausgabedatei, meldet einen Aufruffehler.
Durchgerechnete Beispiele
bt translate "Save the document" --from en --to cs
bt translate --file README.md --to cs
bt translate --batch .\docs --to de --out .\docs\de
bt languages
bt models
bt models --select EuroLLM
bt mcp
Ein Modell auswählen
Ein Modell wird über den Namen, den Dateinamen oder den vollständigen Pfad gewählt, ohne Beachtung der Groß- und Kleinschreibung. Die Wahl wird gespeichert und gilt von da an: bt models --select <name>
Auf einen unbekannten Namen folgt die Liste der installierten Modelle. Ist überhaupt nichts installiert, verweist die Meldung stattdessen auf den Downloads-Bildschirm der Anwendung.
Die Agentenwerkzeuge bereitstellen
Der Befehl mcp spricht das Protokoll auf der Standardausgabe, deshalb wird der JSON-Schalter mit einer eigenen Meldung abgewiesen. Es wird kein Port geöffnet und nichts lauscht.
Die erste Zeile auf der Standardfehlerausgabe ist ein Banner, das die Version, die Build-Zeit und den Pfad der antwortenden ausführbaren Datei nennt, und genau das erlaubt es, einen Client, der eine geschlossene Verbindung meldet, als veraltete Binärdatei zu diagnostizieren. Die Werkzeugoberfläche für Agenten