termux-dev 1.6.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.
Files changed (96) hide show
  1. package/README.md +214 -166
  2. package/assets/banner.svg +23 -28
  3. package/assets/preview.png +0 -0
  4. package/assets/preview.svg +92 -10
  5. package/dist/cli/banner.js +1 -1
  6. package/dist/cli/clipboard-write.js +55 -0
  7. package/dist/cli/clipboard.js +182 -106
  8. package/dist/cli/colors.js +67 -0
  9. package/dist/cli/confirm.js +50 -0
  10. package/dist/cli/doctor.js +4 -4
  11. package/dist/cli/effort.js +80 -0
  12. package/dist/cli/export.js +3 -3
  13. package/dist/cli/files.js +19 -5
  14. package/dist/cli/headless.js +23 -11
  15. package/dist/cli/index.js +1377 -480
  16. package/dist/cli/keys.js +69 -0
  17. package/dist/cli/liveblock.js +45 -0
  18. package/dist/cli/log.js +19 -0
  19. package/dist/cli/markdown.js +158 -36
  20. package/dist/cli/mcp-panel.js +432 -0
  21. package/dist/cli/permission.js +84 -0
  22. package/dist/cli/picker.js +135 -0
  23. package/dist/cli/prompt.js +256 -56
  24. package/dist/cli/resume.js +15 -0
  25. package/dist/cli/rewind.js +51 -0
  26. package/dist/cli/runtime_errors.js +6 -0
  27. package/dist/cli/server.js +85 -24
  28. package/dist/cli/settings.js +307 -0
  29. package/dist/cli/statusline.js +1 -1
  30. package/dist/cli/theme.js +126 -108
  31. package/dist/cli/transcript.js +114 -0
  32. package/dist/cli/typeahead.js +371 -0
  33. package/dist/cli/ui.js +1021 -0
  34. package/dist/cli/updater.js +23 -21
  35. package/dist/cli/usage-panel.js +242 -0
  36. package/dist/cli/width.js +178 -0
  37. package/dist/core/capabilities.js +433 -0
  38. package/dist/core/catalog-util.js +27 -0
  39. package/dist/core/checkpoint.js +90 -0
  40. package/dist/core/context-stats.js +29 -0
  41. package/dist/core/cost.js +191 -0
  42. package/dist/core/formats.js +199 -0
  43. package/dist/core/history.js +51 -1
  44. package/dist/core/hooks.js +79 -0
  45. package/dist/core/i18n.js +42 -0
  46. package/dist/core/local-config.js +69 -0
  47. package/dist/core/locales/de.js +210 -0
  48. package/dist/core/locales/en.js +221 -0
  49. package/dist/core/locales/es.js +210 -0
  50. package/dist/core/locales/fr.js +210 -0
  51. package/dist/core/locales/ja.js +210 -0
  52. package/dist/core/locales/pt.js +210 -0
  53. package/dist/core/locales/ru.js +210 -0
  54. package/dist/core/locales/uk.js +210 -0
  55. package/dist/core/locales/zh.js +210 -0
  56. package/dist/core/loop.js +125 -49
  57. package/dist/core/memory.js +39 -12
  58. package/dist/core/models.js +33 -20
  59. package/dist/core/network.js +12 -11
  60. package/dist/core/notify.js +54 -0
  61. package/dist/core/planfile.js +43 -0
  62. package/dist/core/price-catalog.json +1 -0
  63. package/dist/core/prices.js +249 -0
  64. package/dist/core/reasoning-catalog.json +1 -0
  65. package/dist/core/reasoning.js +393 -0
  66. package/dist/core/redact.js +41 -0
  67. package/dist/core/secure-file.js +22 -0
  68. package/dist/core/session.js +16 -5
  69. package/dist/core/snapshot.js +14 -2
  70. package/dist/core/title.js +61 -0
  71. package/dist/core/types.js +1 -1
  72. package/dist/core/usage.js +43 -7
  73. package/dist/core/vision-catalog.json +1 -0
  74. package/dist/core/vision.js +123 -0
  75. package/dist/mcp/client.js +36 -5
  76. package/dist/mcp/http-client.js +174 -0
  77. package/dist/mcp/manager.js +330 -93
  78. package/dist/permissions/guard.js +385 -117
  79. package/dist/prompts/builder.js +46 -38
  80. package/dist/providers/anthropic.js +517 -0
  81. package/dist/providers/index.js +18 -1
  82. package/dist/providers/openai.js +138 -125
  83. package/dist/providers/shared.js +116 -0
  84. package/dist/providers/toolguard.js +101 -0
  85. package/dist/tools/bash.js +141 -51
  86. package/dist/tools/diagnostics.js +76 -48
  87. package/dist/tools/fs.js +77 -5
  88. package/dist/tools/index.js +2 -1
  89. package/dist/tools/mcp.js +72 -0
  90. package/dist/tools/packages.js +16 -1
  91. package/dist/tools/plan.js +8 -8
  92. package/dist/tools/questions.js +50 -54
  93. package/dist/tools/server.js +6 -0
  94. package/dist/tools/todo.js +20 -18
  95. package/dist/tools/web.js +143 -8
  96. package/package.json +1 -1
