termux-dev 1.5.0 → 1.8.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.md +215 -163
- package/assets/banner.svg +23 -28
- package/assets/preview.png +0 -0
- package/assets/preview.svg +94 -0
- package/dist/cli/banner.js +7 -3
- package/dist/cli/clipboard-write.js +55 -0
- package/dist/cli/clipboard.js +182 -106
- package/dist/cli/colors.js +67 -0
- package/dist/cli/confirm.js +50 -0
- package/dist/cli/doctor.js +4 -4
- package/dist/cli/effort.js +80 -0
- package/dist/cli/export.js +3 -3
- package/dist/cli/files.js +19 -5
- package/dist/cli/headless.js +29 -14
- package/dist/cli/index.js +1395 -474
- package/dist/cli/keys.js +69 -0
- package/dist/cli/liveblock.js +45 -0
- package/dist/cli/log.js +19 -0
- package/dist/cli/markdown.js +158 -36
- package/dist/cli/mcp-panel.js +432 -0
- package/dist/cli/permission.js +84 -0
- package/dist/cli/picker.js +135 -0
- package/dist/cli/prompt.js +338 -121
- package/dist/cli/prompt_palette.js +6 -0
- package/dist/cli/resume.js +15 -0
- package/dist/cli/rewind.js +51 -0
- package/dist/cli/runtime_errors.js +6 -0
- package/dist/cli/server.js +85 -24
- package/dist/cli/settings.js +307 -0
- package/dist/cli/statusline.js +27 -1
- package/dist/cli/theme.js +126 -108
- package/dist/cli/transcript.js +114 -0
- package/dist/cli/typeahead.js +371 -0
- package/dist/cli/ui.js +1021 -0
- package/dist/cli/updater.js +23 -21
- package/dist/cli/usage-panel.js +242 -0
- package/dist/cli/width.js +178 -0
- package/dist/core/capabilities.js +433 -0
- package/dist/core/catalog-util.js +27 -0
- package/dist/core/checkpoint.js +90 -0
- package/dist/core/context-stats.js +29 -0
- package/dist/core/cost.js +191 -0
- package/dist/core/formats.js +199 -0
- package/dist/core/history.js +51 -1
- package/dist/core/hooks.js +79 -0
- package/dist/core/i18n.js +42 -0
- package/dist/core/local-config.js +69 -0
- package/dist/core/locales/de.js +210 -0
- package/dist/core/locales/en.js +221 -0
- package/dist/core/locales/es.js +210 -0
- package/dist/core/locales/fr.js +210 -0
- package/dist/core/locales/ja.js +210 -0
- package/dist/core/locales/pt.js +210 -0
- package/dist/core/locales/ru.js +210 -0
- package/dist/core/locales/uk.js +210 -0
- package/dist/core/locales/zh.js +210 -0
- package/dist/core/loop.js +125 -49
- package/dist/core/memory.js +39 -12
- package/dist/core/models.js +33 -20
- package/dist/core/network.js +12 -11
- package/dist/core/notify.js +54 -0
- package/dist/core/planfile.js +43 -0
- package/dist/core/price-catalog.json +1 -0
- package/dist/core/prices.js +249 -0
- package/dist/core/reasoning-catalog.json +1 -0
- package/dist/core/reasoning.js +393 -0
- package/dist/core/redact.js +41 -0
- package/dist/core/secure-file.js +22 -0
- package/dist/core/session.js +16 -5
- package/dist/core/snapshot.js +14 -2
- package/dist/core/title.js +61 -0
- package/dist/core/types.js +1 -1
- package/dist/core/usage.js +43 -7
- package/dist/core/vision-catalog.json +1 -0
- package/dist/core/vision.js +123 -0
- package/dist/mcp/client.js +36 -5
- package/dist/mcp/http-client.js +174 -0
- package/dist/mcp/manager.js +330 -93
- package/dist/permissions/guard.js +385 -117
- package/dist/prompts/builder.js +46 -38
- package/dist/providers/anthropic.js +517 -0
- package/dist/providers/index.js +18 -1
- package/dist/providers/openai.js +138 -125
- package/dist/providers/shared.js +116 -0
- package/dist/providers/toolguard.js +101 -0
- package/dist/tools/bash.js +141 -51
- package/dist/tools/diagnostics.js +76 -48
- package/dist/tools/fs.js +77 -5
- package/dist/tools/index.js +2 -1
- package/dist/tools/mcp.js +72 -0
- package/dist/tools/packages.js +16 -1
- package/dist/tools/plan.js +8 -8
- package/dist/tools/questions.js +50 -54
- package/dist/tools/server.js +6 -0
- package/dist/tools/todo.js +20 -18
- package/dist/tools/web.js +143 -8
- package/package.json +4 -2
- package/assets/preview_work1.png +0 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
export const de = {
|
|
2
|
+
'net.unknown': 'Unbekannter Netzwerkfehler',
|
|
3
|
+
'net.rateLimit': 'API-Anfragelimit überschritten (429)',
|
|
4
|
+
'net.badGateway': 'Gateway des Anbieters vorübergehend nicht erreichbar (502)',
|
|
5
|
+
'net.unavailable': 'Server des Anbieters überlastet (503)',
|
|
6
|
+
'net.gatewayTimeout': 'Zeitüberschreitung am Gateway des Anbieters (504)',
|
|
7
|
+
'net.offline': 'Keine Netzwerkverbindung oder DNS-Fehler (offline)',
|
|
8
|
+
'net.reset': 'Verbindung zum Server wurde zurückgesetzt',
|
|
9
|
+
'net.timeout': 'Zeitüberschreitung der Netzwerkverbindung',
|
|
10
|
+
'net.refused': 'Der Server hat die Verbindung abgelehnt',
|
|
11
|
+
'net.fetchFailed': 'Netzwerkanfrage fehlgeschlagen (Verbindung abgebrochen)',
|
|
12
|
+
'net.generic': 'Internetverbindung gestört',
|
|
13
|
+
'net.failedAfter': 'Netzwerkfehler: Verbindung nach {n} Versuchen nicht wiederhergestellt ({reason}).',
|
|
14
|
+
'conn.unstable': 'Verbindung instabil ({reason})',
|
|
15
|
+
'conn.reconnecting': 'Neuverbindung {attempt}/{max} · neuer Versuch in {delay} s',
|
|
16
|
+
'conn.restored': 'Verbindung wiederhergestellt',
|
|
17
|
+
'conn.classicUnstable': 'Verbindung instabil ({reason})',
|
|
18
|
+
'conn.classicRetry': 'Neuverbindung [{attempt}/{max}] (Pause {delay} s)...',
|
|
19
|
+
'conn.classicWaiting': 'Warte auf das Netzwerk [{attempt}/{max}]...',
|
|
20
|
+
'conn.classicRestored': '✓ Verbindung wiederhergestellt! Die Generierung wird fortgesetzt...',
|
|
21
|
+
'stop.connection': 'Verbindung abgebrochen',
|
|
22
|
+
'stop.stopped': 'gestoppt',
|
|
23
|
+
'stop.interrupted': 'unterbrochen, deine Nachricht wird gesendet',
|
|
24
|
+
'stop.classicConnection': 'Verbindung abgebrochen (Strg+C).',
|
|
25
|
+
'stop.classicStopped': 'Generierung gestoppt (Strg+C).',
|
|
26
|
+
'stop.classicInterrupted': 'Unterbrochen: deine Nachricht wird gesendet.',
|
|
27
|
+
'status.waiting': 'Warte auf das Modell',
|
|
28
|
+
'status.thinking': 'Denkt nach',
|
|
29
|
+
'status.writing': 'Schreibt',
|
|
30
|
+
'status.running': 'Läuft',
|
|
31
|
+
'status.reconnecting': 'Neuverbindung',
|
|
32
|
+
'status.stop': 'ctrl+c zum Stoppen',
|
|
33
|
+
'status.thinkingLine': 'denkt nach',
|
|
34
|
+
'status.thoughtFor': 'nachgedacht: {sec} s',
|
|
35
|
+
'composer.placeholder': 'Aufgabe beschreiben oder etwas fragen…',
|
|
36
|
+
'composer.queued': 'in der Warteschlange',
|
|
37
|
+
'composer.queuedMany': '{n} in der Warteschlange',
|
|
38
|
+
'composer.queuedHint': 'ctrl+enter sendet sofort · ↓ bearbeiten',
|
|
39
|
+
'composer.hint1': 'enter reiht ein · ctrl+c stoppt',
|
|
40
|
+
'composer.hint2': 'enter reiht ein',
|
|
41
|
+
'composer.hint3': 'enter reiht ein · ctrl+c stoppt',
|
|
42
|
+
'composer.hint4': 'enter reiht ein',
|
|
43
|
+
'summary.toolOne': '{n} Werkzeug',
|
|
44
|
+
'summary.toolMany': '{n} Werkzeuge',
|
|
45
|
+
'summary.in': '{n} ein',
|
|
46
|
+
'summary.out': '{n} aus',
|
|
47
|
+
'summary.stopped': 'gestoppt',
|
|
48
|
+
'settings.title': 'Einstellungen',
|
|
49
|
+
'settings.section.appearance': 'Darstellung',
|
|
50
|
+
'settings.section.agent': 'Agent',
|
|
51
|
+
'settings.section.general': 'Allgemein',
|
|
52
|
+
'settings.section.about': 'Info',
|
|
53
|
+
'settings.row.theme': 'Farbschema',
|
|
54
|
+
'settings.row.layout': 'Oberfläche',
|
|
55
|
+
'settings.row.pureBlack': 'Schwarzer Hintergrund',
|
|
56
|
+
'settings.row.autoApprove': 'Auto-Freigabe (YOLO)',
|
|
57
|
+
'settings.row.maxIterations': 'Max. Schritte',
|
|
58
|
+
'settings.row.memory': 'Projektgedächtnis',
|
|
59
|
+
'settings.row.updates': 'Updateprüfung',
|
|
60
|
+
'settings.row.language': 'Sprache',
|
|
61
|
+
'settings.row.about': 'Über devx',
|
|
62
|
+
'settings.short.theme': 'Farben',
|
|
63
|
+
'settings.short.layout': 'Oberfläche',
|
|
64
|
+
'settings.short.pureBlack': 'Schwarz',
|
|
65
|
+
'settings.short.autoApprove': 'YOLO',
|
|
66
|
+
'settings.short.maxIterations': 'Schritte',
|
|
67
|
+
'settings.short.memory': 'Gedächtnis',
|
|
68
|
+
'settings.short.updates': 'Updates',
|
|
69
|
+
'settings.short.language': 'Sprache',
|
|
70
|
+
'settings.short.about': 'Info',
|
|
71
|
+
'settings.value.on': 'an',
|
|
72
|
+
'settings.value.off': 'aus',
|
|
73
|
+
'settings.value.clean': 'Schlicht',
|
|
74
|
+
'settings.value.classic': 'Klassisch',
|
|
75
|
+
'settings.value.unlimited': 'unbegrenzt',
|
|
76
|
+
'settings.value.steps': '{n} Schritte',
|
|
77
|
+
'settings.hint.theme': 'Farben der gesamten Oberfläche. Links und rechts blättern durch die Schemas, das Panel färbt sich sofort um.',
|
|
78
|
+
'settings.hint.layout': 'Schlicht: Eingabe im Rahmen, Karten und ruhige Werkzeugzeilen. Klassisch: das ursprüngliche ASCII-Layout.',
|
|
79
|
+
'settings.hint.pureBlack': 'Setzt den Terminalhintergrund auf tiefes OLED-Schwarz (#0a0a0c). Aus behält deinen eigenen Hintergrund.',
|
|
80
|
+
'settings.hint.autoApprove': 'Überspringt übliche Rückfragen. Gefährliche Befehle und Dateien mit Zugangsdaten fragen weiterhin nach. Gilt nur für diese Sitzung: Beim nächsten Start von devx ist es wieder aus.',
|
|
81
|
+
'settings.hint.maxIterations': 'Wie viele Werkzeugschritte (Dateiänderungen, Befehle) der Agent pro Anfrage ausführen darf.',
|
|
82
|
+
'settings.hint.memory': 'Lädt die Regeln aus .devx/memory.md in jede Sitzung.',
|
|
83
|
+
'settings.hint.updates': 'Sucht beim Start auf GitHub nach einer neuen devx-Version. /update funktioniert in jedem Fall.',
|
|
84
|
+
'settings.hint.language': 'Sprache der Oberfläche: Meldungen, Einstellungen und Hinweise. Code und Werkzeugnamen bleiben englisch.',
|
|
85
|
+
'settings.hint.about': 'KI-Coding-Agent für das Terminal von ApvCode. MIT-Lizenz. github.com/apvcode/Termux-Dev',
|
|
86
|
+
'settings.warnYolo': 'An: Der Agent führt Befehle aus und ändert Dateien ohne Rückfrage.',
|
|
87
|
+
'settings.keys.move': 'wählen',
|
|
88
|
+
'settings.keys.change': 'ändern',
|
|
89
|
+
'settings.keys.toggle': 'umschalten',
|
|
90
|
+
'settings.keys.close': 'schließen',
|
|
91
|
+
// ── /mcp panel
|
|
92
|
+
'mcp.title': 'MCP-Server',
|
|
93
|
+
'mcp.count': 'Server: {n}',
|
|
94
|
+
'mcp.scope.user': 'Eigene Server',
|
|
95
|
+
'mcp.scope.project': 'Projekt-Server',
|
|
96
|
+
'mcp.toolsCount': 'Werkzeuge: {n}',
|
|
97
|
+
'mcp.status.connected': 'verbunden',
|
|
98
|
+
'mcp.status.connecting': 'verbindet…',
|
|
99
|
+
'mcp.status.failed': 'fehlgeschlagen',
|
|
100
|
+
'mcp.status.disabled': 'deaktiviert',
|
|
101
|
+
'mcp.empty': 'Keine MCP-Server konfiguriert.',
|
|
102
|
+
'mcp.emptyHint': 'Mit /mcp import übernimmst du die Server von Claude Code, mit /mcp add <Name> <Befehl> [Argumente] fügst du einen hinzu.',
|
|
103
|
+
'mcp.detail.status': 'Status',
|
|
104
|
+
'mcp.detail.command': 'Befehl',
|
|
105
|
+
'mcp.detail.config': 'Konfig',
|
|
106
|
+
'mcp.detail.capabilities': 'Fähigkeiten',
|
|
107
|
+
'mcp.detail.tools': 'Werkzeuge',
|
|
108
|
+
'mcp.detail.error': 'Fehler',
|
|
109
|
+
'mcp.action.tools': 'Werkzeuge anzeigen',
|
|
110
|
+
'mcp.action.reconnect': 'Neu verbinden',
|
|
111
|
+
'mcp.action.disable': 'Deaktivieren',
|
|
112
|
+
'mcp.action.enable': 'Aktivieren',
|
|
113
|
+
'mcp.toolsTitle': 'Werkzeuge von {name}',
|
|
114
|
+
'mcp.noTools': 'Dieser Server bietet keine Werkzeuge.',
|
|
115
|
+
'mcp.tag.readOnly': 'nur lesend',
|
|
116
|
+
'mcp.tag.destructive': 'zerstörend',
|
|
117
|
+
'mcp.tag.openWorld': 'offene Welt',
|
|
118
|
+
'mcp.params': 'Parameter',
|
|
119
|
+
'mcp.noParams': 'Keine Parameter.',
|
|
120
|
+
'mcp.required': 'erforderlich',
|
|
121
|
+
'mcp.more': '{n} weitere',
|
|
122
|
+
'mcp.keys.open': 'öffnen',
|
|
123
|
+
'mcp.keys.back': 'zurück',
|
|
124
|
+
'mcp.keys.reload': 'alle neu laden',
|
|
125
|
+
'mcp.keys.close': 'schließen',
|
|
126
|
+
// ── questions from the agent
|
|
127
|
+
'questions.title': 'Frage',
|
|
128
|
+
'questions.custom': 'Eigene Antwort eingeben…',
|
|
129
|
+
'questions.skip': 'Überspringen',
|
|
130
|
+
'questions.skipped': '(übersprungen)',
|
|
131
|
+
'questions.yourAnswer': 'Deine Antwort:',
|
|
132
|
+
'questions.empty': 'Die Antwort darf nicht leer sein',
|
|
133
|
+
// ── confirmations
|
|
134
|
+
'confirm.yes': 'Ja',
|
|
135
|
+
'confirm.no': 'Nein',
|
|
136
|
+
'confirm.exitTitle': 'beenden',
|
|
137
|
+
'confirm.exit': 'devx beenden?',
|
|
138
|
+
'confirm.goodbye': 'Bis bald',
|
|
139
|
+
'confirm.deleteAll': 'ALLE {n} gespeicherten Sitzungen löschen?',
|
|
140
|
+
'confirm.update': 'devx jetzt auf v{version} aktualisieren?',
|
|
141
|
+
'confirm.commit': 'Änderungen mit dieser Nachricht committen?',
|
|
142
|
+
'trust.title': 'Vertrauen in den Ordner',
|
|
143
|
+
'trust.question': 'Erstes Mal in diesem Ordner. Ihm vertrauen und den Agenten hier arbeiten lassen?',
|
|
144
|
+
'trust.yes': 'Ja, diesem Ordner vertrauen',
|
|
145
|
+
'trust.no': 'Nein, beenden',
|
|
146
|
+
'trust.wantsYolo': 'Die Projektkonfiguration verlangt Auto-Freigabe (YOLO)',
|
|
147
|
+
'trust.wantsAllowlist': 'Die Projektkonfiguration erlaubt diese Befehle: {list}',
|
|
148
|
+
'trust.exiting': 'Ordner nicht vertraut, devx wird beendet',
|
|
149
|
+
'trust.mcpQuestion': 'Dieses Projekt will MCP-Server starten (lokale Programme, oben aufgeführt). Erlauben?',
|
|
150
|
+
// ── view switches
|
|
151
|
+
'view.expandThought': 'ctrl+p zum Aufklappen',
|
|
152
|
+
'view.expandOutput': 'ctrl+o zum Aufklappen',
|
|
153
|
+
'view.moreLines': '… +{n} Zeilen',
|
|
154
|
+
// ── plan approval
|
|
155
|
+
'plan.cardTitle': 'Plan',
|
|
156
|
+
'plan.files': 'Dateien',
|
|
157
|
+
'plan.ready': 'Der Plan steht. Mit der Arbeit beginnen?',
|
|
158
|
+
'plan.go': 'Go: in den AGENT-Modus wechseln und starten',
|
|
159
|
+
'plan.edit': 'Plan ändern (im PLAN-Modus bleiben)',
|
|
160
|
+
'plan.editHint': 'Sag, was geändert werden soll: Der Plan bleibt im PLAN-Modus und wird überarbeitet.',
|
|
161
|
+
'plan.started': 'AGENT-Modus: Arbeit am freigegebenen Plan',
|
|
162
|
+
// ── undo
|
|
163
|
+
'undo.question': '{n} Datei(en) auf den Stand vor dem letzten Durchgang zurücksetzen?',
|
|
164
|
+
'undo.note': 'Auch das, was Shell-Befehle getan haben. Von git ignorierte Dateien bleiben unberührt.',
|
|
165
|
+
'undo.done': '{n} Datei(en) wiederhergestellt',
|
|
166
|
+
// ── permissions
|
|
167
|
+
'permissions.title': 'Ohne Rückfrage erlaubt',
|
|
168
|
+
'permissions.none': 'Noch nichts ist ohne Rückfrage erlaubt: Antworte auf einer Freigabekarte mit „Session“ oder „Always“.',
|
|
169
|
+
'permissions.hint': '/permissions clear entfernt alles (auch das für die Sitzung).',
|
|
170
|
+
'permissions.cleared': 'Alles, was ohne Rückfrage erlaubt war, wurde entfernt',
|
|
171
|
+
// ── cost limit
|
|
172
|
+
'settings.row.costLimit': 'Kostenlimit',
|
|
173
|
+
'settings.short.costLimit': 'Limit $',
|
|
174
|
+
'settings.hint.costLimit': 'Das Meiste, was eine Sitzung kosten darf. Bei 80 % warnt devx, am Limit stoppt es die Aufgabe und fragt, bevor es weiter Geld ausgibt.',
|
|
175
|
+
'cost.title': 'Kostenlimit',
|
|
176
|
+
'cost.warn': '{spent} ausgegeben: 80 % des Limits von {limit} dieser Sitzung',
|
|
177
|
+
'cost.stopped': 'Kostenlimit von {limit} erreicht: Die Aufgabe wurde gestoppt',
|
|
178
|
+
'cost.reached': 'Diese Sitzung hat {spent} von ihrem Limit {limit} ausgegeben. Weiter ausgeben?',
|
|
179
|
+
'cost.raise': 'Wenn du weitermachst, steigt das Limit dieser Sitzung auf {limit}.',
|
|
180
|
+
'cost.continue': 'Ja, weitermachen',
|
|
181
|
+
'cost.cancel': 'Nein, jetzt nicht',
|
|
182
|
+
'cost.cancelled': 'Nichts wurde gesendet. Deine Nachricht steht wieder in der Eingabezeile.',
|
|
183
|
+
// ── /copy and /rename
|
|
184
|
+
'copy.none': 'Es gibt noch keine Antwort zum Kopieren.',
|
|
185
|
+
'copy.done': 'Letzte Antwort kopiert ({n} Zeichen)',
|
|
186
|
+
'copy.failed': 'Zwischenablage nicht erreichbar (kein wl-copy, xclip, xsel, und die Antwort ist zu lang für das Terminal).',
|
|
187
|
+
'rename.done': 'Chat umbenannt: {name}',
|
|
188
|
+
'rename.usage': 'Verwendung: /rename <Name>. Ohne Namen benennt die KI den Chat neu, sobald es eine erste Antwort gibt.',
|
|
189
|
+
'rename.failed': 'Die KI hat keinen Namen gefunden. Versuche es erneut oder gib einen an: /rename <Name>.',
|
|
190
|
+
// ── memory
|
|
191
|
+
'memory.capped': 'Das Gedächtnis ist lang: {n} der ältesten Fakten gehen nicht an das Modell (nur die neuesten passen). Entferne alte aus .devx/memory.md.',
|
|
192
|
+
'mcp.removeUsage': 'Verwendung: /mcp remove <Name>',
|
|
193
|
+
'mcp.removeNotFound': '„{name}“ steht nicht in ~/.devx/mcp.json. Ein Server aus einer anderen Datei (Projekt, ~/.devxrc.json) muss dort von Hand entfernt werden.',
|
|
194
|
+
'mcp.removed': 'Server „{name}“ entfernt',
|
|
195
|
+
// ── /rewind
|
|
196
|
+
'rewind.title': 'zurückspulen',
|
|
197
|
+
'rewind.count': '{n} Nachrichten',
|
|
198
|
+
'rewind.current': '(aktuell: hier bleiben)',
|
|
199
|
+
'rewind.none': 'Es gibt noch keine Nachricht von dir, zu der man zurückkehren kann.',
|
|
200
|
+
'rewind.later': '{n} danach',
|
|
201
|
+
'rewind.ago.now': 'gerade eben',
|
|
202
|
+
'rewind.ago.min': 'vor {n} Min.',
|
|
203
|
+
'rewind.ago.hour': 'vor {n} Std.',
|
|
204
|
+
'rewind.ago.day': 'vor {n} Tg.',
|
|
205
|
+
'rewind.filesQuestion': 'Auch die Dateien ({n}) auf den damaligen Stand zurücksetzen?',
|
|
206
|
+
'rewind.filesYes': 'Ja, auch die Dateien',
|
|
207
|
+
'rewind.filesNo': 'Nein, nur das Gespräch',
|
|
208
|
+
'rewind.done': 'Zurück bei deiner Nachricht. Was danach kam, ist weg, auch für das Modell. Ändere die Nachricht und sende sie.',
|
|
209
|
+
'rewind.doneImages': 'Zurück bei deiner Nachricht (ihre Bilder blieben nicht erhalten, hänge sie erneut an). Was danach kam, ist weg, auch für das Modell.',
|
|
210
|
+
};
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* English: the source of truth. Every other language has exactly these keys (the compiler
|
|
3
|
+
* checks it) and falls back to this text when a key is ever missing at run time.
|
|
4
|
+
* `{name}` marks a value that is filled in by `t()`.
|
|
5
|
+
*/
|
|
6
|
+
export const en = {
|
|
7
|
+
// ── network errors
|
|
8
|
+
'net.unknown': 'Unknown network error',
|
|
9
|
+
'net.rateLimit': 'API rate limit exceeded (429)',
|
|
10
|
+
'net.badGateway': 'Provider gateway is temporarily unavailable (502)',
|
|
11
|
+
'net.unavailable': 'Provider server is overloaded (503)',
|
|
12
|
+
'net.gatewayTimeout': 'Provider gateway timed out (504)',
|
|
13
|
+
'net.offline': 'No network connection or DNS failure (offline)',
|
|
14
|
+
'net.reset': 'Connection to the server was reset',
|
|
15
|
+
'net.timeout': 'Network connection timed out',
|
|
16
|
+
'net.refused': 'The server refused the connection',
|
|
17
|
+
'net.fetchFailed': 'Network request failed (connection dropped)',
|
|
18
|
+
'net.generic': 'Internet connection failure',
|
|
19
|
+
'net.failedAfter': 'Network error: could not restore the connection after {n} attempts ({reason}).',
|
|
20
|
+
// ── connection and stopping
|
|
21
|
+
'conn.unstable': 'connection unstable ({reason})',
|
|
22
|
+
'conn.reconnecting': 'reconnecting {attempt}/{max} · retry in {delay}s',
|
|
23
|
+
'conn.restored': 'connection restored',
|
|
24
|
+
'conn.classicUnstable': 'Connection unstable ({reason})',
|
|
25
|
+
'conn.classicRetry': 'Reconnecting [{attempt}/{max}] (pause {delay}s)...',
|
|
26
|
+
'conn.classicWaiting': 'Waiting for the network [{attempt}/{max}]...',
|
|
27
|
+
'conn.classicRestored': '✓ Connection restored! Resuming generation...',
|
|
28
|
+
'stop.connection': 'connection cancelled',
|
|
29
|
+
'stop.stopped': 'stopped',
|
|
30
|
+
'stop.interrupted': 'interrupted, sending your message',
|
|
31
|
+
'stop.classicConnection': 'Connection cancelled (Ctrl+C).',
|
|
32
|
+
'stop.classicStopped': 'Generation stopped (Ctrl+C).',
|
|
33
|
+
'stop.classicInterrupted': 'Interrupted: sending your message.',
|
|
34
|
+
// ── the working line
|
|
35
|
+
'status.waiting': 'Waiting for the model',
|
|
36
|
+
'status.thinking': 'Thinking',
|
|
37
|
+
'status.writing': 'Writing',
|
|
38
|
+
'status.running': 'Running',
|
|
39
|
+
'status.reconnecting': 'Reconnecting',
|
|
40
|
+
'status.stop': 'ctrl+c to stop',
|
|
41
|
+
'status.thinkingLine': 'thinking',
|
|
42
|
+
'status.thoughtFor': 'thought for {sec}s',
|
|
43
|
+
// ── typing while the agent works
|
|
44
|
+
'composer.placeholder': 'Ask or describe a task…',
|
|
45
|
+
'composer.queued': 'queued',
|
|
46
|
+
'composer.queuedMany': '{n} queued',
|
|
47
|
+
'composer.queuedHint': 'ctrl+enter sends now · ↓ edit',
|
|
48
|
+
'composer.hint1': 'enter queues · ctrl+c stop',
|
|
49
|
+
'composer.hint2': 'enter queues',
|
|
50
|
+
'composer.hint3': 'enter queues · ctrl+c stop',
|
|
51
|
+
'composer.hint4': 'enter queues',
|
|
52
|
+
// ── end of a turn
|
|
53
|
+
'summary.toolOne': '{n} tool',
|
|
54
|
+
'summary.toolMany': '{n} tools',
|
|
55
|
+
'summary.in': '{n} in',
|
|
56
|
+
'summary.out': '{n} out',
|
|
57
|
+
'summary.stopped': 'stopped',
|
|
58
|
+
// ── settings
|
|
59
|
+
'settings.title': 'settings',
|
|
60
|
+
'settings.section.appearance': 'Appearance',
|
|
61
|
+
'settings.section.agent': 'Agent',
|
|
62
|
+
'settings.section.general': 'General',
|
|
63
|
+
'settings.section.about': 'About',
|
|
64
|
+
'settings.row.theme': 'Theme',
|
|
65
|
+
'settings.row.layout': 'Interface',
|
|
66
|
+
'settings.row.pureBlack': 'Black background',
|
|
67
|
+
'settings.row.autoApprove': 'Auto-approve (YOLO)',
|
|
68
|
+
'settings.row.maxIterations': 'Max iterations',
|
|
69
|
+
'settings.row.memory': 'Project memory',
|
|
70
|
+
'settings.row.updates': 'Update check',
|
|
71
|
+
'settings.row.language': 'Language',
|
|
72
|
+
'settings.row.about': 'About devx',
|
|
73
|
+
'settings.short.theme': 'Theme',
|
|
74
|
+
'settings.short.layout': 'Interface',
|
|
75
|
+
'settings.short.pureBlack': 'Black bg',
|
|
76
|
+
'settings.short.autoApprove': 'YOLO mode',
|
|
77
|
+
'settings.short.maxIterations': 'Iterations',
|
|
78
|
+
'settings.short.memory': 'Memory',
|
|
79
|
+
'settings.short.updates': 'Updates',
|
|
80
|
+
'settings.short.language': 'Language',
|
|
81
|
+
'settings.short.about': 'About',
|
|
82
|
+
'settings.value.on': 'on',
|
|
83
|
+
'settings.value.off': 'off',
|
|
84
|
+
'settings.value.clean': 'Clean',
|
|
85
|
+
'settings.value.classic': 'Classic',
|
|
86
|
+
'settings.value.unlimited': 'unlimited',
|
|
87
|
+
'settings.value.steps': '{n} steps',
|
|
88
|
+
'settings.hint.theme': 'Colours of the whole interface. Left and right browse the themes, the panel recolours as you go.',
|
|
89
|
+
'settings.hint.layout': 'Clean: framed prompt, cards and quiet tool lines. Classic: the original ASCII layout.',
|
|
90
|
+
'settings.hint.pureBlack': 'Sets the terminal background to deep OLED black (#0a0a0c). Off keeps your own background.',
|
|
91
|
+
'settings.hint.autoApprove': 'Skips routine permission prompts. Dangerous commands and credential files still ask first. Lasts for this session only: it is off again the next time devx starts.',
|
|
92
|
+
'settings.hint.maxIterations': 'How many tool steps (file edits, commands) the agent may take for one request.',
|
|
93
|
+
'settings.hint.memory': 'Loads the rules from .devx/memory.md into every session.',
|
|
94
|
+
'settings.hint.updates': 'Looks for a new devx version on GitHub at startup. /update works either way.',
|
|
95
|
+
'settings.hint.language': 'Language of the interface: messages, settings and hints. Code and tool names stay in English.',
|
|
96
|
+
'settings.hint.about': 'Terminal-native AI coding agent by ApvCode. MIT license. github.com/apvcode/Termux-Dev',
|
|
97
|
+
'settings.warnYolo': 'On: the agent runs commands and edits files without asking.',
|
|
98
|
+
'settings.keys.move': 'move',
|
|
99
|
+
'settings.keys.change': 'change',
|
|
100
|
+
'settings.keys.toggle': 'toggle',
|
|
101
|
+
'settings.keys.close': 'close',
|
|
102
|
+
// ── /mcp panel
|
|
103
|
+
'mcp.title': 'MCP servers',
|
|
104
|
+
'mcp.count': 'servers: {n}',
|
|
105
|
+
'mcp.scope.user': 'User servers',
|
|
106
|
+
'mcp.scope.project': 'Project servers',
|
|
107
|
+
'mcp.toolsCount': 'tools: {n}',
|
|
108
|
+
'mcp.status.connected': 'connected',
|
|
109
|
+
'mcp.status.connecting': 'connecting…',
|
|
110
|
+
'mcp.status.failed': 'failed',
|
|
111
|
+
'mcp.status.disabled': 'disabled',
|
|
112
|
+
'mcp.empty': 'No MCP servers configured.',
|
|
113
|
+
'mcp.emptyHint': 'Run /mcp import to take the servers of Claude Code, or /mcp add <name> <command> [args].',
|
|
114
|
+
'mcp.detail.status': 'Status',
|
|
115
|
+
'mcp.detail.command': 'Command',
|
|
116
|
+
'mcp.detail.config': 'Config',
|
|
117
|
+
'mcp.detail.capabilities': 'Capabilities',
|
|
118
|
+
'mcp.detail.tools': 'Tools',
|
|
119
|
+
'mcp.detail.error': 'Error',
|
|
120
|
+
'mcp.action.tools': 'View tools',
|
|
121
|
+
'mcp.action.reconnect': 'Reconnect',
|
|
122
|
+
'mcp.action.disable': 'Disable',
|
|
123
|
+
'mcp.action.enable': 'Enable',
|
|
124
|
+
'mcp.toolsTitle': 'Tools of {name}',
|
|
125
|
+
'mcp.noTools': 'This server offers no tools.',
|
|
126
|
+
'mcp.tag.readOnly': 'read-only',
|
|
127
|
+
'mcp.tag.destructive': 'destructive',
|
|
128
|
+
'mcp.tag.openWorld': 'open-world',
|
|
129
|
+
'mcp.params': 'Parameters',
|
|
130
|
+
'mcp.noParams': 'No parameters.',
|
|
131
|
+
'mcp.required': 'required',
|
|
132
|
+
'mcp.more': '{n} more',
|
|
133
|
+
'mcp.keys.open': 'open',
|
|
134
|
+
'mcp.keys.back': 'back',
|
|
135
|
+
'mcp.keys.reload': 'reload all',
|
|
136
|
+
'mcp.keys.close': 'close',
|
|
137
|
+
// ── questions from the agent
|
|
138
|
+
'questions.title': 'Question',
|
|
139
|
+
'questions.custom': 'Type your own answer…',
|
|
140
|
+
'questions.skip': 'Skip',
|
|
141
|
+
'questions.skipped': '(skipped)',
|
|
142
|
+
'questions.yourAnswer': 'Your answer:',
|
|
143
|
+
'questions.empty': 'The answer cannot be empty',
|
|
144
|
+
// ── confirmations
|
|
145
|
+
'confirm.yes': 'Yes',
|
|
146
|
+
'confirm.no': 'No',
|
|
147
|
+
'confirm.exitTitle': 'exit',
|
|
148
|
+
'confirm.exit': 'Exit devx?',
|
|
149
|
+
'confirm.goodbye': 'Goodbye',
|
|
150
|
+
'confirm.deleteAll': 'Delete ALL {n} saved sessions?',
|
|
151
|
+
'confirm.update': 'Update devx to v{version} now?',
|
|
152
|
+
'confirm.commit': 'Commit the changes with this message?',
|
|
153
|
+
'trust.title': 'workspace trust',
|
|
154
|
+
'trust.question': 'First time in this folder. Trust it and let the agent work here?',
|
|
155
|
+
'trust.yes': 'Yes, trust this folder',
|
|
156
|
+
'trust.no': 'No, exit',
|
|
157
|
+
'trust.wantsYolo': 'The project config asks for auto-approve (YOLO)',
|
|
158
|
+
'trust.wantsAllowlist': 'The project config allows these commands: {list}',
|
|
159
|
+
'trust.exiting': 'Folder not trusted, exiting devx',
|
|
160
|
+
'trust.mcpQuestion': 'This project wants to start MCP servers (local programs, listed above). Allow?',
|
|
161
|
+
// ── view switches
|
|
162
|
+
'view.expandThought': 'ctrl+p to expand',
|
|
163
|
+
'view.expandOutput': 'ctrl+o to expand',
|
|
164
|
+
'view.moreLines': '… +{n} lines',
|
|
165
|
+
// ── plan approval
|
|
166
|
+
'plan.cardTitle': 'Plan',
|
|
167
|
+
'plan.files': 'Files',
|
|
168
|
+
'plan.ready': 'The plan is ready. Start working on it?',
|
|
169
|
+
'plan.go': 'Go: switch to AGENT mode and start',
|
|
170
|
+
'plan.edit': 'Change the plan (stay in PLAN mode)',
|
|
171
|
+
'plan.editHint': 'Say what to change: the plan stays in PLAN mode and is redone.',
|
|
172
|
+
'plan.started': 'AGENT mode: working on the approved plan',
|
|
173
|
+
// ── undo
|
|
174
|
+
'undo.question': 'Put {n} file(s) back to how they were before the last turn?',
|
|
175
|
+
'undo.note': 'Includes what shell commands did. Files ignored by git are not touched.',
|
|
176
|
+
'undo.done': 'Restored {n} file(s)',
|
|
177
|
+
// ── permissions
|
|
178
|
+
'permissions.title': 'Allowed without asking',
|
|
179
|
+
'permissions.none': 'Nothing is allowed without asking yet: answer "Session" or "Always" on an approval card to add something.',
|
|
180
|
+
'permissions.hint': '/permissions clear removes all of it (the session ones too).',
|
|
181
|
+
'permissions.cleared': 'Everything allowed without asking was removed',
|
|
182
|
+
// ── cost limit
|
|
183
|
+
'settings.row.costLimit': 'Cost limit',
|
|
184
|
+
'settings.short.costLimit': 'Cost cap',
|
|
185
|
+
'settings.hint.costLimit': 'The most one session may cost. At 80% devx warns you, at the limit it stops the task and asks before it spends more.',
|
|
186
|
+
'cost.title': 'cost limit',
|
|
187
|
+
'cost.warn': '{spent} spent: 80% of the {limit} limit of this session',
|
|
188
|
+
'cost.stopped': 'Cost limit of {limit} reached: the task is stopped',
|
|
189
|
+
'cost.reached': 'This session has spent {spent} of its {limit} limit. Spend more?',
|
|
190
|
+
'cost.raise': 'Continuing raises the limit of this session to {limit}.',
|
|
191
|
+
'cost.continue': 'Yes, continue',
|
|
192
|
+
'cost.cancel': 'No, not now',
|
|
193
|
+
'cost.cancelled': 'Nothing was sent. Your message is back in the input line.',
|
|
194
|
+
// ── /copy and /rename
|
|
195
|
+
'copy.none': 'There is no answer to copy yet.',
|
|
196
|
+
'copy.done': 'Copied the last answer ({n} characters)',
|
|
197
|
+
'copy.failed': 'Could not reach the clipboard (no wl-copy, xclip, xsel, and the answer is too long for the terminal).',
|
|
198
|
+
'rename.done': 'Chat renamed: {name}',
|
|
199
|
+
'rename.usage': 'Usage: /rename <name>. Without a name the AI names the chat again, once there is a first answer.',
|
|
200
|
+
'rename.failed': 'The AI did not come up with a name. Try again or give one: /rename <name>.',
|
|
201
|
+
// ── memory
|
|
202
|
+
'memory.capped': 'The memory is long: {n} of the oldest facts are not sent to the model (only the newest fit). Remove old ones from .devx/memory.md.',
|
|
203
|
+
'mcp.removeUsage': 'Usage: /mcp remove <name>',
|
|
204
|
+
'mcp.removeNotFound': '"{name}" is not in ~/.devx/mcp.json. A server of another file (the project, ~/.devxrc.json) has to be removed from that file by hand.',
|
|
205
|
+
'mcp.removed': 'Server "{name}" removed',
|
|
206
|
+
// ── /rewind
|
|
207
|
+
'rewind.title': 'rewind',
|
|
208
|
+
'rewind.count': '{n} messages',
|
|
209
|
+
'rewind.current': '(current: stay here)',
|
|
210
|
+
'rewind.none': 'There is no message of yours to go back to yet.',
|
|
211
|
+
'rewind.later': '{n} after it',
|
|
212
|
+
'rewind.ago.now': 'just now',
|
|
213
|
+
'rewind.ago.min': '{n}m ago',
|
|
214
|
+
'rewind.ago.hour': '{n}h ago',
|
|
215
|
+
'rewind.ago.day': '{n}d ago',
|
|
216
|
+
'rewind.filesQuestion': 'Put the files ({n}) back to how they were then, too?',
|
|
217
|
+
'rewind.filesYes': 'Yes, files too',
|
|
218
|
+
'rewind.filesNo': 'No, only the conversation',
|
|
219
|
+
'rewind.done': 'Back at your message. What came after it is gone, for the model too. Edit the message and send it.',
|
|
220
|
+
'rewind.doneImages': 'Back at your message (its images were not kept, attach them again). What came after it is gone, for the model too.',
|
|
221
|
+
};
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
export const es = {
|
|
2
|
+
'net.unknown': 'Error de red desconocido',
|
|
3
|
+
'net.rateLimit': 'Se superó el límite de solicitudes de la API (429)',
|
|
4
|
+
'net.badGateway': 'La pasarela del proveedor no está disponible por ahora (502)',
|
|
5
|
+
'net.unavailable': 'El servidor del proveedor está sobrecargado (503)',
|
|
6
|
+
'net.gatewayTimeout': 'Tiempo de espera agotado en la pasarela del proveedor (504)',
|
|
7
|
+
'net.offline': 'Sin conexión de red o fallo de DNS (offline)',
|
|
8
|
+
'net.reset': 'Se restableció la conexión con el servidor',
|
|
9
|
+
'net.timeout': 'Tiempo de espera de la conexión de red agotado',
|
|
10
|
+
'net.refused': 'El servidor rechazó la conexión',
|
|
11
|
+
'net.fetchFailed': 'Falló la solicitud de red (conexión interrumpida)',
|
|
12
|
+
'net.generic': 'Fallo de la conexión a internet',
|
|
13
|
+
'net.failedAfter': 'Error de red: no se pudo restablecer la conexión tras {n} intentos ({reason}).',
|
|
14
|
+
'conn.unstable': 'conexión inestable ({reason})',
|
|
15
|
+
'conn.reconnecting': 'reconectando {attempt}/{max} · reintento en {delay} s',
|
|
16
|
+
'conn.restored': 'conexión restablecida',
|
|
17
|
+
'conn.classicUnstable': 'Conexión inestable ({reason})',
|
|
18
|
+
'conn.classicRetry': 'Reconectando [{attempt}/{max}] (pausa {delay} s)...',
|
|
19
|
+
'conn.classicWaiting': 'Esperando la red [{attempt}/{max}]...',
|
|
20
|
+
'conn.classicRestored': '✓ ¡Conexión restablecida! Se reanuda la generación...',
|
|
21
|
+
'stop.connection': 'conexión cancelada',
|
|
22
|
+
'stop.stopped': 'detenido',
|
|
23
|
+
'stop.interrupted': 'interrumpido, enviando tu mensaje',
|
|
24
|
+
'stop.classicConnection': 'Conexión cancelada (Ctrl+C).',
|
|
25
|
+
'stop.classicStopped': 'Generación detenida (Ctrl+C).',
|
|
26
|
+
'stop.classicInterrupted': 'Interrumpido: enviando tu mensaje.',
|
|
27
|
+
'status.waiting': 'Esperando al modelo',
|
|
28
|
+
'status.thinking': 'Pensando',
|
|
29
|
+
'status.writing': 'Escribiendo',
|
|
30
|
+
'status.running': 'Ejecutando',
|
|
31
|
+
'status.reconnecting': 'Reconectando',
|
|
32
|
+
'status.stop': 'ctrl+c para detener',
|
|
33
|
+
'status.thinkingLine': 'pensando',
|
|
34
|
+
'status.thoughtFor': 'pensó {sec} s',
|
|
35
|
+
'composer.placeholder': 'Describe una tarea o haz una pregunta…',
|
|
36
|
+
'composer.queued': 'en cola',
|
|
37
|
+
'composer.queuedMany': '{n} en cola',
|
|
38
|
+
'composer.queuedHint': 'ctrl+enter envía ya · ↓ editar',
|
|
39
|
+
'composer.hint1': 'enter en cola · ctrl+c detiene',
|
|
40
|
+
'composer.hint2': 'enter en cola',
|
|
41
|
+
'composer.hint3': 'enter en cola · ctrl+c detiene',
|
|
42
|
+
'composer.hint4': 'enter en cola',
|
|
43
|
+
'summary.toolOne': '{n} herramienta',
|
|
44
|
+
'summary.toolMany': '{n} herramientas',
|
|
45
|
+
'summary.in': '{n} entrada',
|
|
46
|
+
'summary.out': '{n} salida',
|
|
47
|
+
'summary.stopped': 'detenido',
|
|
48
|
+
'settings.title': 'ajustes',
|
|
49
|
+
'settings.section.appearance': 'Apariencia',
|
|
50
|
+
'settings.section.agent': 'Agente',
|
|
51
|
+
'settings.section.general': 'General',
|
|
52
|
+
'settings.section.about': 'Acerca de',
|
|
53
|
+
'settings.row.theme': 'Tema',
|
|
54
|
+
'settings.row.layout': 'Interfaz',
|
|
55
|
+
'settings.row.pureBlack': 'Fondo negro',
|
|
56
|
+
'settings.row.autoApprove': 'Autoaprobar (YOLO)',
|
|
57
|
+
'settings.row.maxIterations': 'Máx. pasos',
|
|
58
|
+
'settings.row.memory': 'Memoria del proyecto',
|
|
59
|
+
'settings.row.updates': 'Buscar actualizaciones',
|
|
60
|
+
'settings.row.language': 'Idioma',
|
|
61
|
+
'settings.row.about': 'Acerca de devx',
|
|
62
|
+
'settings.short.theme': 'Tema',
|
|
63
|
+
'settings.short.layout': 'Interfaz',
|
|
64
|
+
'settings.short.pureBlack': 'Fondo negro',
|
|
65
|
+
'settings.short.autoApprove': 'YOLO',
|
|
66
|
+
'settings.short.maxIterations': 'Pasos',
|
|
67
|
+
'settings.short.memory': 'Memoria',
|
|
68
|
+
'settings.short.updates': 'Actualiz.',
|
|
69
|
+
'settings.short.language': 'Idioma',
|
|
70
|
+
'settings.short.about': 'Acerca de',
|
|
71
|
+
'settings.value.on': 'sí',
|
|
72
|
+
'settings.value.off': 'no',
|
|
73
|
+
'settings.value.clean': 'Limpia',
|
|
74
|
+
'settings.value.classic': 'Clásica',
|
|
75
|
+
'settings.value.unlimited': 'sin límite',
|
|
76
|
+
'settings.value.steps': '{n} pasos',
|
|
77
|
+
'settings.hint.theme': 'Colores de toda la interfaz. Izquierda y derecha recorren los temas; el panel cambia de color al instante.',
|
|
78
|
+
'settings.hint.layout': 'Limpia: entrada enmarcada, tarjetas y líneas de herramientas discretas. Clásica: el diseño ASCII original.',
|
|
79
|
+
'settings.hint.pureBlack': 'Pone el fondo del terminal en negro OLED profundo (#0a0a0c). Desactivado conserva tu propio fondo.',
|
|
80
|
+
'settings.hint.autoApprove': 'Omite los permisos habituales. Los comandos peligrosos y los archivos de credenciales siguen preguntando. Solo dura esta sesión: al volver a iniciar devx vuelve a estar desactivado.',
|
|
81
|
+
'settings.hint.maxIterations': 'Cuántos pasos con herramientas (ediciones, comandos) puede dar el agente por solicitud.',
|
|
82
|
+
'settings.hint.memory': 'Carga las reglas de .devx/memory.md en cada sesión.',
|
|
83
|
+
'settings.hint.updates': 'Busca una nueva versión de devx en GitHub al iniciar. /update funciona en cualquier caso.',
|
|
84
|
+
'settings.hint.language': 'Idioma de la interfaz: mensajes, ajustes y consejos. El código y los nombres de herramientas siguen en inglés.',
|
|
85
|
+
'settings.hint.about': 'Agente de programación con IA para la terminal, de ApvCode. Licencia MIT. github.com/apvcode/Termux-Dev',
|
|
86
|
+
'settings.warnYolo': 'Activado: el agente ejecuta comandos y edita archivos sin preguntar.',
|
|
87
|
+
'settings.keys.move': 'mover',
|
|
88
|
+
'settings.keys.change': 'cambiar',
|
|
89
|
+
'settings.keys.toggle': 'alternar',
|
|
90
|
+
'settings.keys.close': 'cerrar',
|
|
91
|
+
// ── /mcp panel
|
|
92
|
+
'mcp.title': 'Servidores MCP',
|
|
93
|
+
'mcp.count': 'servidores: {n}',
|
|
94
|
+
'mcp.scope.user': 'Servidores del usuario',
|
|
95
|
+
'mcp.scope.project': 'Servidores del proyecto',
|
|
96
|
+
'mcp.toolsCount': 'herramientas: {n}',
|
|
97
|
+
'mcp.status.connected': 'conectado',
|
|
98
|
+
'mcp.status.connecting': 'conectando…',
|
|
99
|
+
'mcp.status.failed': 'falló',
|
|
100
|
+
'mcp.status.disabled': 'desactivado',
|
|
101
|
+
'mcp.empty': 'No hay servidores MCP configurados.',
|
|
102
|
+
'mcp.emptyHint': 'Usa /mcp import para tomar los servidores de Claude Code, o /mcp add <nombre> <comando> [args].',
|
|
103
|
+
'mcp.detail.status': 'Estado',
|
|
104
|
+
'mcp.detail.command': 'Comando',
|
|
105
|
+
'mcp.detail.config': 'Config',
|
|
106
|
+
'mcp.detail.capabilities': 'Capacidades',
|
|
107
|
+
'mcp.detail.tools': 'Herramientas',
|
|
108
|
+
'mcp.detail.error': 'Error',
|
|
109
|
+
'mcp.action.tools': 'Ver herramientas',
|
|
110
|
+
'mcp.action.reconnect': 'Reconectar',
|
|
111
|
+
'mcp.action.disable': 'Desactivar',
|
|
112
|
+
'mcp.action.enable': 'Activar',
|
|
113
|
+
'mcp.toolsTitle': 'Herramientas de {name}',
|
|
114
|
+
'mcp.noTools': 'Este servidor no ofrece herramientas.',
|
|
115
|
+
'mcp.tag.readOnly': 'solo lectura',
|
|
116
|
+
'mcp.tag.destructive': 'destructiva',
|
|
117
|
+
'mcp.tag.openWorld': 'mundo abierto',
|
|
118
|
+
'mcp.params': 'Parámetros',
|
|
119
|
+
'mcp.noParams': 'Sin parámetros.',
|
|
120
|
+
'mcp.required': 'obligatorio',
|
|
121
|
+
'mcp.more': '{n} más',
|
|
122
|
+
'mcp.keys.open': 'abrir',
|
|
123
|
+
'mcp.keys.back': 'atrás',
|
|
124
|
+
'mcp.keys.reload': 'recargar todo',
|
|
125
|
+
'mcp.keys.close': 'cerrar',
|
|
126
|
+
// ── questions from the agent
|
|
127
|
+
'questions.title': 'Pregunta',
|
|
128
|
+
'questions.custom': 'Escribir mi propia respuesta…',
|
|
129
|
+
'questions.skip': 'Omitir',
|
|
130
|
+
'questions.skipped': '(omitida)',
|
|
131
|
+
'questions.yourAnswer': 'Tu respuesta:',
|
|
132
|
+
'questions.empty': 'La respuesta no puede estar vacía',
|
|
133
|
+
// ── confirmations
|
|
134
|
+
'confirm.yes': 'Sí',
|
|
135
|
+
'confirm.no': 'No',
|
|
136
|
+
'confirm.exitTitle': 'salir',
|
|
137
|
+
'confirm.exit': '¿Salir de devx?',
|
|
138
|
+
'confirm.goodbye': 'Hasta pronto',
|
|
139
|
+
'confirm.deleteAll': '¿Borrar TODAS las {n} sesiones guardadas?',
|
|
140
|
+
'confirm.update': '¿Actualizar devx a v{version} ahora?',
|
|
141
|
+
'confirm.commit': '¿Hacer commit de los cambios con este mensaje?',
|
|
142
|
+
'trust.title': 'confianza en la carpeta',
|
|
143
|
+
'trust.question': 'Primera vez en esta carpeta. ¿Confiar en ella y dejar que el agente trabaje aquí?',
|
|
144
|
+
'trust.yes': 'Sí, confiar en esta carpeta',
|
|
145
|
+
'trust.no': 'No, salir',
|
|
146
|
+
'trust.wantsYolo': 'La configuración del proyecto pide autoaprobación (YOLO)',
|
|
147
|
+
'trust.wantsAllowlist': 'La configuración del proyecto permite estos comandos: {list}',
|
|
148
|
+
'trust.exiting': 'Carpeta no confiable, se cierra devx',
|
|
149
|
+
'trust.mcpQuestion': 'Este proyecto quiere iniciar servidores MCP (programas locales, listados arriba). ¿Permitir?',
|
|
150
|
+
// ── view switches
|
|
151
|
+
'view.expandThought': 'ctrl+p para expandir',
|
|
152
|
+
'view.expandOutput': 'ctrl+o para expandir',
|
|
153
|
+
'view.moreLines': '… +{n} líneas',
|
|
154
|
+
// ── plan approval
|
|
155
|
+
'plan.cardTitle': 'Plan',
|
|
156
|
+
'plan.files': 'Archivos',
|
|
157
|
+
'plan.ready': 'El plan está listo. ¿Empezar a trabajar en él?',
|
|
158
|
+
'plan.go': 'Go: pasar al modo AGENT y empezar',
|
|
159
|
+
'plan.edit': 'Cambiar el plan (seguir en modo PLAN)',
|
|
160
|
+
'plan.editHint': 'Di qué cambiar: el plan sigue en modo PLAN y se rehace.',
|
|
161
|
+
'plan.started': 'Modo AGENT: trabajando en el plan aprobado',
|
|
162
|
+
// ── undo
|
|
163
|
+
'undo.question': '¿Devolver {n} archivo(s) a como estaban antes del último turno?',
|
|
164
|
+
'undo.note': 'Incluye lo que hicieron los comandos de shell. Los archivos ignorados por git no se tocan.',
|
|
165
|
+
'undo.done': '{n} archivo(s) restaurado(s)',
|
|
166
|
+
// ── permissions
|
|
167
|
+
'permissions.title': 'Permitido sin preguntar',
|
|
168
|
+
'permissions.none': 'Aún nada se permite sin preguntar: responde «Session» o «Always» en una tarjeta de aprobación.',
|
|
169
|
+
'permissions.hint': '/permissions clear lo quita todo (también lo de la sesión).',
|
|
170
|
+
'permissions.cleared': 'Se quitó todo lo permitido sin preguntar',
|
|
171
|
+
// ── cost limit
|
|
172
|
+
'settings.row.costLimit': 'Límite de coste',
|
|
173
|
+
'settings.short.costLimit': 'Límite $',
|
|
174
|
+
'settings.hint.costLimit': 'Lo máximo que puede costar una sesión. Al 80 % devx avisa; en el límite detiene la tarea y pregunta antes de gastar más.',
|
|
175
|
+
'cost.title': 'límite de coste',
|
|
176
|
+
'cost.warn': '{spent} gastados: el 80 % del límite de {limit} de esta sesión',
|
|
177
|
+
'cost.stopped': 'Se alcanzó el límite de coste de {limit}: la tarea se detuvo',
|
|
178
|
+
'cost.reached': 'Esta sesión gastó {spent} de su límite de {limit}. ¿Gastar más?',
|
|
179
|
+
'cost.raise': 'Si continúas, el límite de esta sesión sube a {limit}.',
|
|
180
|
+
'cost.continue': 'Sí, continuar',
|
|
181
|
+
'cost.cancel': 'No, ahora no',
|
|
182
|
+
'cost.cancelled': 'No se envió nada. Tu mensaje volvió a la línea de entrada.',
|
|
183
|
+
// ── /copy and /rename
|
|
184
|
+
'copy.none': 'Aún no hay una respuesta que copiar.',
|
|
185
|
+
'copy.done': 'Última respuesta copiada ({n} caracteres)',
|
|
186
|
+
'copy.failed': 'No se pudo acceder al portapapeles (sin wl-copy, xclip, xsel, y la respuesta es demasiado larga para el terminal).',
|
|
187
|
+
'rename.done': 'Chat renombrado: {name}',
|
|
188
|
+
'rename.usage': 'Uso: /rename <nombre>. Sin nombre, la IA vuelve a nombrar el chat cuando haya una primera respuesta.',
|
|
189
|
+
'rename.failed': 'La IA no encontró un nombre. Inténtalo de nuevo o da uno: /rename <nombre>.',
|
|
190
|
+
// ── memory
|
|
191
|
+
'memory.capped': 'La memoria es larga: {n} de los hechos más antiguos no se envían al modelo (solo caben los nuevos). Quita los viejos de .devx/memory.md.',
|
|
192
|
+
'mcp.removeUsage': 'Uso: /mcp remove <nombre>',
|
|
193
|
+
'mcp.removeNotFound': '«{name}» no está en ~/.devx/mcp.json. Un servidor de otro archivo (el proyecto, ~/.devxrc.json) hay que quitarlo a mano de ese archivo.',
|
|
194
|
+
'mcp.removed': 'Servidor «{name}» eliminado',
|
|
195
|
+
// ── /rewind
|
|
196
|
+
'rewind.title': 'retroceder',
|
|
197
|
+
'rewind.count': '{n} mensajes',
|
|
198
|
+
'rewind.current': '(actual: quedarse aquí)',
|
|
199
|
+
'rewind.none': 'Aún no hay un mensaje tuyo al que volver.',
|
|
200
|
+
'rewind.later': '{n} después',
|
|
201
|
+
'rewind.ago.now': 'ahora mismo',
|
|
202
|
+
'rewind.ago.min': 'hace {n} min',
|
|
203
|
+
'rewind.ago.hour': 'hace {n} h',
|
|
204
|
+
'rewind.ago.day': 'hace {n} d',
|
|
205
|
+
'rewind.filesQuestion': '¿Devolver también los archivos ({n}) a como estaban entonces?',
|
|
206
|
+
'rewind.filesYes': 'Sí, también los archivos',
|
|
207
|
+
'rewind.filesNo': 'No, solo la conversación',
|
|
208
|
+
'rewind.done': 'De vuelta en tu mensaje. Lo que vino después desapareció, también para el modelo. Edita el mensaje y envíalo.',
|
|
209
|
+
'rewind.doneImages': 'De vuelta en tu mensaje (sus imágenes no se conservaron, adjúntalas de nuevo). Lo que vino después desapareció, también para el modelo.',
|
|
210
|
+
};
|