@grinev/opencode-telegram-bot 0.7.0 → 0.9.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/.env.example +7 -1
- package/README.md +13 -3
- package/dist/bot/commands/sessions.js +2 -2
- package/dist/bot/handlers/model.js +19 -3
- package/dist/bot/handlers/prompt.js +24 -4
- package/dist/bot/index.js +65 -16
- package/dist/bot/utils/file-download.js +75 -0
- package/dist/bot/utils/send-with-markdown-fallback.js +58 -0
- package/dist/config.js +14 -11
- package/dist/i18n/de.js +247 -0
- package/dist/i18n/en.js +10 -1
- package/dist/i18n/es.js +247 -0
- package/dist/i18n/index.js +64 -12
- package/dist/i18n/ru.js +10 -1
- package/dist/i18n/zh.js +247 -0
- package/dist/interaction/guard.js +4 -0
- package/dist/model/capabilities.js +62 -0
- package/dist/runtime/bootstrap.js +43 -1
- package/dist/session/cache-manager.js +56 -1
- package/dist/summary/formatter.js +117 -5
- package/package.json +3 -2
package/dist/i18n/de.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
export const de = {
|
|
2
|
+
"cmd.description.status": "Server- und Sitzungsstatus",
|
|
3
|
+
"cmd.description.new": "Neue Sitzung erstellen",
|
|
4
|
+
"cmd.description.stop": "Aktuelle Aktion stoppen",
|
|
5
|
+
"cmd.description.sessions": "Sitzungen auflisten",
|
|
6
|
+
"cmd.description.projects": "Projekte auflisten",
|
|
7
|
+
"cmd.description.model": "Modell auswählen",
|
|
8
|
+
"cmd.description.agent": "Modus auswählen",
|
|
9
|
+
"cmd.description.opencode_start": "OpenCode-Server starten",
|
|
10
|
+
"cmd.description.opencode_stop": "OpenCode-Server stoppen",
|
|
11
|
+
"cmd.description.help": "Hilfe",
|
|
12
|
+
"callback.unknown_command": "Unbekannter Befehl",
|
|
13
|
+
"callback.processing_error": "Verarbeitungsfehler",
|
|
14
|
+
"error.load_agents": "❌ Agentenliste konnte nicht geladen werden",
|
|
15
|
+
"error.load_models": "❌ Modellliste konnte nicht geladen werden",
|
|
16
|
+
"error.load_variants": "❌ Variantenliste konnte nicht geladen werden",
|
|
17
|
+
"error.context_button": "❌ Kontext-Button konnte nicht verarbeitet werden",
|
|
18
|
+
"error.generic": "🔴 Etwas ist schiefgelaufen.",
|
|
19
|
+
"interaction.blocked.expired": "⚠️ Diese Interaktion ist abgelaufen. Bitte starte sie erneut.",
|
|
20
|
+
"interaction.blocked.expected_callback": "⚠️ Bitte benutze für diesen Schritt die Inline-Buttons oder tippe auf Abbrechen.",
|
|
21
|
+
"interaction.blocked.expected_text": "⚠️ Bitte sende für diesen Schritt eine Textnachricht.",
|
|
22
|
+
"interaction.blocked.expected_command": "⚠️ Bitte sende für diesen Schritt einen Befehl.",
|
|
23
|
+
"interaction.blocked.command_not_allowed": "⚠️ Dieser Befehl ist in diesem Schritt nicht verfügbar.",
|
|
24
|
+
"interaction.blocked.finish_current": "⚠️ Schließe zuerst die aktuelle Interaktion ab (antworten oder abbrechen), dann öffne ein anderes Menü.",
|
|
25
|
+
"inline.blocked.expected_choice": "⚠️ Wähle eine Option über die Inline-Buttons oder tippe auf Abbrechen.",
|
|
26
|
+
"inline.blocked.command_not_allowed": "⚠️ Dieser Befehl ist nicht verfügbar, solange das Inline-Menü aktiv ist.",
|
|
27
|
+
"question.blocked.expected_answer": "⚠️ Beantworte die aktuelle Frage über Buttons, Eigene Antwort oder Abbrechen.",
|
|
28
|
+
"question.blocked.command_not_allowed": "⚠️ Dieser Befehl ist erst verfügbar, wenn der aktuelle Frage-Flow abgeschlossen ist.",
|
|
29
|
+
"inline.button.cancel": "❌ Abbrechen",
|
|
30
|
+
"inline.inactive_callback": "Dieses Menü ist inaktiv",
|
|
31
|
+
"inline.cancelled_callback": "Abgebrochen",
|
|
32
|
+
"common.unknown": "unbekannt",
|
|
33
|
+
"common.unknown_error": "unbekannter Fehler",
|
|
34
|
+
"start.welcome": "👋 Willkommen beim OpenCode Telegram Bot!\n\nNutze Befehle:\n/projects — Projekt auswählen\n/sessions — Sitzungsliste\n/new — neue Sitzung\n/agent — Modus wechseln\n/model — Modell auswählen\n/status — Status\n/help — Hilfe",
|
|
35
|
+
"help.text": "📖 **Hilfe**\n\n/status - Serverstatus prüfen\n/sessions - Sitzungsliste\n/new - Neue Sitzung erstellen\n/help - Hilfe",
|
|
36
|
+
"bot.thinking": "💭 Denke...",
|
|
37
|
+
"bot.project_not_selected": "🏗 Projekt ist nicht ausgewählt.\n\nWähle zuerst ein Projekt mit /projects.",
|
|
38
|
+
"bot.creating_session": "🔄 Erstelle eine neue Sitzung...",
|
|
39
|
+
"bot.create_session_error": "🔴 Sitzung konnte nicht erstellt werden. Versuche /new oder prüfe den Serverstatus mit /status.",
|
|
40
|
+
"bot.session_created": "✅ Sitzung erstellt: {title}",
|
|
41
|
+
"bot.session_busy": "⏳ Agent führt bereits eine Aufgabe aus. Warte auf Abschluss oder nutze /stop, um den aktuellen Lauf zu unterbrechen.",
|
|
42
|
+
"bot.session_reset_project_mismatch": "⚠️ Die aktive Sitzung passt nicht zum ausgewählten Projekt und wurde daher zurückgesetzt. Nutze /sessions zur Auswahl oder /new, um eine neue Sitzung zu erstellen.",
|
|
43
|
+
"bot.prompt_send_error": "Anfrage konnte nicht an OpenCode gesendet werden.",
|
|
44
|
+
"bot.session_error": "🔴 OpenCode meldete einen Fehler: {message}",
|
|
45
|
+
"bot.unknown_command": "⚠️ Unbekannter Befehl: {command}. Nutze /help, um verfügbare Befehle zu sehen.",
|
|
46
|
+
"bot.photo_downloading": "⏳ Lade Foto herunter...",
|
|
47
|
+
"bot.photo_too_large": "⚠️ Foto ist zu groß (max. {maxSizeMb}MB)",
|
|
48
|
+
"bot.photo_model_no_image": "⚠️ Das aktuelle Modell unterstützt keine Bildeingabe. Sende nur Text.",
|
|
49
|
+
"bot.photo_download_error": "🔴 Foto konnte nicht heruntergeladen werden",
|
|
50
|
+
"bot.photo_no_caption": "💡 Tipp: Füge eine Bildunterschrift hinzu, um zu beschreiben, was du mit diesem Foto tun möchtest.",
|
|
51
|
+
"status.header_running": "🟢 **OpenCode-Server läuft**",
|
|
52
|
+
"status.health.healthy": "OK",
|
|
53
|
+
"status.health.unhealthy": "Nicht OK",
|
|
54
|
+
"status.line.health": "Status: {health}",
|
|
55
|
+
"status.line.version": "Version: {version}",
|
|
56
|
+
"status.line.managed_yes": "Vom Bot verwaltet: Ja",
|
|
57
|
+
"status.line.managed_no": "Vom Bot verwaltet: Nein",
|
|
58
|
+
"status.line.pid": "PID: {pid}",
|
|
59
|
+
"status.line.uptime_sec": "Betriebszeit: {seconds} s",
|
|
60
|
+
"status.line.mode": "Modus: {mode}",
|
|
61
|
+
"status.line.model": "Modell: {model}",
|
|
62
|
+
"status.agent_not_set": "nicht gesetzt",
|
|
63
|
+
"status.project_selected": "🏗 Projekt: {project}",
|
|
64
|
+
"status.project_not_selected": "🏗 Projekt: nicht ausgewählt",
|
|
65
|
+
"status.project_hint": "Nutze /projects, um ein Projekt auszuwahlen",
|
|
66
|
+
"status.session_selected": "📋 Aktuelle Sitzung: {title}",
|
|
67
|
+
"status.session_not_selected": "📋 Aktuelle Sitzung: nicht ausgewählt",
|
|
68
|
+
"status.session_hint": "Nutze /sessions zur Auswahl oder /new zum Erstellen",
|
|
69
|
+
"status.server_unavailable": "🔴 OpenCode-Server ist nicht verfügbar\n\nNutze /opencode_start, um den Server zu starten.",
|
|
70
|
+
"projects.empty": "📭 Keine Projekte gefunden.\n\nÖffne ein Verzeichnis in OpenCode und erstelle mindestens eine Sitzung, dann erscheint es hier.",
|
|
71
|
+
"projects.select": "Projekt auswählen:",
|
|
72
|
+
"projects.select_with_current": "Projekt auswählen:\n\nAktuell: 🏗 {project}",
|
|
73
|
+
"projects.fetch_error": "🔴 OpenCode-Server ist nicht verfügbar oder beim Laden der Projekte ist ein Fehler aufgetreten.",
|
|
74
|
+
"projects.selected": "✅ Projekt ausgewählt: {project}\n\n📋 Sitzung wurde zurückgesetzt. Nutze /sessions oder /new für dieses Projekt.",
|
|
75
|
+
"projects.select_error": "🔴 Projekt konnte nicht ausgewählt werden.",
|
|
76
|
+
"sessions.project_not_selected": "🏗 Projekt ist nicht ausgewählt.\n\nWähle zuerst ein Projekt mit /projects.",
|
|
77
|
+
"sessions.empty": "📭 Keine Sitzungen gefunden.\n\nErstelle eine neue Sitzung mit /new.",
|
|
78
|
+
"sessions.select": "Sitzung auswählen:",
|
|
79
|
+
"sessions.fetch_error": "🔴 OpenCode-Server ist nicht verfügbar oder beim Laden der Sitzungen ist ein Fehler aufgetreten.",
|
|
80
|
+
"sessions.select_project_first": "🔴 Projekt ist nicht ausgewählt. Nutze /projects.",
|
|
81
|
+
"sessions.loading_context": "⏳ Lade Kontext und letzte Nachrichten...",
|
|
82
|
+
"sessions.selected": "✅ Sitzung ausgewählt: {title}",
|
|
83
|
+
"sessions.select_error": "🔴 Sitzung konnte nicht ausgewählt werden.",
|
|
84
|
+
"sessions.preview.empty": "Keine neuen Nachrichten.",
|
|
85
|
+
"sessions.preview.title": "Letzte Nachrichten:",
|
|
86
|
+
"sessions.preview.you": "Du:",
|
|
87
|
+
"sessions.preview.agent": "Agent:",
|
|
88
|
+
"new.project_not_selected": "🏗 Projekt ist nicht ausgewählt.\n\nWähle zuerst ein Projekt mit /projects.",
|
|
89
|
+
"new.created": "✅ Neue Sitzung erstellt: {title}",
|
|
90
|
+
"new.create_error": "🔴 OpenCode-Server ist nicht verfügbar oder beim Erstellen der Sitzung ist ein Fehler aufgetreten.",
|
|
91
|
+
"stop.no_active_session": "🛑 Agent wurde nicht gestartet\n\nErstelle eine Sitzung mit /new oder wähle eine über /sessions aus.",
|
|
92
|
+
"stop.in_progress": "🛑 Event-Stream gestoppt, sende Abbruchsignal...\n\nWarte darauf, dass der Agent stoppt.",
|
|
93
|
+
"stop.warn_unconfirmed": "⚠️ Event-Stream gestoppt, aber der Server hat den Abbruch nicht bestätigt.\n\nPrüfe /status und versuche /stop in ein paar Sekunden erneut.",
|
|
94
|
+
"stop.warn_maybe_finished": "⚠️ Event-Stream gestoppt, aber der Agent konnte bereits fertig sein.",
|
|
95
|
+
"stop.success": "✅ Agent-Aktion unterbrochen. Von diesem Lauf werden keine weiteren Nachrichten gesendet.",
|
|
96
|
+
"stop.warn_still_busy": "⚠️ Signal gesendet, aber der Agent ist noch beschäftigt.\n\nDer Event-Stream ist bereits deaktiviert, daher werden keine Zwischenmeldungen gesendet.",
|
|
97
|
+
"stop.warn_timeout": "⚠️ Timeout beim Abbruch.\n\nDer Event-Stream ist bereits deaktiviert, versuche /stop in ein paar Sekunden erneut.",
|
|
98
|
+
"stop.warn_local_only": "⚠️ Event-Stream lokal gestoppt, aber serverseitiger Abbruch ist fehlgeschlagen.",
|
|
99
|
+
"stop.error": "🔴 Aktion konnte nicht gestoppt werden.\n\nEvent-Stream ist gestoppt, versuche /stop erneut.",
|
|
100
|
+
"opencode_start.already_running_managed": "⚠️ OpenCode-Server läuft bereits\n\nPID: {pid}\nBetriebszeit: {seconds} Sekunden",
|
|
101
|
+
"opencode_start.already_running_external": "✅ OpenCode-Server läuft bereits als externer Prozess\n\nVersion: {version}\n\nDieser Server wurde nicht vom Bot gestartet, daher kann /opencode-stop ihn nicht stoppen.",
|
|
102
|
+
"opencode_start.starting": "🔄 Starte OpenCode-Server...",
|
|
103
|
+
"opencode_start.start_error": "🔴 OpenCode-Server konnte nicht gestartet werden\n\nFehler: {error}\n\nPrüfe, ob OpenCode CLI installiert und im PATH verfügbar ist:\n`opencode --version`\n`npm install -g @opencode-ai/cli`",
|
|
104
|
+
"opencode_start.started_not_ready": "⚠️ OpenCode-Server gestartet, aber reagiert nicht\n\nPID: {pid}\n\nDer Server startet möglicherweise noch. Versuche /status in ein paar Sekunden.",
|
|
105
|
+
"opencode_start.success": "✅ OpenCode-Server erfolgreich gestartet\n\nPID: {pid}\nVersion: {version}",
|
|
106
|
+
"opencode_start.error": "🔴 Beim Starten des Servers ist ein Fehler aufgetreten.\n\nSiehe Anwendungslogs für Details.",
|
|
107
|
+
"opencode_stop.external_running": "⚠️ OpenCode-Server läuft als externer Prozess\n\nDieser Server wurde nicht über /opencode-start gestartet.\nStoppe ihn manuell oder nutze /status, um den Zustand zu prüfen.",
|
|
108
|
+
"opencode_stop.not_running": "⚠️ OpenCode-Server läuft nicht",
|
|
109
|
+
"opencode_stop.stopping": "🛑 Stoppe OpenCode-Server...\n\nPID: {pid}",
|
|
110
|
+
"opencode_stop.stop_error": "🔴 OpenCode-Server konnte nicht gestoppt werden\n\nFehler: {error}",
|
|
111
|
+
"opencode_stop.success": "✅ OpenCode-Server erfolgreich gestoppt",
|
|
112
|
+
"opencode_stop.error": "🔴 Beim Stoppen des Servers ist ein Fehler aufgetreten.\n\nSiehe Anwendungslogs für Details.",
|
|
113
|
+
"agent.changed_callback": "Modus geändert: {name}",
|
|
114
|
+
"agent.changed_message": "✅ Modus geändert zu: {name}",
|
|
115
|
+
"agent.change_error_callback": "Modus konnte nicht geändert werden",
|
|
116
|
+
"agent.menu.current": "Aktueller Modus: {name}\n\nModus auswählen:",
|
|
117
|
+
"agent.menu.select": "Arbeitsmodus auswählen:",
|
|
118
|
+
"model.changed_callback": "Modell geändert: {name}",
|
|
119
|
+
"model.changed_message": "✅ Modell geändert zu: {name}",
|
|
120
|
+
"model.change_error_callback": "Modell konnte nicht geändert werden",
|
|
121
|
+
"model.menu.empty": "⚠️ Keine verfügbaren Modelle",
|
|
122
|
+
"model.menu.current": "Aktuelles Modell: {name}\n\nModell auswählen:",
|
|
123
|
+
"model.menu.favorites_hint": "ℹ️ Die Modellliste wird aus Favoriten in OpenCode CLI erstellt.",
|
|
124
|
+
"model.menu.error": "🔴 Modellliste konnte nicht geladen werden",
|
|
125
|
+
"variant.model_not_selected_callback": "Fehler: Modell ist nicht ausgewählt",
|
|
126
|
+
"variant.changed_callback": "Variante geändert: {name}",
|
|
127
|
+
"variant.changed_message": "✅ Variante geändert zu: {name}",
|
|
128
|
+
"variant.change_error_callback": "Variante konnte nicht geändert werden",
|
|
129
|
+
"variant.select_model_first": "⚠️ Zuerst ein Modell auswählen",
|
|
130
|
+
"variant.menu.empty": "⚠️ Keine verfügbaren Varianten",
|
|
131
|
+
"variant.menu.current": "Aktuelle Variante: {name}\n\nVariante auswählen:",
|
|
132
|
+
"variant.menu.error": "🔴 Variantenliste konnte nicht geladen werden",
|
|
133
|
+
"context.button.confirm": "✅ Ja, Kontext komprimieren",
|
|
134
|
+
"context.no_active_session": "⚠️ Keine aktive Sitzung. Erstelle eine Sitzung mit /new",
|
|
135
|
+
"context.confirm_text": '📊 Kontext-Komprimierung für Sitzung "{title}"\n\nDadurch wird die Kontextnutzung reduziert, indem alte Nachrichten aus dem Verlauf entfernt werden. Die aktuelle Aufgabe wird nicht unterbrochen.\n\nFortfahren?',
|
|
136
|
+
"context.callback_session_not_found": "Sitzung nicht gefunden",
|
|
137
|
+
"context.callback_compacting": "Komprimiere Kontext...",
|
|
138
|
+
"context.progress": "⏳ Komprimiere Kontext...",
|
|
139
|
+
"context.error": "❌ Kontext-Komprimierung fehlgeschlagen",
|
|
140
|
+
"context.success": "✅ Kontext erfolgreich komprimiert",
|
|
141
|
+
"permission.inactive_callback": "Berechtigungsanfrage ist inaktiv",
|
|
142
|
+
"permission.processing_error_callback": "Verarbeitungsfehler",
|
|
143
|
+
"permission.no_active_request_callback": "Fehler: keine aktive Anfrage",
|
|
144
|
+
"permission.reply.once": "Einmal erlaubt",
|
|
145
|
+
"permission.reply.always": "Immer erlaubt",
|
|
146
|
+
"permission.reply.reject": "Abgelehnt",
|
|
147
|
+
"permission.send_reply_error": "❌ Antwort auf Berechtigungsanfrage konnte nicht gesendet werden",
|
|
148
|
+
"permission.blocked.expected_reply": "⚠️ Bitte beantworte zuerst die Berechtigungsanfrage mit den Buttons oben.",
|
|
149
|
+
"permission.blocked.command_not_allowed": "⚠️ Dieser Befehl ist erst verfügbar, wenn du die Berechtigungsanfrage beantwortet hast.",
|
|
150
|
+
"permission.header": "{emoji} **Berechtigungsanfrage: {name}**\n\n",
|
|
151
|
+
"permission.button.allow": "✅ Einmal erlauben",
|
|
152
|
+
"permission.button.always": "🔓 Immer erlauben",
|
|
153
|
+
"permission.button.reject": "❌ Ablehnen",
|
|
154
|
+
"permission.name.bash": "Bash",
|
|
155
|
+
"permission.name.edit": "Bearbeiten",
|
|
156
|
+
"permission.name.write": "Schreiben",
|
|
157
|
+
"permission.name.read": "Lesen",
|
|
158
|
+
"permission.name.webfetch": "Web-Abruf",
|
|
159
|
+
"permission.name.websearch": "Web-Suche",
|
|
160
|
+
"permission.name.glob": "Dateisuche",
|
|
161
|
+
"permission.name.grep": "Inhaltssuche",
|
|
162
|
+
"permission.name.list": "Verzeichnis auflisten",
|
|
163
|
+
"permission.name.task": "Task",
|
|
164
|
+
"permission.name.lsp": "LSP",
|
|
165
|
+
"question.inactive_callback": "Umfrage ist inaktiv",
|
|
166
|
+
"question.processing_error_callback": "Verarbeitungsfehler",
|
|
167
|
+
"question.select_one_required_callback": "Wähle mindestens eine Option",
|
|
168
|
+
"question.enter_custom_callback": "Sende deine eigene Antwort als Nachricht",
|
|
169
|
+
"question.cancelled": "❌ Umfrage abgebrochen",
|
|
170
|
+
"question.answer_already_received": "Antwort bereits erhalten, bitte warten...",
|
|
171
|
+
"question.completed_no_answers": "✅ Umfrage abgeschlossen (keine Antworten)",
|
|
172
|
+
"question.no_active_project": "❌ Kein aktives Projekt",
|
|
173
|
+
"question.no_active_request": "❌ Keine aktive Anfrage",
|
|
174
|
+
"question.send_answers_error": "❌ Antworten konnten nicht an den Agenten gesendet werden",
|
|
175
|
+
"question.multi_hint": "\n*Du kannst mehrere Optionen auswählen*",
|
|
176
|
+
"question.button.submit": "✅ Fertig",
|
|
177
|
+
"question.button.custom": "🔤 Eigene Antwort",
|
|
178
|
+
"question.button.cancel": "❌ Abbrechen",
|
|
179
|
+
"question.use_custom_button_first": '⚠️ Um Text zu senden, tippe zuerst bei der aktuellen Frage auf "Eigene Antwort".',
|
|
180
|
+
"question.summary.title": "✅ Umfrage abgeschlossen!\n\n",
|
|
181
|
+
"question.summary.question": "Frage {index}:\n{question}\n\n",
|
|
182
|
+
"question.summary.answer": "Antwort:\n{answer}\n\n",
|
|
183
|
+
"keyboard.agent_mode": "{emoji} {name} Modus",
|
|
184
|
+
"keyboard.context": "📊 {used} / {limit} ({percent}%)",
|
|
185
|
+
"keyboard.context_empty": "📊 0",
|
|
186
|
+
"keyboard.variant": "💭 {name}",
|
|
187
|
+
"keyboard.variant_default": "💡 Standard",
|
|
188
|
+
"keyboard.updated": "⌨️ Tastatur aktualisiert",
|
|
189
|
+
"pinned.default_session_title": "neue Sitzung",
|
|
190
|
+
"pinned.unknown": "Unbekannt",
|
|
191
|
+
"pinned.line.project": "Projekt: {project}",
|
|
192
|
+
"pinned.line.model": "Modell: {model}",
|
|
193
|
+
"pinned.line.context": "Kontext: {used} / {limit} ({percent}%)",
|
|
194
|
+
"pinned.files.title": "Dateien ({count}):",
|
|
195
|
+
"pinned.files.item": " {path}{diff}",
|
|
196
|
+
"pinned.files.more": " ... und {count} mehr",
|
|
197
|
+
"tool.todo.overflow": "*({count} weitere Aufgaben)*",
|
|
198
|
+
"tool.file_header.write": "Datei/Pfad schreiben: {path}\n============================================================\n\n",
|
|
199
|
+
"tool.file_header.edit": "Datei/Pfad bearbeiten: {path}\n============================================================\n\n",
|
|
200
|
+
"runtime.wizard.ask_token": "Telegram-Bot-Token eingeben (von @BotFather).\n> ",
|
|
201
|
+
"runtime.wizard.ask_language": "Oberflächensprache auswählen.\nGib die Sprach-Nummer aus der Liste oder den Locale-Code ein.\nDrücke Enter, um die Standardsprache beizubehalten: {defaultLocale}\n{options}\n> ",
|
|
202
|
+
"runtime.wizard.language_invalid": "Gib eine Sprach-Nummer aus der Liste oder einen unterstützten Locale-Code ein.\n",
|
|
203
|
+
"runtime.wizard.language_selected": "Ausgewählte Sprache: {language}\n",
|
|
204
|
+
"runtime.wizard.token_required": "Token ist erforderlich. Bitte versuche es erneut.\n",
|
|
205
|
+
"runtime.wizard.token_invalid": "Token sieht ungültig aus (erwartetes Format <id>:<secret>). Bitte versuche es erneut.\n",
|
|
206
|
+
"runtime.wizard.ask_user_id": "Gib deine Telegram User ID ein (du bekommst sie bei @userinfobot).\n> ",
|
|
207
|
+
"runtime.wizard.user_id_invalid": "Gib eine positive ganze Zahl ein (> 0).\n",
|
|
208
|
+
"runtime.wizard.ask_api_url": "OpenCode API URL eingeben (optional).\nEnter drücken für Standard: {defaultUrl}\n> ",
|
|
209
|
+
"runtime.wizard.api_url_invalid": "Gib eine gültige URL (http/https) ein oder drücke Enter für Standard.\n",
|
|
210
|
+
"runtime.wizard.start": "OpenCode Telegram Bot Einrichtung.\n",
|
|
211
|
+
"runtime.wizard.saved": "Konfiguration gespeichert:\n- {envPath}\n- {settingsPath}\n",
|
|
212
|
+
"runtime.wizard.not_configured_starting": "Anwendung ist noch nicht konfiguriert. Starte Assistent...\n",
|
|
213
|
+
"runtime.wizard.tty_required": "Der interaktive Assistent erfordert ein TTY-Terminal. Führe `opencode-telegram config` in einer interaktiven Shell aus.",
|
|
214
|
+
"rename.no_session": "⚠️ Keine aktive Sitzung. Erstelle oder wähle zuerst eine Sitzung.",
|
|
215
|
+
"rename.prompt": "📝 Neuen Titel für die Sitzung eingeben:\n\nAktuell: {title}",
|
|
216
|
+
"rename.empty_title": "⚠️ Titel darf nicht leer sein.",
|
|
217
|
+
"rename.success": "✅ Sitzung umbenannt in: {title}",
|
|
218
|
+
"rename.error": "🔴 Sitzung konnte nicht umbenannt werden.",
|
|
219
|
+
"rename.cancelled": "❌ Umbenennen abgebrochen.",
|
|
220
|
+
"rename.inactive_callback": "Umbenennen-Anfrage ist inaktiv",
|
|
221
|
+
"rename.inactive": "⚠️ Umbenennen-Anfrage ist nicht aktiv. Starte /rename erneut.",
|
|
222
|
+
"rename.blocked.expected_name": "⚠️ Sende den neuen Sitzungsnamen als Text oder tippe in der Umbenennen-Nachricht auf Abbrechen.",
|
|
223
|
+
"rename.blocked.command_not_allowed": "⚠️ Dieser Befehl ist nicht verfügbar, solange beim Umbenennen auf einen neuen Namen gewartet wird.",
|
|
224
|
+
"rename.button.cancel": "❌ Abbrechen",
|
|
225
|
+
"cmd.description.rename": "Aktuelle Sitzung umbenennen",
|
|
226
|
+
"cli.usage": "Verwendung:\n opencode-telegram [start] [--mode sources|installed]\n opencode-telegram status\n opencode-telegram stop\n opencode-telegram config\n\nHinweise:\n - Ohne Befehl wird standardmäßig `start` verwendet\n - `--mode` wird derzeit nur für `start` unterstützt",
|
|
227
|
+
"cli.placeholder.status": "Befehl `status` ist derzeit ein Platzhalter. Echte Statusprüfungen werden in der Service-Schicht hinzugefügt (Phase 5).",
|
|
228
|
+
"cli.placeholder.stop": "Befehl `stop` ist derzeit ein Platzhalter. Ein echter Stop des Hintergrundprozesses wird in der Service-Schicht hinzugefügt (Phase 5).",
|
|
229
|
+
"cli.placeholder.unavailable": "Befehl ist nicht verfügbar.",
|
|
230
|
+
"cli.error.prefix": "CLI-Fehler: {message}",
|
|
231
|
+
"cli.args.unknown_command": "Unbekannter Befehl: {value}",
|
|
232
|
+
"cli.args.mode_requires_value": "Option --mode erfordert einen Wert: sources|installed",
|
|
233
|
+
"cli.args.invalid_mode": "Ungültiger Wert für --mode: {value}. Erwartet sources|installed",
|
|
234
|
+
"cli.args.unknown_option": "Unbekannte Option: {value}",
|
|
235
|
+
"cli.args.mode_only_start": "Option --mode wird nur für den start-Befehl unterstützt",
|
|
236
|
+
"legacy.models.fetch_error": "🔴 Modellliste konnte nicht geladen werden. Prüfe den Serverstatus mit /status.",
|
|
237
|
+
"legacy.models.empty": "📋 Keine verfügbaren Modelle. Konfiguriere Provider in OpenCode.",
|
|
238
|
+
"legacy.models.header": "📋 **Verfügbare Modelle:**\n\n",
|
|
239
|
+
"legacy.models.no_provider_models": " ⚠️ Keine verfügbaren Modelle\n",
|
|
240
|
+
"legacy.models.env_hint": "💡 Um ein Modell in .env zu nutzen:\n",
|
|
241
|
+
"legacy.models.error": "🔴 Beim Laden der Modellliste ist ein Fehler aufgetreten.",
|
|
242
|
+
"stt.recognizing": "🎤 Erkenne Audio...",
|
|
243
|
+
"stt.recognized": "🎤 Erkannt:\n{text}",
|
|
244
|
+
"stt.not_configured": "🎤 Spracherkennung ist nicht konfiguriert.\n\nSetze STT_API_URL und STT_API_KEY in .env, um sie zu aktivieren.",
|
|
245
|
+
"stt.error": "🔴 Audio konnte nicht erkannt werden: {error}",
|
|
246
|
+
"stt.empty_result": "🎤 Keine Sprache in der Audionachricht erkannt.",
|
|
247
|
+
};
|
package/dist/i18n/en.js
CHANGED
|
@@ -43,6 +43,11 @@ export const en = {
|
|
|
43
43
|
"bot.prompt_send_error": "Failed to send request to OpenCode.",
|
|
44
44
|
"bot.session_error": "🔴 OpenCode returned an error: {message}",
|
|
45
45
|
"bot.unknown_command": "⚠️ Unknown command: {command}. Use /help to see available commands.",
|
|
46
|
+
"bot.photo_downloading": "⏳ Downloading photo...",
|
|
47
|
+
"bot.photo_too_large": "⚠️ Photo is too large (max {maxSizeMb}MB)",
|
|
48
|
+
"bot.photo_model_no_image": "⚠️ Current model doesn't support image input. Sending text only.",
|
|
49
|
+
"bot.photo_download_error": "🔴 Failed to download photo",
|
|
50
|
+
"bot.photo_no_caption": "💡 Tip: Add a caption to describe what you want to do with this photo.",
|
|
46
51
|
"status.header_running": "🟢 **OpenCode Server is running**",
|
|
47
52
|
"status.health.healthy": "Healthy",
|
|
48
53
|
"status.health.unhealthy": "Unhealthy",
|
|
@@ -115,6 +120,7 @@ export const en = {
|
|
|
115
120
|
"model.change_error_callback": "Failed to change model",
|
|
116
121
|
"model.menu.empty": "⚠️ No available models",
|
|
117
122
|
"model.menu.current": "Current model: {name}\n\nSelect model:",
|
|
123
|
+
"model.menu.favorites_hint": "ℹ️ The model list is built from favorites in OpenCode CLI.",
|
|
118
124
|
"model.menu.error": "🔴 Failed to get models list",
|
|
119
125
|
"variant.model_not_selected_callback": "Error: model is not selected",
|
|
120
126
|
"variant.changed_callback": "Variant changed: {name}",
|
|
@@ -192,13 +198,16 @@ export const en = {
|
|
|
192
198
|
"tool.file_header.write": "Write File/Path: {path}\n============================================================\n\n",
|
|
193
199
|
"tool.file_header.edit": "Edit File/Path: {path}\n============================================================\n\n",
|
|
194
200
|
"runtime.wizard.ask_token": "Enter Telegram bot token (get it from @BotFather).\n> ",
|
|
201
|
+
"runtime.wizard.ask_language": "Select interface language.\nEnter the language number from the list or locale code.\nPress Enter to keep default language: {defaultLocale}\n{options}\n> ",
|
|
202
|
+
"runtime.wizard.language_invalid": "Enter a language number from the list or a supported locale code.\n",
|
|
203
|
+
"runtime.wizard.language_selected": "Selected language: {language}\n",
|
|
195
204
|
"runtime.wizard.token_required": "Token is required. Please try again.\n",
|
|
196
205
|
"runtime.wizard.token_invalid": "Token looks invalid (expected format <id>:<secret>). Please try again.\n",
|
|
197
206
|
"runtime.wizard.ask_user_id": "Enter your Telegram User ID (you can get it from @userinfobot).\n> ",
|
|
198
207
|
"runtime.wizard.user_id_invalid": "Enter a positive integer (> 0).\n",
|
|
199
208
|
"runtime.wizard.ask_api_url": "Enter OpenCode API URL (optional).\nPress Enter to use default: {defaultUrl}\n> ",
|
|
200
209
|
"runtime.wizard.api_url_invalid": "Enter a valid URL (http/https) or press Enter for default.\n",
|
|
201
|
-
"runtime.wizard.start": "
|
|
210
|
+
"runtime.wizard.start": "OpenCode Telegram Bot setup.\n",
|
|
202
211
|
"runtime.wizard.saved": "Configuration saved:\n- {envPath}\n- {settingsPath}\n",
|
|
203
212
|
"runtime.wizard.not_configured_starting": "Application is not configured yet. Starting wizard...\n",
|
|
204
213
|
"runtime.wizard.tty_required": "Interactive wizard requires a TTY terminal. Run `opencode-telegram config` in an interactive shell.",
|
package/dist/i18n/es.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
export const es = {
|
|
2
|
+
"cmd.description.status": "Estado del servidor y de la sesión",
|
|
3
|
+
"cmd.description.new": "Crear una sesión nueva",
|
|
4
|
+
"cmd.description.stop": "Detener la acción actual",
|
|
5
|
+
"cmd.description.sessions": "Listar sesiones",
|
|
6
|
+
"cmd.description.projects": "Listar proyectos",
|
|
7
|
+
"cmd.description.model": "Seleccionar modelo",
|
|
8
|
+
"cmd.description.agent": "Seleccionar modo",
|
|
9
|
+
"cmd.description.opencode_start": "Iniciar servidor OpenCode",
|
|
10
|
+
"cmd.description.opencode_stop": "Detener servidor OpenCode",
|
|
11
|
+
"cmd.description.help": "Ayuda",
|
|
12
|
+
"callback.unknown_command": "Comando desconocido",
|
|
13
|
+
"callback.processing_error": "Error de procesamiento",
|
|
14
|
+
"error.load_agents": "❌ No se pudo cargar la lista de agentes",
|
|
15
|
+
"error.load_models": "❌ No se pudo cargar la lista de modelos",
|
|
16
|
+
"error.load_variants": "❌ No se pudo cargar la lista de variantes",
|
|
17
|
+
"error.context_button": "❌ No se pudo procesar el botón de contexto",
|
|
18
|
+
"error.generic": "🔴 Algo salió mal.",
|
|
19
|
+
"interaction.blocked.expired": "⚠️ Esta interacción ha expirado. Por favor, iníciala de nuevo.",
|
|
20
|
+
"interaction.blocked.expected_callback": "⚠️ Para este paso, usa los botones en línea o toca Cancelar.",
|
|
21
|
+
"interaction.blocked.expected_text": "⚠️ Para este paso, envía un mensaje de texto.",
|
|
22
|
+
"interaction.blocked.expected_command": "⚠️ Para este paso, envía un comando.",
|
|
23
|
+
"interaction.blocked.command_not_allowed": "⚠️ Este comando no está disponible en el paso actual.",
|
|
24
|
+
"interaction.blocked.finish_current": "⚠️ Termina primero la interacción actual (responde o cancela) y después abre otro menú.",
|
|
25
|
+
"inline.blocked.expected_choice": "⚠️ Elige una opción usando los botones en línea o toca Cancelar.",
|
|
26
|
+
"inline.blocked.command_not_allowed": "⚠️ Este comando no está disponible mientras el menú en línea está activo.",
|
|
27
|
+
"question.blocked.expected_answer": "⚠️ Responde la pregunta actual usando botones, Respuesta personalizada o Cancelar.",
|
|
28
|
+
"question.blocked.command_not_allowed": "⚠️ Este comando no está disponible hasta que se complete el flujo de la pregunta actual.",
|
|
29
|
+
"inline.button.cancel": "❌ Cancelar",
|
|
30
|
+
"inline.inactive_callback": "Este menú está inactivo",
|
|
31
|
+
"inline.cancelled_callback": "Cancelado",
|
|
32
|
+
"common.unknown": "desconocido",
|
|
33
|
+
"common.unknown_error": "error desconocido",
|
|
34
|
+
"start.welcome": "👋 ¡Bienvenido a OpenCode Telegram Bot!\n\nUsa los comandos:\n/projects — seleccionar proyecto\n/sessions — lista de sesiones\n/new — sesión nueva\n/agent — cambiar modo\n/model — seleccionar modelo\n/status — estado\n/help — ayuda",
|
|
35
|
+
"help.text": "📖 **Ayuda**\n\n/status - Ver estado del servidor\n/sessions - Lista de sesiones\n/new - Crear una sesión nueva\n/help - Ayuda",
|
|
36
|
+
"bot.thinking": "💭 Pensando...",
|
|
37
|
+
"bot.project_not_selected": "🏗 No hay un proyecto seleccionado.\n\nPrimero selecciona un proyecto con /projects.",
|
|
38
|
+
"bot.creating_session": "🔄 Creando una sesión nueva...",
|
|
39
|
+
"bot.create_session_error": "🔴 No se pudo crear la sesión. Prueba /new o revisa el estado del servidor con /status.",
|
|
40
|
+
"bot.session_created": "✅ Sesión creada: {title}",
|
|
41
|
+
"bot.session_busy": "⏳ El agente ya está ejecutando una tarea. Espera a que termine o usa /stop para interrumpir la ejecución actual.",
|
|
42
|
+
"bot.session_reset_project_mismatch": "⚠️ La sesión activa no coincide con el proyecto seleccionado, así que se reinició. Usa /sessions para elegir una o /new para crear una nueva.",
|
|
43
|
+
"bot.prompt_send_error": "No se pudo enviar la solicitud a OpenCode.",
|
|
44
|
+
"bot.session_error": "🔴 OpenCode devolvió un error: {message}",
|
|
45
|
+
"bot.unknown_command": "⚠️ Comando desconocido: {command}. Usa /help para ver los comandos disponibles.",
|
|
46
|
+
"bot.photo_downloading": "⏳ Descargando foto...",
|
|
47
|
+
"bot.photo_too_large": "⚠️ La foto es demasiado grande (max {maxSizeMb}MB)",
|
|
48
|
+
"bot.photo_model_no_image": "⚠️ El modelo actual no admite entrada de imagen. Enviaré solo texto.",
|
|
49
|
+
"bot.photo_download_error": "🔴 No se pudo descargar la foto",
|
|
50
|
+
"bot.photo_no_caption": "💡 Consejo: agrega un pie de foto para describir que quieres hacer con esta foto.",
|
|
51
|
+
"status.header_running": "🟢 **OpenCode Server está en ejecución**",
|
|
52
|
+
"status.health.healthy": "Saludable",
|
|
53
|
+
"status.health.unhealthy": "No saludable",
|
|
54
|
+
"status.line.health": "Estado: {health}",
|
|
55
|
+
"status.line.version": "Versión: {version}",
|
|
56
|
+
"status.line.managed_yes": "Administrado por el bot: Sí",
|
|
57
|
+
"status.line.managed_no": "Administrado por el bot: No",
|
|
58
|
+
"status.line.pid": "PID: {pid}",
|
|
59
|
+
"status.line.uptime_sec": "Tiempo activo: {seconds} s",
|
|
60
|
+
"status.line.mode": "Modo: {mode}",
|
|
61
|
+
"status.line.model": "Modelo: {model}",
|
|
62
|
+
"status.agent_not_set": "no configurado",
|
|
63
|
+
"status.project_selected": "🏗 Proyecto: {project}",
|
|
64
|
+
"status.project_not_selected": "🏗 Proyecto: no seleccionado",
|
|
65
|
+
"status.project_hint": "Usa /projects para seleccionar un proyecto",
|
|
66
|
+
"status.session_selected": "📋 Sesión actual: {title}",
|
|
67
|
+
"status.session_not_selected": "📋 Sesión actual: no seleccionada",
|
|
68
|
+
"status.session_hint": "Usa /sessions para elegir una o /new para crear una",
|
|
69
|
+
"status.server_unavailable": "🔴 OpenCode Server no está disponible\n\nUsa /opencode_start para iniciar el servidor.",
|
|
70
|
+
"projects.empty": "📭 No se encontraron proyectos.\n\nAbre un directorio en OpenCode y crea al menos una sesión; entonces aparecerá aquí.",
|
|
71
|
+
"projects.select": "Selecciona un proyecto:",
|
|
72
|
+
"projects.select_with_current": "Selecciona un proyecto:\n\nActual: 🏗 {project}",
|
|
73
|
+
"projects.fetch_error": "🔴 OpenCode Server no está disponible u ocurrió un error al cargar los proyectos.",
|
|
74
|
+
"projects.selected": "✅ Proyecto seleccionado: {project}\n\n📋 La sesión se reinició. Usa /sessions o /new para este proyecto.",
|
|
75
|
+
"projects.select_error": "🔴 No se pudo seleccionar el proyecto.",
|
|
76
|
+
"sessions.project_not_selected": "🏗 No hay un proyecto seleccionado.\n\nPrimero selecciona un proyecto con /projects.",
|
|
77
|
+
"sessions.empty": "📭 No se encontraron sesiones.\n\nCrea una sesión nueva con /new.",
|
|
78
|
+
"sessions.select": "Selecciona una sesión:",
|
|
79
|
+
"sessions.fetch_error": "🔴 OpenCode Server no está disponible u ocurrió un error al cargar las sesiones.",
|
|
80
|
+
"sessions.select_project_first": "🔴 No hay un proyecto seleccionado. Usa /projects.",
|
|
81
|
+
"sessions.loading_context": "⏳ Cargando contexto y los últimos mensajes...",
|
|
82
|
+
"sessions.selected": "✅ Sesión seleccionada: {title}",
|
|
83
|
+
"sessions.select_error": "🔴 No se pudo seleccionar la sesión.",
|
|
84
|
+
"sessions.preview.empty": "No hay mensajes recientes.",
|
|
85
|
+
"sessions.preview.title": "Mensajes recientes:",
|
|
86
|
+
"sessions.preview.you": "Tú:",
|
|
87
|
+
"sessions.preview.agent": "Agente:",
|
|
88
|
+
"new.project_not_selected": "🏗 No hay un proyecto seleccionado.\n\nPrimero selecciona un proyecto con /projects.",
|
|
89
|
+
"new.created": "✅ Sesión nueva creada: {title}",
|
|
90
|
+
"new.create_error": "🔴 OpenCode Server no está disponible u ocurrió un error al crear la sesión.",
|
|
91
|
+
"stop.no_active_session": "🛑 El agente no se inició\n\nCrea una sesión con /new o selecciona una con /sessions.",
|
|
92
|
+
"stop.in_progress": "🛑 Flujo de eventos detenido; enviando señal de aborto...\n\nEsperando a que el agente se detenga.",
|
|
93
|
+
"stop.warn_unconfirmed": "⚠️ Flujo de eventos detenido, pero el servidor no confirmó el aborto.\n\nRevisa /status y vuelve a intentar /stop en unos segundos.",
|
|
94
|
+
"stop.warn_maybe_finished": "⚠️ Flujo de eventos detenido, pero el agente podría haber terminado ya.",
|
|
95
|
+
"stop.success": "✅ Acción del agente interrumpida. No se enviarán más mensajes de esta ejecución.",
|
|
96
|
+
"stop.warn_still_busy": "⚠️ Señal enviada, pero el agente sigue ocupado.\n\nEl flujo de eventos ya está deshabilitado, así que no se enviarán mensajes intermedios.",
|
|
97
|
+
"stop.warn_timeout": "⚠️ Tiempo de espera agotado al solicitar el aborto.\n\nEl flujo de eventos ya está deshabilitado; vuelve a intentar /stop en unos segundos.",
|
|
98
|
+
"stop.warn_local_only": "⚠️ Flujo de eventos detenido localmente, pero el aborto en el servidor falló.",
|
|
99
|
+
"stop.error": "🔴 No se pudo detener la acción.\n\nEl flujo de eventos está detenido; prueba /stop otra vez.",
|
|
100
|
+
"opencode_start.already_running_managed": "⚠️ OpenCode Server ya está en ejecución\n\nPID: {pid}\nTiempo activo: {seconds} segundos",
|
|
101
|
+
"opencode_start.already_running_external": "✅ OpenCode Server ya está en ejecución como un proceso externo\n\nVersión: {version}\n\nEste servidor no fue iniciado por el bot, por lo que /opencode-stop no puede detenerlo.",
|
|
102
|
+
"opencode_start.starting": "🔄 Iniciando OpenCode Server...",
|
|
103
|
+
"opencode_start.start_error": "🔴 No se pudo iniciar OpenCode Server\n\nError: {error}\n\nRevisa que OpenCode CLI esté instalado y disponible en PATH:\n`opencode --version`\n`npm install -g @opencode-ai/cli`",
|
|
104
|
+
"opencode_start.started_not_ready": "⚠️ OpenCode Server se inició, pero no responde\n\nPID: {pid}\n\nEl servidor puede estar iniciando. Prueba /status en unos segundos.",
|
|
105
|
+
"opencode_start.success": "✅ OpenCode Server iniciado correctamente\n\nPID: {pid}\nVersión: {version}",
|
|
106
|
+
"opencode_start.error": "🔴 Ocurrió un error al iniciar el servidor.\n\nRevisa los logs de la aplicación para más detalles.",
|
|
107
|
+
"opencode_stop.external_running": "⚠️ OpenCode Server está en ejecución como un proceso externo\n\nEste servidor no fue iniciado con /opencode-start.\nDeténlo manualmente o usa /status para revisar el estado.",
|
|
108
|
+
"opencode_stop.not_running": "⚠️ OpenCode Server no está en ejecución",
|
|
109
|
+
"opencode_stop.stopping": "🛑 Deteniendo OpenCode Server...\n\nPID: {pid}",
|
|
110
|
+
"opencode_stop.stop_error": "🔴 No se pudo detener OpenCode Server\n\nError: {error}",
|
|
111
|
+
"opencode_stop.success": "✅ OpenCode Server detenido correctamente",
|
|
112
|
+
"opencode_stop.error": "🔴 Ocurrió un error al detener el servidor.\n\nRevisa los logs de la aplicación para más detalles.",
|
|
113
|
+
"agent.changed_callback": "Modo cambiado: {name}",
|
|
114
|
+
"agent.changed_message": "✅ Modo cambiado a: {name}",
|
|
115
|
+
"agent.change_error_callback": "No se pudo cambiar el modo",
|
|
116
|
+
"agent.menu.current": "Modo actual: {name}\n\nSelecciona el modo:",
|
|
117
|
+
"agent.menu.select": "Selecciona el modo de trabajo:",
|
|
118
|
+
"model.changed_callback": "Modelo cambiado: {name}",
|
|
119
|
+
"model.changed_message": "✅ Modelo cambiado a: {name}",
|
|
120
|
+
"model.change_error_callback": "No se pudo cambiar el modelo",
|
|
121
|
+
"model.menu.empty": "⚠️ No hay modelos disponibles",
|
|
122
|
+
"model.menu.current": "Modelo actual: {name}\n\nSelecciona el modelo:",
|
|
123
|
+
"model.menu.favorites_hint": "ℹ️ La lista de modelos se genera a partir de favoritos en OpenCode CLI.",
|
|
124
|
+
"model.menu.error": "🔴 No se pudo obtener la lista de modelos",
|
|
125
|
+
"variant.model_not_selected_callback": "Error: no hay un modelo seleccionado",
|
|
126
|
+
"variant.changed_callback": "Variante cambiada: {name}",
|
|
127
|
+
"variant.changed_message": "✅ Variante cambiada a: {name}",
|
|
128
|
+
"variant.change_error_callback": "No se pudo cambiar la variante",
|
|
129
|
+
"variant.select_model_first": "⚠️ Selecciona un modelo primero",
|
|
130
|
+
"variant.menu.empty": "⚠️ No hay variantes disponibles",
|
|
131
|
+
"variant.menu.current": "Variante actual: {name}\n\nSelecciona la variante:",
|
|
132
|
+
"variant.menu.error": "🔴 No se pudo obtener la lista de variantes",
|
|
133
|
+
"context.button.confirm": "✅ Sí, compactar contexto",
|
|
134
|
+
"context.no_active_session": "⚠️ No hay una sesión activa. Crea una sesión con /new",
|
|
135
|
+
"context.confirm_text": '📊 Compactación de contexto para la sesión "{title}"\n\nEsto reducirá el uso de contexto eliminando mensajes antiguos del historial. La tarea actual no se interrumpirá.\n\n¿Continuar?',
|
|
136
|
+
"context.callback_session_not_found": "Sesión no encontrada",
|
|
137
|
+
"context.callback_compacting": "Compactando contexto...",
|
|
138
|
+
"context.progress": "⏳ Compactando contexto...",
|
|
139
|
+
"context.error": "❌ La compactación de contexto falló",
|
|
140
|
+
"context.success": "✅ Contexto compactado correctamente",
|
|
141
|
+
"permission.inactive_callback": "La solicitud de permisos está inactiva",
|
|
142
|
+
"permission.processing_error_callback": "Error de procesamiento",
|
|
143
|
+
"permission.no_active_request_callback": "Error: no hay una solicitud activa",
|
|
144
|
+
"permission.reply.once": "Permitido una vez",
|
|
145
|
+
"permission.reply.always": "Siempre permitido",
|
|
146
|
+
"permission.reply.reject": "Rechazado",
|
|
147
|
+
"permission.send_reply_error": "❌ No se pudo enviar la respuesta de permisos",
|
|
148
|
+
"permission.blocked.expected_reply": "⚠️ Primero responde a la solicitud de permisos usando los botones de arriba.",
|
|
149
|
+
"permission.blocked.command_not_allowed": "⚠️ Este comando no está disponible hasta que respondas a la solicitud de permisos.",
|
|
150
|
+
"permission.header": "{emoji} **Solicitud de permisos: {name}**\n\n",
|
|
151
|
+
"permission.button.allow": "✅ Permitir una vez",
|
|
152
|
+
"permission.button.always": "🔓 Permitir siempre",
|
|
153
|
+
"permission.button.reject": "❌ Rechazar",
|
|
154
|
+
"permission.name.bash": "Bash",
|
|
155
|
+
"permission.name.edit": "Editar",
|
|
156
|
+
"permission.name.write": "Escribir",
|
|
157
|
+
"permission.name.read": "Leer",
|
|
158
|
+
"permission.name.webfetch": "Obtener web",
|
|
159
|
+
"permission.name.websearch": "Buscar en la web",
|
|
160
|
+
"permission.name.glob": "Buscar archivos",
|
|
161
|
+
"permission.name.grep": "Buscar contenido",
|
|
162
|
+
"permission.name.list": "Listar directorio",
|
|
163
|
+
"permission.name.task": "Tarea",
|
|
164
|
+
"permission.name.lsp": "LSP",
|
|
165
|
+
"question.inactive_callback": "La encuesta está inactiva",
|
|
166
|
+
"question.processing_error_callback": "Error de procesamiento",
|
|
167
|
+
"question.select_one_required_callback": "Selecciona al menos una opción",
|
|
168
|
+
"question.enter_custom_callback": "Envía tu respuesta personalizada como mensaje",
|
|
169
|
+
"question.cancelled": "❌ Encuesta cancelada",
|
|
170
|
+
"question.answer_already_received": "Respuesta ya recibida, espera...",
|
|
171
|
+
"question.completed_no_answers": "✅ Encuesta completada (sin respuestas)",
|
|
172
|
+
"question.no_active_project": "❌ No hay un proyecto activo",
|
|
173
|
+
"question.no_active_request": "❌ No hay una solicitud activa",
|
|
174
|
+
"question.send_answers_error": "❌ No se pudieron enviar las respuestas al agente",
|
|
175
|
+
"question.multi_hint": "\n*Puedes seleccionar varias opciones*",
|
|
176
|
+
"question.button.submit": "✅ Listo",
|
|
177
|
+
"question.button.custom": "🔤 Respuesta personalizada",
|
|
178
|
+
"question.button.cancel": "❌ Cancelar",
|
|
179
|
+
"question.use_custom_button_first": '⚠️ Para enviar texto, primero toca "Respuesta personalizada" para la pregunta actual.',
|
|
180
|
+
"question.summary.title": "✅ ¡Encuesta completada!\n\n",
|
|
181
|
+
"question.summary.question": "Pregunta {index}:\n{question}\n\n",
|
|
182
|
+
"question.summary.answer": "Respuesta:\n{answer}\n\n",
|
|
183
|
+
"keyboard.agent_mode": "{emoji} Modo {name}",
|
|
184
|
+
"keyboard.context": "📊 {used} / {limit} ({percent}%)",
|
|
185
|
+
"keyboard.context_empty": "📊 0",
|
|
186
|
+
"keyboard.variant": "💭 {name}",
|
|
187
|
+
"keyboard.variant_default": "💡 Predeterminado",
|
|
188
|
+
"keyboard.updated": "⌨️ Teclado actualizado",
|
|
189
|
+
"pinned.default_session_title": "sesión nueva",
|
|
190
|
+
"pinned.unknown": "Desconocido",
|
|
191
|
+
"pinned.line.project": "Proyecto: {project}",
|
|
192
|
+
"pinned.line.model": "Modelo: {model}",
|
|
193
|
+
"pinned.line.context": "Contexto: {used} / {limit} ({percent}%)",
|
|
194
|
+
"pinned.files.title": "Archivos ({count}):",
|
|
195
|
+
"pinned.files.item": " {path}{diff}",
|
|
196
|
+
"pinned.files.more": " ... y {count} más",
|
|
197
|
+
"tool.todo.overflow": "*({count} tareas más)*",
|
|
198
|
+
"tool.file_header.write": "Escribir archivo/ruta: {path}\n============================================================\n\n",
|
|
199
|
+
"tool.file_header.edit": "Editar archivo/ruta: {path}\n============================================================\n\n",
|
|
200
|
+
"runtime.wizard.ask_token": "Introduce el token del bot de Telegram (obtenlo de @BotFather).\n> ",
|
|
201
|
+
"runtime.wizard.ask_language": "Selecciona el idioma de la interfaz.\nIntroduce el número del idioma de la lista o el código de locale.\nPulsa Enter para mantener el idioma por defecto: {defaultLocale}\n{options}\n> ",
|
|
202
|
+
"runtime.wizard.language_invalid": "Introduce un número de idioma de la lista o un código de locale compatible.\n",
|
|
203
|
+
"runtime.wizard.language_selected": "Idioma seleccionado: {language}\n",
|
|
204
|
+
"runtime.wizard.token_required": "El token es obligatorio. Inténtalo de nuevo.\n",
|
|
205
|
+
"runtime.wizard.token_invalid": "El token parece inválido (se espera el formato <id>:<secret>). Inténtalo de nuevo.\n",
|
|
206
|
+
"runtime.wizard.ask_user_id": "Introduce tu Telegram User ID (puedes obtenerlo de @userinfobot).\n> ",
|
|
207
|
+
"runtime.wizard.user_id_invalid": "Introduce un entero positivo (> 0).\n",
|
|
208
|
+
"runtime.wizard.ask_api_url": "Introduce la URL de la API de OpenCode (opcional).\nPulsa Enter para usar el valor por defecto: {defaultUrl}\n> ",
|
|
209
|
+
"runtime.wizard.api_url_invalid": "Introduce una URL válida (http/https) o pulsa Enter para usar el valor por defecto.\n",
|
|
210
|
+
"runtime.wizard.start": "Configuración de OpenCode Telegram Bot.\n",
|
|
211
|
+
"runtime.wizard.saved": "Configuración guardada:\n- {envPath}\n- {settingsPath}\n",
|
|
212
|
+
"runtime.wizard.not_configured_starting": "La aplicación aún no está configurada. Iniciando el asistente...\n",
|
|
213
|
+
"runtime.wizard.tty_required": "El asistente interactivo requiere un terminal TTY. Ejecuta `opencode-telegram config` en una shell interactiva.",
|
|
214
|
+
"rename.no_session": "⚠️ No hay una sesión activa. Crea o selecciona una sesión primero.",
|
|
215
|
+
"rename.prompt": "📝 Introduce un nuevo título para la sesión:\n\nActual: {title}",
|
|
216
|
+
"rename.empty_title": "⚠️ El título no puede estar vacío.",
|
|
217
|
+
"rename.success": "✅ Sesión renombrada a: {title}",
|
|
218
|
+
"rename.error": "🔴 No se pudo renombrar la sesión.",
|
|
219
|
+
"rename.cancelled": "❌ Cambio de nombre cancelado.",
|
|
220
|
+
"rename.inactive_callback": "La solicitud de cambio de nombre está inactiva",
|
|
221
|
+
"rename.inactive": "⚠️ La solicitud de cambio de nombre no está activa. Ejecuta /rename otra vez.",
|
|
222
|
+
"rename.blocked.expected_name": "⚠️ Introduce el nuevo nombre de la sesión como texto o toca Cancelar en el mensaje de cambio de nombre.",
|
|
223
|
+
"rename.blocked.command_not_allowed": "⚠️ Este comando no está disponible mientras el cambio de nombre espera un nuevo nombre.",
|
|
224
|
+
"rename.button.cancel": "❌ Cancelar",
|
|
225
|
+
"cmd.description.rename": "Renombrar la sesión actual",
|
|
226
|
+
"cli.usage": "Uso:\n opencode-telegram [start] [--mode sources|installed]\n opencode-telegram status\n opencode-telegram stop\n opencode-telegram config\n\nNotas:\n - Sin comando, el valor por defecto es `start`\n - `--mode` actualmente solo se admite para `start`",
|
|
227
|
+
"cli.placeholder.status": "El comando `status` es actualmente un marcador de posición. Las comprobaciones reales de estado se agregarán en la capa de servicio (Fase 5).",
|
|
228
|
+
"cli.placeholder.stop": "El comando `stop` es actualmente un marcador de posición. La detención real del proceso en segundo plano se agregará en la capa de servicio (Fase 5).",
|
|
229
|
+
"cli.placeholder.unavailable": "El comando no esta disponible.",
|
|
230
|
+
"cli.error.prefix": "Error de CLI: {message}",
|
|
231
|
+
"cli.args.unknown_command": "Comando desconocido: {value}",
|
|
232
|
+
"cli.args.mode_requires_value": "La opción --mode requiere un valor: sources|installed",
|
|
233
|
+
"cli.args.invalid_mode": "Valor de --mode inválido: {value}. Se espera sources|installed",
|
|
234
|
+
"cli.args.unknown_option": "Opción desconocida: {value}",
|
|
235
|
+
"cli.args.mode_only_start": "La opción --mode solo se admite para el comando start",
|
|
236
|
+
"legacy.models.fetch_error": "🔴 No se pudo obtener la lista de modelos. Revisa el estado del servidor con /status.",
|
|
237
|
+
"legacy.models.empty": "📋 No hay modelos disponibles. Configura los proveedores en OpenCode.",
|
|
238
|
+
"legacy.models.header": "📋 **Modelos disponibles:**\n\n",
|
|
239
|
+
"legacy.models.no_provider_models": " ⚠️ No hay modelos disponibles\n",
|
|
240
|
+
"legacy.models.env_hint": "💡 Para usar el modelo en .env:\n",
|
|
241
|
+
"legacy.models.error": "🔴 Ocurrió un error al cargar la lista de modelos.",
|
|
242
|
+
"stt.recognizing": "🎤 Reconociendo audio...",
|
|
243
|
+
"stt.recognized": "🎤 Reconocido:\n{text}",
|
|
244
|
+
"stt.not_configured": "🎤 El reconocimiento de voz no está configurado.\n\nConfigura STT_API_URL y STT_API_KEY en .env para habilitarlo.",
|
|
245
|
+
"stt.error": "🔴 No se pudo reconocer el audio: {error}",
|
|
246
|
+
"stt.empty_result": "🎤 No se detectó voz en el mensaje de audio.",
|
|
247
|
+
};
|