@@ -0,0 +1,210 @@
1
+ export const fr = {
2
+ 'net.unknown': 'Erreur réseau inconnue',
3
+ 'net.rateLimit': 'Limite de requêtes de l’API dépassée (429)',
4
+ 'net.badGateway': 'Passerelle du fournisseur momentanément indisponible (502)',
5
+ 'net.unavailable': 'Serveur du fournisseur surchargé (503)',
6
+ 'net.gatewayTimeout': 'Délai dépassé sur la passerelle du fournisseur (504)',
7
+ 'net.offline': 'Pas de connexion réseau ou échec DNS (offline)',
8
+ 'net.reset': 'La connexion au serveur a été réinitialisée',
9
+ 'net.timeout': 'Délai de la connexion réseau dépassé',
10
+ 'net.refused': 'Le serveur a refusé la connexion',
11
+ 'net.fetchFailed': 'Échec de la requête réseau (connexion interrompue)',
12
+ 'net.generic': 'Panne de la connexion internet',
13
+ 'net.failedAfter': 'Erreur réseau : connexion non rétablie après {n} tentatives ({reason}).',
14
+ 'conn.unstable': 'connexion instable ({reason})',
15
+ 'conn.reconnecting': 'reconnexion {attempt}/{max} · nouvel essai dans {delay} s',
16
+ 'conn.restored': 'connexion rétablie',
17
+ 'conn.classicUnstable': 'Connexion instable ({reason})',
18
+ 'conn.classicRetry': 'Reconnexion [{attempt}/{max}] (pause {delay} s)...',
19
+ 'conn.classicWaiting': 'En attente du réseau [{attempt}/{max}]...',
20
+ 'conn.classicRestored': '✓ Connexion rétablie ! La génération reprend...',
21
+ 'stop.connection': 'connexion annulée',
22
+ 'stop.stopped': 'arrêté',
23
+ 'stop.interrupted': 'interrompu, envoi de votre message',
24
+ 'stop.classicConnection': 'Connexion annulée (Ctrl+C).',
25
+ 'stop.classicStopped': 'Génération arrêtée (Ctrl+C).',
26
+ 'stop.classicInterrupted': 'Interrompu : envoi de votre message.',
27
+ 'status.waiting': 'En attente du modèle',
28
+ 'status.thinking': 'Réflexion',
29
+ 'status.writing': 'Écriture',
30
+ 'status.running': 'Exécution',
31
+ 'status.reconnecting': 'Reconnexion',
32
+ 'status.stop': 'ctrl+c pour arrêter',
33
+ 'status.thinkingLine': 'réflexion',
34
+ 'status.thoughtFor': 'réfléchi {sec} s',
35
+ 'composer.placeholder': 'Décrivez une tâche ou posez une question…',
36
+ 'composer.queued': 'en file',
37
+ 'composer.queuedMany': '{n} en file',
38
+ 'composer.queuedHint': 'ctrl+entrée envoie · ↓ modifier',
39
+ 'composer.hint1': 'entrée en file · ctrl+c arrête',
40
+ 'composer.hint2': 'entrée en file',
41
+ 'composer.hint3': 'entrée en file · ctrl+c arrête',
42
+ 'composer.hint4': 'entrée en file',
43
+ 'summary.toolOne': '{n} outil',
44
+ 'summary.toolMany': '{n} outils',
45
+ 'summary.in': '{n} entrée',
46
+ 'summary.out': '{n} sortie',
47
+ 'summary.stopped': 'arrêté',
48
+ 'settings.title': 'réglages',
49
+ 'settings.section.appearance': 'Apparence',
50
+ 'settings.section.agent': 'Agent',
51
+ 'settings.section.general': 'Général',
52
+ 'settings.section.about': 'À propos',
53
+ 'settings.row.theme': 'Thème',
54
+ 'settings.row.layout': 'Interface',
55
+ 'settings.row.pureBlack': 'Fond noir',
56
+ 'settings.row.autoApprove': 'Auto-approbation (YOLO)',
57
+ 'settings.row.maxIterations': 'Étapes max.',
58
+ 'settings.row.memory': 'Mémoire du projet',
59
+ 'settings.row.updates': 'Mises à jour',
60
+ 'settings.row.language': 'Langue',
61
+ 'settings.row.about': 'À propos de devx',
62
+ 'settings.short.theme': 'Thème',
63
+ 'settings.short.layout': 'Interface',
64
+ 'settings.short.pureBlack': 'Fond noir',
65
+ 'settings.short.autoApprove': 'YOLO',
66
+ 'settings.short.maxIterations': 'Étapes',
67
+ 'settings.short.memory': 'Mémoire',
68
+ 'settings.short.updates': 'MAJ',
69
+ 'settings.short.language': 'Langue',
70
+ 'settings.short.about': 'À propos',
71
+ 'settings.value.on': 'oui',
72
+ 'settings.value.off': 'non',
73
+ 'settings.value.clean': 'Épurée',
74
+ 'settings.value.classic': 'Classique',
75
+ 'settings.value.unlimited': 'illimité',
76
+ 'settings.value.steps': '{n} étapes',
77
+ 'settings.hint.theme': 'Couleurs de toute l’interface. Gauche et droite parcourent les thèmes, le panneau change de couleur aussitôt.',
78
+ 'settings.hint.layout': 'Épurée : saisie encadrée, cartes et lignes d’outils discrètes. Classique : la mise en page ASCII d’origine.',
79
+ 'settings.hint.pureBlack': 'Met le fond du terminal en noir OLED profond (#0a0a0c). Désactivé : votre propre fond est conservé.',
80
+ 'settings.hint.autoApprove': 'Saute les demandes d’autorisation courantes. Les commandes dangereuses et les fichiers d’identifiants demandent toujours. Valable pour cette session seulement : désactivé au prochain démarrage de devx.',
81
+ 'settings.hint.maxIterations': 'Combien d’étapes avec outils (modifications, commandes) l’agent peut faire par demande.',
82
+ 'settings.hint.memory': 'Charge les règles de .devx/memory.md dans chaque session.',
83
+ 'settings.hint.updates': 'Cherche une nouvelle version de devx sur GitHub au démarrage. /update fonctionne dans tous les cas.',
84
+ 'settings.hint.language': 'Langue de l’interface : messages, réglages et conseils. Le code et les noms d’outils restent en anglais.',
85
+ 'settings.hint.about': 'Agent de programmation IA pour le terminal, par ApvCode. Licence MIT. github.com/apvcode/Termux-Dev',
86
+ 'settings.warnYolo': 'Activé : l’agent exécute des commandes et modifie des fichiers sans demander.',
87
+ 'settings.keys.move': 'choisir',
88
+ 'settings.keys.change': 'modifier',
89
+ 'settings.keys.toggle': 'basculer',
90
+ 'settings.keys.close': 'fermer',
91
+ // ── /mcp panel
92
+ 'mcp.title': 'Serveurs MCP',
93
+ 'mcp.count': 'serveurs : {n}',
94
+ 'mcp.scope.user': 'Serveurs de l’utilisateur',
95
+ 'mcp.scope.project': 'Serveurs du projet',
96
+ 'mcp.toolsCount': 'outils : {n}',
97
+ 'mcp.status.connected': 'connecté',
98
+ 'mcp.status.connecting': 'connexion…',
99
+ 'mcp.status.failed': 'échec',
100
+ 'mcp.status.disabled': 'désactivé',
101
+ 'mcp.empty': 'Aucun serveur MCP configuré.',
102
+ 'mcp.emptyHint': 'Utilisez /mcp import pour reprendre les serveurs de Claude Code, ou /mcp add <nom> <commande> [args].',
103
+ 'mcp.detail.status': 'État',
104
+ 'mcp.detail.command': 'Commande',
105
+ 'mcp.detail.config': 'Config',
106
+ 'mcp.detail.capabilities': 'Capacités',
107
+ 'mcp.detail.tools': 'Outils',
108
+ 'mcp.detail.error': 'Erreur',
109
+ 'mcp.action.tools': 'Voir les outils',
110
+ 'mcp.action.reconnect': 'Reconnecter',
111
+ 'mcp.action.disable': 'Désactiver',
112
+ 'mcp.action.enable': 'Activer',
113
+ 'mcp.toolsTitle': 'Outils de {name}',
114
+ 'mcp.noTools': 'Ce serveur n’offre aucun outil.',
115
+ 'mcp.tag.readOnly': 'lecture seule',
116
+ 'mcp.tag.destructive': 'destructif',
117
+ 'mcp.tag.openWorld': 'monde ouvert',
118
+ 'mcp.params': 'Paramètres',
119
+ 'mcp.noParams': 'Aucun paramètre.',
120
+ 'mcp.required': 'requis',
121
+ 'mcp.more': '{n} de plus',
122
+ 'mcp.keys.open': 'ouvrir',
123
+ 'mcp.keys.back': 'retour',
124
+ 'mcp.keys.reload': 'tout recharger',
125
+ 'mcp.keys.close': 'fermer',
126
+ // ── questions from the agent
127
+ 'questions.title': 'Question',
128
+ 'questions.custom': 'Saisir ma réponse…',
129
+ 'questions.skip': 'Passer',
130
+ 'questions.skipped': '(passée)',
131
+ 'questions.yourAnswer': 'Votre réponse :',
132
+ 'questions.empty': 'La réponse ne peut pas être vide',
133
+ // ── confirmations
134
+ 'confirm.yes': 'Oui',
135
+ 'confirm.no': 'Non',
136
+ 'confirm.exitTitle': 'quitter',
137
+ 'confirm.exit': 'Quitter devx ?',
138
+ 'confirm.goodbye': 'À bientôt',
139
+ 'confirm.deleteAll': 'Supprimer TOUTES les {n} sessions enregistrées ?',
140
+ 'confirm.update': 'Mettre à jour devx vers v{version} maintenant ?',
141
+ 'confirm.commit': 'Valider les changements avec ce message ?',
142
+ 'trust.title': 'confiance dans le dossier',
143
+ 'trust.question': 'Première fois dans ce dossier. Lui faire confiance et laisser l’agent y travailler ?',
144
+ 'trust.yes': 'Oui, faire confiance à ce dossier',
145
+ 'trust.no': 'Non, quitter',
146
+ 'trust.wantsYolo': 'La config du projet demande l’auto-approbation (YOLO)',
147
+ 'trust.wantsAllowlist': 'La config du projet autorise ces commandes : {list}',
148
+ 'trust.exiting': 'Dossier non approuvé, devx se ferme',
149
+ 'trust.mcpQuestion': 'Ce projet veut démarrer des serveurs MCP (programmes locaux, listés ci-dessus). Autoriser ?',
150
+ // ── view switches
151
+ 'view.expandThought': 'ctrl+p pour déplier',
152
+ 'view.expandOutput': 'ctrl+o pour déplier',
153
+ 'view.moreLines': '… +{n} lignes',
154
+ // ── plan approval
155
+ 'plan.cardTitle': 'Plan',
156
+ 'plan.files': 'Fichiers',
157
+ 'plan.ready': 'Le plan est prêt. Commencer le travail ?',
158
+ 'plan.go': 'Go : passer en mode AGENT et commencer',
159
+ 'plan.edit': 'Modifier le plan (rester en mode PLAN)',
160
+ 'plan.editHint': 'Dites quoi changer : le plan reste en mode PLAN et sera refait.',
161
+ 'plan.started': 'Mode AGENT : travail sur le plan approuvé',
162
+ // ── undo
163
+ 'undo.question': 'Remettre {n} fichier(s) dans l’état d’avant le dernier tour ?',
164
+ 'undo.note': 'Inclut ce que les commandes shell ont fait. Les fichiers ignorés par git ne sont pas touchés.',
165
+ 'undo.done': '{n} fichier(s) restauré(s)',
166
+ // ── permissions
167
+ 'permissions.title': 'Autorisé sans demander',
168
+ 'permissions.none': 'Rien n’est encore autorisé sans demander : répondez « Session » ou « Always » sur une carte d’approbation.',
169
+ 'permissions.hint': '/permissions clear supprime tout (aussi ce qui est pour la session).',
170
+ 'permissions.cleared': 'Tout ce qui était autorisé sans demander a été supprimé',
171
+ // ── cost limit
172
+ 'settings.row.costLimit': 'Limite de coût',
173
+ 'settings.short.costLimit': 'Limite $',
174
+ 'settings.hint.costLimit': 'Le maximum qu’une session peut coûter. À 80 % devx prévient, à la limite il arrête la tâche et demande avant de dépenser plus.',
175
+ 'cost.title': 'limite de coût',
176
+ 'cost.warn': '{spent} dépensés : 80 % de la limite de {limit} de cette session',
177
+ 'cost.stopped': 'Limite de coût de {limit} atteinte : la tâche est arrêtée',
178
+ 'cost.reached': 'Cette session a dépensé {spent} sur sa limite de {limit}. Dépenser plus ?',
179
+ 'cost.raise': 'Continuer porte la limite de cette session à {limit}.',
180
+ 'cost.continue': 'Oui, continuer',
181
+ 'cost.cancel': 'Non, pas maintenant',
182
+ 'cost.cancelled': 'Rien n’a été envoyé. Votre message est revenu dans la ligne de saisie.',
183
+ // ── /copy and /rename
184
+ 'copy.none': 'Il n’y a pas encore de réponse à copier.',
185
+ 'copy.done': 'Dernière réponse copiée ({n} caractères)',
186
+ 'copy.failed': 'Presse-papiers inaccessible (ni wl-copy, xclip, xsel, et la réponse est trop longue pour le terminal).',
187
+ 'rename.done': 'Chat renommé : {name}',
188
+ 'rename.usage': 'Usage : /rename <nom>. Sans nom, l’IA renomme le chat dès qu’il y a une première réponse.',
189
+ 'rename.failed': 'L’IA n’a pas trouvé de nom. Réessayez ou donnez-en un : /rename <nom>.',
190
+ // ── memory
191
+ 'memory.capped': 'La mémoire est longue : {n} des faits les plus anciens ne sont pas envoyés au modèle (seuls les récents tiennent). Supprimez les anciens de .devx/memory.md.',
192
+ 'mcp.removeUsage': 'Usage : /mcp remove <nom>',
193
+ 'mcp.removeNotFound': '« {name} » n’est pas dans ~/.devx/mcp.json. Un serveur d’un autre fichier (le projet, ~/.devxrc.json) doit être retiré à la main de ce fichier.',
194
+ 'mcp.removed': 'Serveur « {name} » supprimé',
195
+ // ── /rewind
196
+ 'rewind.title': 'revenir en arrière',
197
+ 'rewind.count': '{n} messages',
198
+ 'rewind.current': '(actuel : rester ici)',
199
+ 'rewind.none': 'Il n’y a pas encore de message de vous auquel revenir.',
200
+ 'rewind.later': '{n} après',
201
+ 'rewind.ago.now': 'à l’instant',
202
+ 'rewind.ago.min': 'il y a {n} min',
203
+ 'rewind.ago.hour': 'il y a {n} h',
204
+ 'rewind.ago.day': 'il y a {n} j',
205
+ 'rewind.filesQuestion': 'Remettre aussi les fichiers ({n}) dans leur état d’alors ?',
206
+ 'rewind.filesYes': 'Oui, les fichiers aussi',
207
+ 'rewind.filesNo': 'Non, seulement la conversation',
208
+ 'rewind.done': 'De retour à votre message. Ce qui a suivi a disparu, pour le modèle aussi. Modifiez le message et envoyez-le.',
209
+ 'rewind.doneImages': 'De retour à votre message (ses images n’ont pas été gardées, joignez-les de nouveau). Ce qui a suivi a disparu, pour le modèle aussi.',
210
+ };
@@ -0,0 +1,210 @@
1
+ export const ja = {
2
+ 'net.unknown': '不明なネットワークエラー',
3
+ 'net.rateLimit': 'API のリクエスト上限を超えました (429)',
4
+ 'net.badGateway': 'プロバイダーのゲートウェイが一時的に利用できません (502)',
5
+ 'net.unavailable': 'プロバイダーのサーバーが過負荷です (503)',
6
+ 'net.gatewayTimeout': 'プロバイダーのゲートウェイがタイムアウトしました (504)',
7
+ 'net.offline': 'ネットワーク未接続、または DNS の障害(オフライン)',
8
+ 'net.reset': 'サーバーとの接続がリセットされました',
9
+ 'net.timeout': 'ネットワーク接続がタイムアウトしました',
10
+ 'net.refused': 'サーバーが接続を拒否しました',
11
+ 'net.fetchFailed': 'ネットワークリクエストに失敗しました(接続が切断)',
12
+ 'net.generic': 'インターネット接続の障害',
13
+ 'net.failedAfter': 'ネットワークエラー:{n} 回試しても接続を回復できませんでした({reason})。',
14
+ 'conn.unstable': '接続が不安定です({reason})',
15
+ 'conn.reconnecting': '再接続中 {attempt}/{max} · {delay} 秒後に再試行',
16
+ 'conn.restored': '接続が回復しました',
17
+ 'conn.classicUnstable': '接続が不安定です({reason})',
18
+ 'conn.classicRetry': '再接続中 [{attempt}/{max}]({delay} 秒待機)...',
19
+ 'conn.classicWaiting': 'ネットワークを待っています [{attempt}/{max}]...',
20
+ 'conn.classicRestored': '✓ 接続が回復しました。生成を再開します...',
21
+ 'stop.connection': '接続をキャンセルしました',
22
+ 'stop.stopped': '停止しました',
23
+ 'stop.interrupted': '中断しました。メッセージを送信します',
24
+ 'stop.classicConnection': '接続をキャンセルしました (Ctrl+C)。',
25
+ 'stop.classicStopped': '生成を停止しました (Ctrl+C)。',
26
+ 'stop.classicInterrupted': '中断しました:メッセージを送信します。',
27
+ 'status.waiting': 'モデルを待機中',
28
+ 'status.thinking': '考え中',
29
+ 'status.writing': '執筆中',
30
+ 'status.running': '実行中',
31
+ 'status.reconnecting': '再接続中',
32
+ 'status.stop': 'ctrl+c で停止',
33
+ 'status.thinkingLine': '思考',
34
+ 'status.thoughtFor': '{sec} 秒考えました',
35
+ 'composer.placeholder': 'タスクを説明するか質問してください…',
36
+ 'composer.queued': 'キュー済み',
37
+ 'composer.queuedMany': '{n} 件キュー済み',
38
+ 'composer.queuedHint': 'ctrl+enter で今すぐ送信 · ↓ 編集',
39
+ 'composer.hint1': 'enter でキュー · ctrl+c で停止',
40
+ 'composer.hint2': 'enter でキュー',
41
+ 'composer.hint3': 'enter でキュー · ctrl+c で停止',
42
+ 'composer.hint4': 'enter でキュー',
43
+ 'summary.toolOne': 'ツール {n} 件',
44
+ 'summary.toolMany': 'ツール {n} 件',
45
+ 'summary.in': '入力 {n}',
46
+ 'summary.out': '出力 {n}',
47
+ 'summary.stopped': '停止',
48
+ 'settings.title': '設定',
49
+ 'settings.section.appearance': '外観',
50
+ 'settings.section.agent': 'エージェント',
51
+ 'settings.section.general': '一般',
52
+ 'settings.section.about': 'このアプリについて',
53
+ 'settings.row.theme': 'テーマ',
54
+ 'settings.row.layout': 'インターフェース',
55
+ 'settings.row.pureBlack': '黒い背景',
56
+ 'settings.row.autoApprove': '自動承認 (YOLO)',
57
+ 'settings.row.maxIterations': '最大ステップ数',
58
+ 'settings.row.memory': 'プロジェクトメモリ',
59
+ 'settings.row.updates': '更新の確認',
60
+ 'settings.row.language': '言語',
61
+ 'settings.row.about': 'devx について',
62
+ 'settings.short.theme': 'テーマ',
63
+ 'settings.short.layout': 'UI',
64
+ 'settings.short.pureBlack': '黒背景',
65
+ 'settings.short.autoApprove': 'YOLO',
66
+ 'settings.short.maxIterations': '手数',
67
+ 'settings.short.memory': 'メモリ',
68
+ 'settings.short.updates': '更新',
69
+ 'settings.short.language': '言語',
70
+ 'settings.short.about': '情報',
71
+ 'settings.value.on': 'オン',
72
+ 'settings.value.off': 'オフ',
73
+ 'settings.value.clean': 'シンプル',
74
+ 'settings.value.classic': 'クラシック',
75
+ 'settings.value.unlimited': '無制限',
76
+ 'settings.value.steps': '{n} ステップ',
77
+ 'settings.hint.theme': 'インターフェース全体の配色です。左右キーでテーマを切り替えると、パネルがすぐに変わります。',
78
+ 'settings.hint.layout': 'シンプル:枠付きの入力欄、カード、控えめなツール行。クラシック:従来の ASCII レイアウト。',
79
+ 'settings.hint.pureBlack': 'ターミナルの背景を深い OLED ブラック (#0a0a0c) にします。オフなら元の背景のままです。',
80
+ 'settings.hint.autoApprove': '通常の許可確認を省略します。危険なコマンドや認証情報ファイルは引き続き確認します。このセッションだけ有効で、次回 devx を起動するとオフに戻ります。',
81
+ 'settings.hint.maxIterations': '1 回のリクエストでエージェントが実行できるツールのステップ数(編集、コマンド)です。',
82
+ 'settings.hint.memory': '.devx/memory.md のルールを毎回のセッションに読み込みます。',
83
+ 'settings.hint.updates': '起動時に GitHub で devx の新バージョンを確認します。/update はどちらでも使えます。',
84
+ 'settings.hint.language': 'インターフェースの言語:メッセージ、設定、ヒント。コードとツール名は英語のままです。',
85
+ 'settings.hint.about': 'ApvCode 製のターミナル向け AI コーディングエージェント。MIT ライセンス。github.com/apvcode/Termux-Dev',
86
+ 'settings.warnYolo': 'オン:エージェントは確認なしにコマンドを実行しファイルを編集します。',
87
+ 'settings.keys.move': '移動',
88
+ 'settings.keys.change': '変更',
89
+ 'settings.keys.toggle': '切替',
90
+ 'settings.keys.close': '閉じる',
91
+ // ── /mcp panel
92
+ 'mcp.title': 'MCP サーバー',
93
+ 'mcp.count': 'サーバー: {n}',
94
+ 'mcp.scope.user': 'ユーザーのサーバー',
95
+ 'mcp.scope.project': 'プロジェクトのサーバー',
96
+ 'mcp.toolsCount': 'ツール: {n}',
97
+ 'mcp.status.connected': '接続済み',
98
+ 'mcp.status.connecting': '接続中…',
99
+ 'mcp.status.failed': '失敗',
100
+ 'mcp.status.disabled': '無効',
101
+ 'mcp.empty': 'MCP サーバーは設定されていません。',
102
+ 'mcp.emptyHint': '/mcp import で Claude Code のサーバーを取り込むか、/mcp add <名前> <コマンド> [引数] で追加します。',
103
+ 'mcp.detail.status': '状態',
104
+ 'mcp.detail.command': 'コマンド',
105
+ 'mcp.detail.config': '設定',
106
+ 'mcp.detail.capabilities': '機能',
107
+ 'mcp.detail.tools': 'ツール',
108
+ 'mcp.detail.error': 'エラー',
109
+ 'mcp.action.tools': 'ツールを表示',
110
+ 'mcp.action.reconnect': '再接続',
111
+ 'mcp.action.disable': '無効にする',
112
+ 'mcp.action.enable': '有効にする',
113
+ 'mcp.toolsTitle': '{name} のツール',
114
+ 'mcp.noTools': 'このサーバーにはツールがありません。',
115
+ 'mcp.tag.readOnly': '読み取り専用',
116
+ 'mcp.tag.destructive': '破壊的',
117
+ 'mcp.tag.openWorld': '外部世界',
118
+ 'mcp.params': 'パラメーター',
119
+ 'mcp.noParams': 'パラメーターなし。',
120
+ 'mcp.required': '必須',
121
+ 'mcp.more': 'ほか {n} 件',
122
+ 'mcp.keys.open': '開く',
123
+ 'mcp.keys.back': '戻る',
124
+ 'mcp.keys.reload': 'すべて再読込',
125
+ 'mcp.keys.close': '閉じる',
126
+ // ── questions from the agent
127
+ 'questions.title': '質問',
128
+ 'questions.custom': '自分で入力…',
129
+ 'questions.skip': 'スキップ',
130
+ 'questions.skipped': '(スキップ)',
131
+ 'questions.yourAnswer': 'あなたの回答:',
132
+ 'questions.empty': '回答は空にできません',
133
+ // ── confirmations
134
+ 'confirm.yes': 'はい',
135
+ 'confirm.no': 'いいえ',
136
+ 'confirm.exitTitle': '終了',
137
+ 'confirm.exit': 'devx を終了しますか?',
138
+ 'confirm.goodbye': 'またね',
139
+ 'confirm.deleteAll': '保存済みの {n} 件のセッションをすべて削除しますか?',
140
+ 'confirm.update': '今すぐ devx を v{version} に更新しますか?',
141
+ 'confirm.commit': 'このメッセージで変更をコミットしますか?',
142
+ 'trust.title': 'ワークスペースの信頼',
143
+ 'trust.question': 'このフォルダは初めてです。信頼して、エージェントに作業を許可しますか?',
144
+ 'trust.yes': 'はい、このフォルダを信頼する',
145
+ 'trust.no': 'いいえ、終了する',
146
+ 'trust.wantsYolo': 'プロジェクト設定が自動承認 (YOLO) を求めています',
147
+ 'trust.wantsAllowlist': 'プロジェクト設定は次のコマンドを許可しています: {list}',
148
+ 'trust.exiting': 'フォルダは信頼されませんでした。devx を終了します',
149
+ 'trust.mcpQuestion': 'このプロジェクトは MCP サーバー(ローカルプログラム、上記)を起動しようとしています。許可しますか?',
150
+ // ── view switches
151
+ 'view.expandThought': 'ctrl+p で展開',
152
+ 'view.expandOutput': 'ctrl+o で展開',
153
+ 'view.moreLines': '… ほか {n} 行',
154
+ // ── plan approval
155
+ 'plan.cardTitle': 'プラン',
156
+ 'plan.files': 'ファイル',
157
+ 'plan.ready': 'プランができました。作業を始めますか?',
158
+ 'plan.go': 'Go: AGENT モードに切り替えて開始',
159
+ 'plan.edit': 'プランを変更(PLAN モードのまま)',
160
+ 'plan.editHint': '変更したい点を伝えてください。PLAN モードのままプランを作り直します。',
161
+ 'plan.started': 'AGENT モード: 承認されたプランに沿って作業中',
162
+ // ── undo
163
+ 'undo.question': '{n} 個のファイルを直前のターンの前の状態に戻しますか?',
164
+ 'undo.note': 'シェルコマンドによる変更も含みます。git が無視するファイルには触れません。',
165
+ 'undo.done': '{n} 個のファイルを復元しました',
166
+ // ── permissions
167
+ 'permissions.title': '確認なしで許可',
168
+ 'permissions.none': '確認なしで許可されているものはまだありません。承認カードで Session か Always を選ぶと追加されます。',
169
+ 'permissions.hint': '/permissions clear ですべて削除します(セッション分も)。',
170
+ 'permissions.cleared': '確認なしの許可をすべて削除しました',
171
+ // ── cost limit
172
+ 'settings.row.costLimit': '費用の上限',
173
+ 'settings.short.costLimit': '費用上限',
174
+ 'settings.hint.costLimit': '1 セッションにかけてよい費用の上限です。80% で警告し、上限に達するとタスクを止め、続ける前に確認します。',
175
+ 'cost.title': '費用の上限',
176
+ 'cost.warn': '{spent} 使用:このセッションの上限 {limit} の 80%',
177
+ 'cost.stopped': '費用の上限 {limit} に達しました。タスクを停止しました',
178
+ 'cost.reached': 'このセッションは上限 {limit} のうち {spent} を使いました。続けますか?',
179
+ 'cost.raise': '続けると、このセッションの上限が {limit} に引き上げられます。',
180
+ 'cost.continue': 'はい、続ける',
181
+ 'cost.cancel': 'いいえ、今はしない',
182
+ 'cost.cancelled': '何も送信されていません。メッセージは入力欄に戻りました。',
183
+ // ── /copy and /rename
184
+ 'copy.none': 'コピーできる回答はまだありません。',
185
+ 'copy.done': '最後の回答をコピーしました({n} 文字)',
186
+ 'copy.failed': 'クリップボードにアクセスできません(wl-copy、xclip、xsel がなく、回答が端末には長すぎます)。',
187
+ 'rename.done': 'チャット名を変更しました: {name}',
188
+ 'rename.usage': '使い方: /rename <名前>。名前なしの場合、最初の回答があれば AI が付け直します。',
189
+ 'rename.failed': 'AI が名前を思いつきませんでした。もう一度試すか、/rename <名前> で指定してください。',
190
+ // ── memory
191
+ 'memory.capped': 'メモリが長いため、古い {n} 件はモデルに送られません(新しいものだけ入ります)。.devx/memory.md から古いものを削除してください。',
192
+ 'mcp.removeUsage': '使い方: /mcp remove <名前>',
193
+ 'mcp.removeNotFound': '「{name}」は ~/.devx/mcp.json にありません。別のファイル(プロジェクト、~/.devxrc.json)のサーバーはそのファイルから手で削除してください。',
194
+ 'mcp.removed': 'サーバー「{name}」を削除しました',
195
+ // ── /rewind
196
+ 'rewind.title': '巻き戻し',
197
+ 'rewind.count': '{n} 件のメッセージ',
198
+ 'rewind.current': '(現在:ここに留まる)',
199
+ 'rewind.none': '戻れるあなたのメッセージはまだありません。',
200
+ 'rewind.later': '以降 {n} 件',
201
+ 'rewind.ago.now': 'たった今',
202
+ 'rewind.ago.min': '{n} 分前',
203
+ 'rewind.ago.hour': '{n} 時間前',
204
+ 'rewind.ago.day': '{n} 日前',
205
+ 'rewind.filesQuestion': 'ファイル({n} 個)もその時の状態に戻しますか?',
206
+ 'rewind.filesYes': 'はい、ファイルも',
207
+ 'rewind.filesNo': 'いいえ、会話だけ',
208
+ 'rewind.done': 'あなたのメッセージに戻りました。以降の内容はモデルからも消えています。メッセージを編集して送信してください。',
209
+ 'rewind.doneImages': 'あなたのメッセージに戻りました(画像は保持されません。再度添付してください)。以降の内容はモデルからも消えています。',
210
+ };
@@ -0,0 +1,210 @@
1
+ export const pt = {
2
+ 'net.unknown': 'Erro de rede desconhecido',
3
+ 'net.rateLimit': 'Limite de requisições da API excedido (429)',
4
+ 'net.badGateway': 'Gateway do provedor temporariamente indisponível (502)',
5
+ 'net.unavailable': 'Servidor do provedor sobrecarregado (503)',
6
+ 'net.gatewayTimeout': 'Tempo esgotado no gateway do provedor (504)',
7
+ 'net.offline': 'Sem conexão de rede ou falha de DNS (offline)',
8
+ 'net.reset': 'A conexão com o servidor foi redefinida',
9
+ 'net.timeout': 'Tempo esgotado na conexão de rede',
10
+ 'net.refused': 'O servidor recusou a conexão',
11
+ 'net.fetchFailed': 'Falha na requisição de rede (conexão interrompida)',
12
+ 'net.generic': 'Falha na conexão com a internet',
13
+ 'net.failedAfter': 'Erro de rede: não foi possível restabelecer a conexão após {n} tentativas ({reason}).',
14
+ 'conn.unstable': 'conexão instável ({reason})',
15
+ 'conn.reconnecting': 'reconectando {attempt}/{max} · nova tentativa em {delay} s',
16
+ 'conn.restored': 'conexão restabelecida',
17
+ 'conn.classicUnstable': 'Conexão instável ({reason})',
18
+ 'conn.classicRetry': 'Reconectando [{attempt}/{max}] (pausa {delay} s)...',
19
+ 'conn.classicWaiting': 'Aguardando a rede [{attempt}/{max}]...',
20
+ 'conn.classicRestored': '✓ Conexão restabelecida! Retomando a geração...',
21
+ 'stop.connection': 'conexão cancelada',
22
+ 'stop.stopped': 'interrompido',
23
+ 'stop.interrupted': 'interrompido, enviando sua mensagem',
24
+ 'stop.classicConnection': 'Conexão cancelada (Ctrl+C).',
25
+ 'stop.classicStopped': 'Geração interrompida (Ctrl+C).',
26
+ 'stop.classicInterrupted': 'Interrompido: enviando sua mensagem.',
27
+ 'status.waiting': 'Aguardando o modelo',
28
+ 'status.thinking': 'Pensando',
29
+ 'status.writing': 'Escrevendo',
30
+ 'status.running': 'Executando',
31
+ 'status.reconnecting': 'Reconectando',
32
+ 'status.stop': 'ctrl+c para parar',
33
+ 'status.thinkingLine': 'pensando',
34
+ 'status.thoughtFor': 'pensou {sec} s',
35
+ 'composer.placeholder': 'Descreva uma tarefa ou faça uma pergunta…',
36
+ 'composer.queued': 'na fila',
37
+ 'composer.queuedMany': '{n} na fila',
38
+ 'composer.queuedHint': 'ctrl+enter envia agora · ↓ editar',
39
+ 'composer.hint1': 'enter enfileira · ctrl+c para',
40
+ 'composer.hint2': 'enter enfileira',
41
+ 'composer.hint3': 'enter enfileira · ctrl+c para',
42
+ 'composer.hint4': 'enter enfileira',
43
+ 'summary.toolOne': '{n} ferramenta',
44
+ 'summary.toolMany': '{n} ferramentas',
45
+ 'summary.in': '{n} entrada',
46
+ 'summary.out': '{n} saída',
47
+ 'summary.stopped': 'interrompido',
48
+ 'settings.title': 'configurações',
49
+ 'settings.section.appearance': 'Aparência',
50
+ 'settings.section.agent': 'Agente',
51
+ 'settings.section.general': 'Geral',
52
+ 'settings.section.about': 'Sobre',
53
+ 'settings.row.theme': 'Tema',
54
+ 'settings.row.layout': 'Interface',
55
+ 'settings.row.pureBlack': 'Fundo preto',
56
+ 'settings.row.autoApprove': 'Autoaprovar (YOLO)',
57
+ 'settings.row.maxIterations': 'Máx. de passos',
58
+ 'settings.row.memory': 'Memória do projeto',
59
+ 'settings.row.updates': 'Buscar atualizações',
60
+ 'settings.row.language': 'Idioma',
61
+ 'settings.row.about': 'Sobre o devx',
62
+ 'settings.short.theme': 'Tema',
63
+ 'settings.short.layout': 'Interface',
64
+ 'settings.short.pureBlack': 'Fundo preto',
65
+ 'settings.short.autoApprove': 'YOLO',
66
+ 'settings.short.maxIterations': 'Passos',
67
+ 'settings.short.memory': 'Memória',
68
+ 'settings.short.updates': 'Atualiz.',
69
+ 'settings.short.language': 'Idioma',
70
+ 'settings.short.about': 'Sobre',
71
+ 'settings.value.on': 'sim',
72
+ 'settings.value.off': 'não',
73
+ 'settings.value.clean': 'Limpa',
74
+ 'settings.value.classic': 'Clássica',
75
+ 'settings.value.unlimited': 'sem limite',
76
+ 'settings.value.steps': '{n} passos',
77
+ 'settings.hint.theme': 'Cores de toda a interface. Esquerda e direita percorrem os temas; o painel muda de cor na hora.',
78
+ 'settings.hint.layout': 'Limpa: entrada com moldura, cartões e linhas de ferramentas discretas. Clássica: o layout ASCII original.',
79
+ 'settings.hint.pureBlack': 'Deixa o fundo do terminal em preto OLED profundo (#0a0a0c). Desligado mantém o seu fundo.',
80
+ 'settings.hint.autoApprove': 'Pula as permissões de rotina. Comandos perigosos e arquivos de credenciais continuam perguntando. Vale só para esta sessão: na próxima vez que o devx iniciar, volta a ficar desligado.',
81
+ 'settings.hint.maxIterations': 'Quantos passos com ferramentas (edições, comandos) o agente pode dar por pedido.',
82
+ 'settings.hint.memory': 'Carrega as regras de .devx/memory.md em cada sessão.',
83
+ 'settings.hint.updates': 'Procura uma nova versão do devx no GitHub ao iniciar. O /update funciona de qualquer forma.',
84
+ 'settings.hint.language': 'Idioma da interface: mensagens, configurações e dicas. Código e nomes de ferramentas continuam em inglês.',
85
+ 'settings.hint.about': 'Agente de programação com IA para o terminal, da ApvCode. Licença MIT. github.com/apvcode/Termux-Dev',
86
+ 'settings.warnYolo': 'Ligado: o agente executa comandos e edita arquivos sem perguntar.',
87
+ 'settings.keys.move': 'mover',
88
+ 'settings.keys.change': 'alterar',
89
+ 'settings.keys.toggle': 'alternar',
90
+ 'settings.keys.close': 'fechar',
91
+ // ── /mcp panel
92
+ 'mcp.title': 'Servidores MCP',
93
+ 'mcp.count': 'servidores: {n}',
94
+ 'mcp.scope.user': 'Servidores do usuário',
95
+ 'mcp.scope.project': 'Servidores do projeto',
96
+ 'mcp.toolsCount': 'ferramentas: {n}',
97
+ 'mcp.status.connected': 'conectado',
98
+ 'mcp.status.connecting': 'conectando…',
99
+ 'mcp.status.failed': 'falhou',
100
+ 'mcp.status.disabled': 'desativado',
101
+ 'mcp.empty': 'Nenhum servidor MCP configurado.',
102
+ 'mcp.emptyHint': 'Use /mcp import para trazer os servidores do Claude Code, ou /mcp add <nome> <comando> [args].',
103
+ 'mcp.detail.status': 'Status',
104
+ 'mcp.detail.command': 'Comando',
105
+ 'mcp.detail.config': 'Config',
106
+ 'mcp.detail.capabilities': 'Recursos',
107
+ 'mcp.detail.tools': 'Ferramentas',
108
+ 'mcp.detail.error': 'Erro',
109
+ 'mcp.action.tools': 'Ver ferramentas',
110
+ 'mcp.action.reconnect': 'Reconectar',
111
+ 'mcp.action.disable': 'Desativar',
112
+ 'mcp.action.enable': 'Ativar',
113
+ 'mcp.toolsTitle': 'Ferramentas de {name}',
114
+ 'mcp.noTools': 'Este servidor não oferece ferramentas.',
115
+ 'mcp.tag.readOnly': 'somente leitura',
116
+ 'mcp.tag.destructive': 'destrutiva',
117
+ 'mcp.tag.openWorld': 'mundo aberto',
118
+ 'mcp.params': 'Parâmetros',
119
+ 'mcp.noParams': 'Sem parâmetros.',
120
+ 'mcp.required': 'obrigatório',
121
+ 'mcp.more': 'mais {n}',
122
+ 'mcp.keys.open': 'abrir',
123
+ 'mcp.keys.back': 'voltar',
124
+ 'mcp.keys.reload': 'recarregar tudo',
125
+ 'mcp.keys.close': 'fechar',
126
+ // ── questions from the agent
127
+ 'questions.title': 'Pergunta',
128
+ 'questions.custom': 'Digitar minha resposta…',
129
+ 'questions.skip': 'Pular',
130
+ 'questions.skipped': '(pulada)',
131
+ 'questions.yourAnswer': 'Sua resposta:',
132
+ 'questions.empty': 'A resposta não pode estar vazia',
133
+ // ── confirmations
134
+ 'confirm.yes': 'Sim',
135
+ 'confirm.no': 'Não',
136
+ 'confirm.exitTitle': 'sair',
137
+ 'confirm.exit': 'Sair do devx?',
138
+ 'confirm.goodbye': 'Até logo',
139
+ 'confirm.deleteAll': 'Apagar TODAS as {n} sessões salvas?',
140
+ 'confirm.update': 'Atualizar o devx para v{version} agora?',
141
+ 'confirm.commit': 'Fazer commit das alterações com esta mensagem?',
142
+ 'trust.title': 'confiança na pasta',
143
+ 'trust.question': 'Primeira vez nesta pasta. Confiar nela e deixar o agente trabalhar aqui?',
144
+ 'trust.yes': 'Sim, confiar nesta pasta',
145
+ 'trust.no': 'Não, sair',
146
+ 'trust.wantsYolo': 'A configuração do projeto pede autoaprovação (YOLO)',
147
+ 'trust.wantsAllowlist': 'A configuração do projeto permite estes comandos: {list}',
148
+ 'trust.exiting': 'Pasta não confiável, o devx será encerrado',
149
+ 'trust.mcpQuestion': 'Este projeto quer iniciar servidores MCP (programas locais, listados acima). Permitir?',
150
+ // ── view switches
151
+ 'view.expandThought': 'ctrl+p para expandir',
152
+ 'view.expandOutput': 'ctrl+o para expandir',
153
+ 'view.moreLines': '… +{n} linhas',
154
+ // ── plan approval
155
+ 'plan.cardTitle': 'Plano',
156
+ 'plan.files': 'Arquivos',
157
+ 'plan.ready': 'O plano está pronto. Começar a trabalhar nele?',
158
+ 'plan.go': 'Go: mudar para o modo AGENT e começar',
159
+ 'plan.edit': 'Alterar o plano (ficar no modo PLAN)',
160
+ 'plan.editHint': 'Diga o que mudar: o plano fica no modo PLAN e será refeito.',
161
+ 'plan.started': 'Modo AGENT: trabalhando no plano aprovado',
162
+ // ── undo
163
+ 'undo.question': 'Devolver {n} arquivo(s) ao estado de antes do último turno?',
164
+ 'undo.note': 'Inclui o que os comandos de shell fizeram. Arquivos ignorados pelo git não são tocados.',
165
+ 'undo.done': '{n} arquivo(s) restaurado(s)',
166
+ // ── permissions
167
+ 'permissions.title': 'Permitido sem perguntar',
168
+ 'permissions.none': 'Nada é permitido sem perguntar ainda: responda «Session» ou «Always» em um cartão de aprovação.',
169
+ 'permissions.hint': '/permissions clear remove tudo (inclusive o da sessão).',
170
+ 'permissions.cleared': 'Tudo o que era permitido sem perguntar foi removido',
171
+ // ── cost limit
172
+ 'settings.row.costLimit': 'Limite de custo',
173
+ 'settings.short.costLimit': 'Limite $',
174
+ 'settings.hint.costLimit': 'O máximo que uma sessão pode custar. Aos 80 % o devx avisa; no limite ele para a tarefa e pergunta antes de gastar mais.',
175
+ 'cost.title': 'limite de custo',
176
+ 'cost.warn': '{spent} gastos: 80 % do limite de {limit} desta sessão',
177
+ 'cost.stopped': 'Limite de custo de {limit} atingido: a tarefa foi interrompida',
178
+ 'cost.reached': 'Esta sessão gastou {spent} do limite de {limit}. Gastar mais?',
179
+ 'cost.raise': 'Continuar eleva o limite desta sessão para {limit}.',
180
+ 'cost.continue': 'Sim, continuar',
181
+ 'cost.cancel': 'Não, agora não',
182
+ 'cost.cancelled': 'Nada foi enviado. Sua mensagem voltou para a linha de entrada.',
183
+ // ── /copy and /rename
184
+ 'copy.none': 'Ainda não há resposta para copiar.',
185
+ 'copy.done': 'Última resposta copiada ({n} caracteres)',
186
+ 'copy.failed': 'Não foi possível acessar a área de transferência (sem wl-copy, xclip, xsel, e a resposta é longa demais para o terminal).',
187
+ 'rename.done': 'Chat renomeado: {name}',
188
+ 'rename.usage': 'Uso: /rename <nome>. Sem nome, a IA nomeia o chat de novo quando houver uma primeira resposta.',
189
+ 'rename.failed': 'A IA não achou um nome. Tente de novo ou dê um: /rename <nome>.',
190
+ // ── memory
191
+ 'memory.capped': 'A memória é longa: {n} dos fatos mais antigos não vão ao modelo (só os novos cabem). Remova os antigos de .devx/memory.md.',
192
+ 'mcp.removeUsage': 'Uso: /mcp remove <nome>',
193
+ 'mcp.removeNotFound': '«{name}» não está em ~/.devx/mcp.json. Um servidor de outro arquivo (o projeto, ~/.devxrc.json) precisa ser removido à mão desse arquivo.',
194
+ 'mcp.removed': 'Servidor «{name}» removido',
195
+ // ── /rewind
196
+ 'rewind.title': 'voltar atrás',
197
+ 'rewind.count': '{n} mensagens',
198
+ 'rewind.current': '(atual: ficar aqui)',
199
+ 'rewind.none': 'Ainda não há mensagem sua para a qual voltar.',
200
+ 'rewind.later': '{n} depois',
201
+ 'rewind.ago.now': 'agora mesmo',
202
+ 'rewind.ago.min': 'há {n} min',
203
+ 'rewind.ago.hour': 'há {n} h',
204
+ 'rewind.ago.day': 'há {n} d',
205
+ 'rewind.filesQuestion': 'Devolver também os arquivos ({n}) ao estado de então?',
206
+ 'rewind.filesYes': 'Sim, os arquivos também',
207
+ 'rewind.filesNo': 'Não, só a conversa',
208
+ 'rewind.done': 'De volta à sua mensagem. O que veio depois sumiu, para o modelo também. Edite a mensagem e envie.',
209
+ 'rewind.doneImages': 'De volta à sua mensagem (as imagens dela não foram mantidas, anexe de novo). O que veio depois sumiu, para o modelo também.',
210
+ };