beast-agent 0.15.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 -0
- package/LICENSE +21 -0
- package/README.md +94 -0
- package/assets/app.ico +0 -0
- package/assets/tray.png +0 -0
- package/bin/beast-agent.js +23 -0
- package/config.example.yaml +26 -0
- package/eng.traineddata +0 -0
- package/package.json +101 -0
- package/scripts/swap-electron.js +40 -0
- package/src/agent/bus.js +384 -0
- package/src/agent/computeruse.js +200 -0
- package/src/agent/config.js +284 -0
- package/src/agent/engine.js +3118 -0
- package/src/agent/kb.js +123 -0
- package/src/agent/llm.js +219 -0
- package/src/agent/logger.js +90 -0
- package/src/agent/memory.js +383 -0
- package/src/agent/pdf.js +20 -0
- package/src/agent/scripts/__pycache__/websearch.cpython-312.pyc +0 -0
- package/src/agent/scripts/news.py +113 -0
- package/src/agent/scripts/websearch.py +225 -0
- package/src/agent/skills.js +522 -0
- package/src/agent/tokens.js +39 -0
- package/src/agent/tools.js +911 -0
- package/src/agent/usage.js +125 -0
- package/src/agent/watchers.js +312 -0
- package/src/agent/watext.js +75 -0
- package/src/agent/whatsapp.js +494 -0
- package/src/cron.js +245 -0
- package/src/main.js +3622 -0
- package/src/preload.js +122 -0
- package/src/renderer/browserPreload.js +73 -0
- package/src/renderer/i18n.js +757 -0
- package/src/renderer/index.html +227 -0
- package/src/renderer/renderer.js +3250 -0
- package/src/renderer/style.css +1559 -0
- package/tests/approval.test.js +56 -0
- package/tests/bg-jobs.test.js +315 -0
- package/tests/bus.test.js +46 -0
- package/tests/computeruse-context.test.js +69 -0
- package/tests/cron.test.js +95 -0
- package/tests/engine.test.js +140 -0
- package/tests/eval.test.js +91 -0
- package/tests/fallout.test.js +188 -0
- package/tests/llm.test.js +56 -0
- package/tests/memory.test.js +33 -0
- package/tests/memoryloop.test.js +26 -0
- package/tests/notegen.test.js +63 -0
- package/tests/owner.test.js +32 -0
- package/tests/python.test.js +75 -0
- package/tests/scenarios.json +81 -0
- package/tests/sessioncode.test.js +50 -0
- package/tests/setup.js +9 -0
- package/tests/tokens.test.js +42 -0
- package/tests/tools.test.js +84 -0
- package/tests/usage.test.js +44 -0
- package/tests/v11.test.js +76 -0
- package/tests/watchers.test.js +206 -0
- package/tests/watext.test.js +53 -0
- package/tests/whatsapp.test.js +103 -0
- package/tests/wherewasi.test.js +40 -0
|
@@ -0,0 +1,757 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/* Hafif i18n (TR/EN):
|
|
4
|
+
- data-i18n → textContent
|
|
5
|
+
- data-i18n-ph → placeholder
|
|
6
|
+
- data-i18n-title→ title
|
|
7
|
+
- I18N.t(key) → dinamik render'larda
|
|
8
|
+
Seçim localStorage('beast.lang') içinde kalıcıdır (default tr). */
|
|
9
|
+
|
|
10
|
+
(function () {
|
|
11
|
+
const DICT = {
|
|
12
|
+
tr: {
|
|
13
|
+
// ana ekran
|
|
14
|
+
newChat: '+ Yeni Sohbet',
|
|
15
|
+
emptyHint: 'Hızlı · hafif · becerikli. Ne yapalım?',
|
|
16
|
+
composerPh: 'Bir şey sor ya da görev ver… (Enter: gönder · Shift+Enter: satır · /: komutlar)',
|
|
17
|
+
tipModel: 'Model seç',
|
|
18
|
+
tipThink: 'Düşünme (reasoning) seviyesi',
|
|
19
|
+
tipPickCfg: 'Picker\u2019da görünecek modeller',
|
|
20
|
+
tipRail: 'Paralel Ajan Konsolu',
|
|
21
|
+
tipWatch: 'İzleyiciler (Watchers)',
|
|
22
|
+
tipCron: 'Cron Görevler',
|
|
23
|
+
tip_light: 'Açık tema',
|
|
24
|
+
bc_label: 'Beast Kodu',
|
|
25
|
+
bc_copy: 'Kopyala',
|
|
26
|
+
bc_copied: 'Kopyalandı',
|
|
27
|
+
tipModelRefresh: 'Modelleri yeniden çek (tüm providerlar)',
|
|
28
|
+
mr_done: 'Modeller yenilendi',
|
|
29
|
+
tipMic: 'Sesli komut — konuş, bırakınca yazıya çevirsin',
|
|
30
|
+
mic_listening: 'Dinliyorum… bitirmek için mikrofona tekrar bas',
|
|
31
|
+
mic_transcribing: 'Ses yazıya çevriliyor (yerel Whisper)…',
|
|
32
|
+
mic_fail: 'Konuşma algılanamadı',
|
|
33
|
+
mic_denied: 'Mikrofon erişimi verilmedi',
|
|
34
|
+
tip_dark: 'Koyu tema',
|
|
35
|
+
tipTerm: 'Terminal (PowerShell)',
|
|
36
|
+
tipTermG: 'Git Bash terminali',
|
|
37
|
+
tipTermC: 'CMD terminali',
|
|
38
|
+
tipBrowser: 'Dahili tarayıcı',
|
|
39
|
+
tipEye: 'Ajan tarayıcısı görünür/gizli — göz açıkken aramalar panelde izlenir, kapalıyken gizli çalışır',
|
|
40
|
+
tipAttach: 'Dosya / resim ekle',
|
|
41
|
+
tipStop: 'Durdur',
|
|
42
|
+
tipSend: 'Gönder',
|
|
43
|
+
tipMic: 'Konuş — sesin yazıya dönsün',
|
|
44
|
+
tipGear: 'Ayarlar',
|
|
45
|
+
tipThemeDark: 'Koyu tema',
|
|
46
|
+
tipThemeLight: 'Açık tema',
|
|
47
|
+
tipLang: 'Dil değiştir / Switch language',
|
|
48
|
+
// kenar çubuğu & paneller
|
|
49
|
+
labelParallel: 'Paralel Ajanlar',
|
|
50
|
+
set_title: 'AYARLAR',
|
|
51
|
+
tab_provider: 'Provider',
|
|
52
|
+
tab_fallout: 'Fallout',
|
|
53
|
+
tab_memory: 'Memory',
|
|
54
|
+
tab_skills: 'Skills',
|
|
55
|
+
tab_notes: 'Oturum Notları',
|
|
56
|
+
tab_history: 'Oturum Geçmişi',
|
|
57
|
+
tab_agents: 'Paralel Ajanlar',
|
|
58
|
+
tab_tts: 'Sesli Yanıt',
|
|
59
|
+
tab_email: 'E-posta',
|
|
60
|
+
tab_integrations: 'Entegrasyonlar',
|
|
61
|
+
tab_websearch: 'Web Arama',
|
|
62
|
+
tab_limits: 'Limit Ayarları',
|
|
63
|
+
tab_security: 'Güvenlik',
|
|
64
|
+
tab_events: 'Olay Merkezi',
|
|
65
|
+
tab_cron: 'Cron',
|
|
66
|
+
tab_usage: 'Maliyet',
|
|
67
|
+
tab_logs: 'Log',
|
|
68
|
+
tab_dash: 'Dashboard',
|
|
69
|
+
tab_limits: 'Limit',
|
|
70
|
+
logs_h2: 'Loglar',
|
|
71
|
+
logs_sub: 'Uygulama olayları — son 600 satır. Dosya: %APPDATA%\\beast\\logs',
|
|
72
|
+
logs_clear: 'Logları Temizle',
|
|
73
|
+
logs_refresh: 'Yenile',
|
|
74
|
+
logs_empty: 'Henüz log yok.',
|
|
75
|
+
dash_h2: 'Oturum Geçmişi',
|
|
76
|
+
dash_sub: 'Tüm sohbet oturumları — kod, mesaj sayısı ve zaman',
|
|
77
|
+
dash_stat_sessions: 'Oturum',
|
|
78
|
+
dash_stat_msgs: 'Mesaj',
|
|
79
|
+
dash_stat_today: 'Bugün',
|
|
80
|
+
dash_stat_last: 'Son etkinlik',
|
|
81
|
+
dash_open: 'Aç',
|
|
82
|
+
dash_empty: 'Henüz oturum yok.',
|
|
83
|
+
lim_h2: 'Limit',
|
|
84
|
+
lim_sub: 'Provider bazlı maksimum girdi (prompt) token limiti — model başına gönderilen bağlamı kontrol eder. 0 = limitsiz.',
|
|
85
|
+
lim_enabled: 'Limit aktif',
|
|
86
|
+
lim_compress: 'Bağlam sıkıştırma (limit aşılırsa eski mesajlar özetlenerek çıkarılır)',
|
|
87
|
+
lim_default: 'Varsayılan limit (tüm providerlar, token)',
|
|
88
|
+
lim_prov_h2: 'Provider Limitleri',
|
|
89
|
+
lim_prov_sub: 'Provider adına göre limit — boş/0 ise varsayılan kullanılır',
|
|
90
|
+
lim_save: 'Limitleri Kaydet',
|
|
91
|
+
lim_saved_toast: 'Limitler kaydedildi',
|
|
92
|
+
lim_unlimited: 'limitsiz',
|
|
93
|
+
tf_h2: 'TinyFish Arama',
|
|
94
|
+
tf_sub: 'Ücretsiz, hızlı web arama API\u2019si. Anahtar girilirse web_search zincirinin EN BAŞINDA kullanılır; sonuç yoksa eski zincir (tarayıcı → çoklu-motor → Exa) devam eder.',
|
|
95
|
+
tf_key_label: 'TinyFish API anahtarı (agent.tinyfish.ai/api-keys)',
|
|
96
|
+
tf_status_set: 'TinyFish aktif — kayıtlı anahtar: ',
|
|
97
|
+
tf_status_unset: 'TinyFish pasif — eski arama zinciri kullanılıyor.',
|
|
98
|
+
tf_empty_toast: 'Anahtar boş — mevcut anahtar korundu',
|
|
99
|
+
tf_saved_toast: 'TinyFish anahtarı kaydedildi',
|
|
100
|
+
tf_cleared_toast: 'TinyFish anahtarı silindi',
|
|
101
|
+
btn_close: 'Kapat',
|
|
102
|
+
em_pass_masked: 'Mevcut şifre korunuyor — değiştirmek için yeniden gir',
|
|
103
|
+
p_h2: 'Provider',
|
|
104
|
+
p_sub: 'Beast config.yaml\u2019dan gelen modeller — aktif olanı seç',
|
|
105
|
+
p_del_title: 'Modeli listeden sil',
|
|
106
|
+
p_no_model: 'Model bulunamadı — %APPDATA%\\beast\\config.yaml ve .env kontrol et.',
|
|
107
|
+
p_deleted_h2: 'Silinen Modeller',
|
|
108
|
+
p_deleted_sub: '${n} model listeden çıkarıldı — geri getirebilirsin',
|
|
109
|
+
p_restore: 'Geri Getir',
|
|
110
|
+
p_role_h2: 'Özel Rol Modelleri',
|
|
111
|
+
p_role_sub: 'Vision, Terminal, Coding ve Subagent için ayrı model; boş bırakırsan ana model kullanılır',
|
|
112
|
+
p_role_main: '— Ana model —',
|
|
113
|
+
p_custom_h2: 'Özel Provider',
|
|
114
|
+
p_custom_sub: 'API adres + key ver, modeller otomatik çekilir',
|
|
115
|
+
p_custom_del: 'Sil',
|
|
116
|
+
p_name_opt: 'Ad (opsiyonel)',
|
|
117
|
+
p_api_url: 'API adresi',
|
|
118
|
+
p_api_key: 'API Key',
|
|
119
|
+
p_fetch: 'Modelleri Çek',
|
|
120
|
+
p_models_manual: 'Modelleri elle gir (her satıra bir model adı)',
|
|
121
|
+
p_save: 'Kaydet',
|
|
122
|
+
p_model_toast: 'Model: ',
|
|
123
|
+
p_del_toast: 'Silindi: ',
|
|
124
|
+
p_restore_toast: 'Geri getirildi: ',
|
|
125
|
+
p_prov_del_toast: 'Provider silindi',
|
|
126
|
+
p_fetching: 'çekiliyor…',
|
|
127
|
+
p_no_provider: 'Kayıtlı provider yok — önce Provider sekmesinden bir sağlayıcı ekle.',
|
|
128
|
+
fo_h2: 'Fallout Zinciri',
|
|
129
|
+
fo_enabled: 'Fallout aktif',
|
|
130
|
+
fo_resume: 'Açılışta yarım işi otomatik sürdür',
|
|
131
|
+
fo_count: '${n}/10 kayıt',
|
|
132
|
+
fo_provider_ph: 'provider seç…',
|
|
133
|
+
fo_save: 'Kaydet',
|
|
134
|
+
fo_clear_title: 'Kaydı sil',
|
|
135
|
+
fo_seq: 'Zincir sırası',
|
|
136
|
+
fo_sub: 'Çökme sonrası otomatik kurtarma — model çökerse sıradaki kayda geçer, durum diske yazılır ve kaldığı yerden devam eder. Aynı provider+modeli farklı API key ile birden çok kez ekleyebilirsin.',
|
|
137
|
+
fo_note: 'Sıra önemli: #1 çökerse #2\u0027ye, o da çökerse #3\u0027e… geçilir. Geçişler sohbette <b>☢ FALLOUT</b> durum etiketiyle görünür.',
|
|
138
|
+
mem_h2: 'Memory',
|
|
139
|
+
mem_sub: 'Ajanın kalıcı hafızası — sistem promptuna birebir girer, kısa tut',
|
|
140
|
+
mem_soul: 'SOUL.md — ajanın kişiliği (karakter, ton, davranış kuralları)',
|
|
141
|
+
mem_mem: 'MEMORY.md',
|
|
142
|
+
mem_user: 'USER.md',
|
|
143
|
+
mem_save: 'Kaydet',
|
|
144
|
+
mem_saved: 'Memory kaydedildi — SOUL.md dahil',
|
|
145
|
+
sk_h2: 'Skills',
|
|
146
|
+
sk_sub: 'SKILL.md indeksi — tam metin model tarafından okunur',
|
|
147
|
+
sk_rules_h2: 'Kalıcı Kurallar',
|
|
148
|
+
sk_rules_sub: 'Agent\u2019ın her sohbette uyduğu talimatlar — WA\u2019dan /rule ile de eklenir',
|
|
149
|
+
sk_no_rule: 'Henüz kural yok.',
|
|
150
|
+
sk_rule_ph: 'Yeni kural…',
|
|
151
|
+
sk_rule_add: 'Ekle',
|
|
152
|
+
sk_drafts_h2: 'Taslaklar',
|
|
153
|
+
sk_drafts_sub: 'Uzun işlerden otomatik doğan yetenek adayları — kabul edersen skill olur',
|
|
154
|
+
sk_no_draft: 'Taslak yok — agent\u2019ın 5+ araç kullandığı uzun işlerde otomatik üretilir.',
|
|
155
|
+
sk_dr_accept: 'Skill olarak kur',
|
|
156
|
+
sk_dr_drop: 'Sil',
|
|
157
|
+
sk_open_folder: 'Skills klasörünü aç',
|
|
158
|
+
tts_h2: 'Sesli Yanıt (TTS)',
|
|
159
|
+
tts_sub: 'Açık olursa WhatsApp cevapları metnin yanı sıra sesli not olarak da gönderilir.',
|
|
160
|
+
tts_active: 'Aktif',
|
|
161
|
+
tts_save: 'TTS Kaydet',
|
|
162
|
+
tts_note: 'OpenAI-uyumlu bir speech API kullanır (tts-1, tts-1-hd vb.). Sesler: alloy, echo, fable, onyx, nova, shimmer.',
|
|
163
|
+
tts_on: 'TTS açık — cevaplar sesli de gider',
|
|
164
|
+
tts_off: 'TTS kapalı',
|
|
165
|
+
em_h2: 'E-posta (Gmail)',
|
|
166
|
+
em_sub: 'IMAP/SMTP — Gmail hesabında "Uygulama Şifresi" oluşturup buraya gir. Agent mailleri okur, özetler ve senin adına gönderir.',
|
|
167
|
+
em_save: 'E-posta Kaydet',
|
|
168
|
+
em_note: 'Kaydettikten sonra agent\u2019a "gelen mailleri özetle", "X\u2019e mail at" gibi komutlar verebilirsin.',
|
|
169
|
+
em_saved: 'E-posta kaydedildi — agent artık maillere erişebilir',
|
|
170
|
+
it_h2: 'Entegrasyonlar',
|
|
171
|
+
it_sub: 'Mesajlaşma köprüleri — gelen mesajlar Beast\u2019e gider, cevap geri döner',
|
|
172
|
+
it_wa_sub: 'Özel mesajlar · gruplar (@mention ile) · slash komutları (/help)',
|
|
173
|
+
it_connect: 'QR ile Bağlan',
|
|
174
|
+
it_disconnect: 'Kes',
|
|
175
|
+
it_reset_pair: 'Eşlemeyi Sıfırla',
|
|
176
|
+
it_groups_on: 'WhatsApp gruplarında çalış — bot @mention edilince cevap verir',
|
|
177
|
+
it_groups_all: 'Mention şart değil: grup içindeki her mesaja karış',
|
|
178
|
+
it_allow_label: 'İzinli numaralar',
|
|
179
|
+
it_name_ph: 'İsim (zorunlu)',
|
|
180
|
+
it_num_ph: 'Numara 905xxxxxxxxx',
|
|
181
|
+
it_add: 'Ekle',
|
|
182
|
+
it_allow_note: 'İsim + numara zorunlu. Her kişinin yanındaki serbest/web/okuma/kısıtlı seçimiyle kişiye özel yetki ver.',
|
|
183
|
+
ev_h2: 'Olay Merkezi',
|
|
184
|
+
ev_sub: 'Cron\u2019suz canlı olaylar — kaynakları aç, abonelikleri agent kendisi kurar (event_subscribe). Tetiklenen olay ilgili sohbete düşer, cevap WhatsApp\u2019a gider.',
|
|
185
|
+
ev_on: 'Olay merkezi açık',
|
|
186
|
+
ev_mail: 'Yeni e-posta anlık takip (IMAP IDLE) — E-posta sekmesindeki hesabı kullanır',
|
|
187
|
+
ev_fs: 'Workspace dosya değişimi izleme',
|
|
188
|
+
ev_price_ph: 'Fiyat sembolü (örn PAXGUSDT)',
|
|
189
|
+
ev_save: 'Kaydet',
|
|
190
|
+
ev_price_sub: 'boş sembol = fiyat feed kapalı (Binance miniTicker)',
|
|
191
|
+
ev_token_copy: 'token kopyala',
|
|
192
|
+
ev_subs_h3: 'Aktif Abonelikler',
|
|
193
|
+
ev_no_sub: 'Abonelik yok — agent\u2019a "mail gelince haber ver" ya da "fiyat X altına inerse bağır" de, kendisi kurar.',
|
|
194
|
+
ev_on_toast: 'Olay merkezi açık',
|
|
195
|
+
ev_off_toast: 'Olay merkezi kapandı',
|
|
196
|
+
us_h2: 'Maliyet',
|
|
197
|
+
us_sub: 'Gerçek API kullanımından toplanır. USD tahmini için config.yaml\u2019da provider\u2019a price_in / price_out (1M token) ekle.',
|
|
198
|
+
us_today_calls: 'Bugünkü çağrı',
|
|
199
|
+
us_today_tokens: 'Bugün token',
|
|
200
|
+
us_today_cost: 'Bugün maliyet',
|
|
201
|
+
us_month_cost: 'Bu ay maliyet',
|
|
202
|
+
us_models_today: 'Modeller — bugün',
|
|
203
|
+
us_models_month: 'Modeller — bu ay',
|
|
204
|
+
us_no_records: 'Bu dönemde kayıt yok',
|
|
205
|
+
us_reset: 'Sayaçları sıfırla',
|
|
206
|
+
us_backup_h2: 'Yedekleme',
|
|
207
|
+
us_backup_sub: 'Tüm Beast verisi (ayarlar, API anahtarları, oturumlar, hafıza, WhatsApp eşlemesi) AES-256 ile ŞİFRELİ yedeklenir ve Beast Kodu ile imzalanır: Masaüstü\\Beast-Backups. Yedeği yalnız bu makine geri yükleyebilir.',
|
|
208
|
+
us_backup_now: 'Şimdi yedekle',
|
|
209
|
+
us_where_h2: 'Nerede Kaldım',
|
|
210
|
+
us_where_sub: 'Açılışta son oturumun durumu + yarım kalan todolar sohbete özet olarak düşer.',
|
|
211
|
+
us_where_on: 'Açılışta "nerede kaldım" özeti göster',
|
|
212
|
+
us_no_records: 'Bu dönemde kayıt yok',
|
|
213
|
+
us_reset_toast: 'Kullanım sayaçları sıfırlandı',
|
|
214
|
+
us_backup_ing: 'Yedekleniyor…',
|
|
215
|
+
us_backup_ok: 'Şifreli yedek alındı: Masaüstü\\Beast-Backups',
|
|
216
|
+
us_backup_err: 'Hata: ',
|
|
217
|
+
us_backup_restore: 'Yedekten Geri Yükle',
|
|
218
|
+
us_restore_ing: 'Geri yükleniyor…',
|
|
219
|
+
us_restore_ok: 'Geri yükleme tamamlandı — değişikliklerin oturması için uygulamayı yeniden başlat',
|
|
220
|
+
us_where_on_toast: 'Açılış özeti açık',
|
|
221
|
+
us_where_off_toast: 'Açılış özeti kapandı',
|
|
222
|
+
ws_calls: 'çağrı',
|
|
223
|
+
ws_token: 'token',
|
|
224
|
+
ws_h2: 'Web Arama',
|
|
225
|
+
ws_sub: 'Arama zinciri: 1) dahili tarayıcı (direk Google) 2) python çoklu-motor (ddgs / DDG+Bing+Mojeek) 3) Exa — otomatik. Exa anahtarı yalnızca son çare olarak kullanılır.',
|
|
226
|
+
ws_exa_label: 'Exa API anahtarı (exa.ai)',
|
|
227
|
+
ws_exa_ph: 'masaüstü görünümde maskeli',
|
|
228
|
+
ws_save: 'Kaydet',
|
|
229
|
+
ws_clear: 'Anahtarı Sil',
|
|
230
|
+
ws_note: 'Anahtar maskeli tutulur; yenisini yazıp kaydettiğinde eskisinin yerine geçer. Boş kaydet: mevcut anahtar korunur.',
|
|
231
|
+
ws_status_set: 'Exa aktif — kayıtlı anahtar: ',
|
|
232
|
+
ws_status_unset: 'Exa yapılandırılmadı — ücretsiz python çoklu-motor arama kullanılıyor.',
|
|
233
|
+
ws_empty_toast: 'Anahtar boş — mevcut anahtar korundu',
|
|
234
|
+
ws_saved_toast: 'Exa anahtarı kaydedildi',
|
|
235
|
+
ws_fail_toast: 'Kaydedilemedi',
|
|
236
|
+
ws_cleared_toast: 'Exa anahtarı silindi',
|
|
237
|
+
ag_h2: 'Paralel Ajanlar',
|
|
238
|
+
ag_sub: 'CEO\u2019nun devrettiği arka plan işleri — canlı izleme',
|
|
239
|
+
ag_ceo_label: 'CEO modu — konuşan ajan iş yapmaz, sadece emir verir',
|
|
240
|
+
ag_ceo_on: 'CEO modu açıldı',
|
|
241
|
+
ag_ceo_off: 'CEO modu kapandı',
|
|
242
|
+
ag_no_jobs: 'Henüz devredilmiş iş yok. CEO modunda agent somut işleri buraya düşürür.',
|
|
243
|
+
ag_working: 'çalışıyor',
|
|
244
|
+
ag_records: 'kayıt',
|
|
245
|
+
ag_st_running: 'çalışıyor',
|
|
246
|
+
ag_st_queued: 'kuyrukta',
|
|
247
|
+
ag_st_done: 'bitti',
|
|
248
|
+
ag_st_error: 'hata',
|
|
249
|
+
ag_st_aborted: 'iptal',
|
|
250
|
+
ag_cancel: 'İptal',
|
|
251
|
+
ag_delete: 'Sohbeti ve kaydı sil',
|
|
252
|
+
ag_empty: 'Henüz arka plan işi yok.\nCEO modunda ajan verdiği emirleri buraya düşürür.',
|
|
253
|
+
ag_tool_start: 'araç: ',
|
|
254
|
+
ag_detail: 'Dökümü',
|
|
255
|
+
ag_show: 'göster',
|
|
256
|
+
ag_hide: 'gizle',
|
|
257
|
+
ag_live: 'Canlı döküm',
|
|
258
|
+
ag_log_empty: '(boş)',
|
|
259
|
+
ag_detail_err: '(detay alınamadı)',
|
|
260
|
+
us_reset_toast: 'Kullanım sayaçları sıfırlandı',
|
|
261
|
+
us_backup_ok: 'Yedek alındı: Masaüstü\\Beast-Backups',
|
|
262
|
+
us_where_on_toast: 'Açılış özeti açık',
|
|
263
|
+
us_where_off_toast: 'Açılış özeti kapandı',
|
|
264
|
+
ws_h2: 'Web Arama',
|
|
265
|
+
ws_exa_label: 'Exa API anahtarı (exa.ai)',
|
|
266
|
+
ws_save: 'Kaydet',
|
|
267
|
+
ws_clear: 'Anahtarı Sil',
|
|
268
|
+
ws_key_note: 'Anahtar maskeli tutulur; yenisini yazıp kaydettiğinde eskisinin yerine geçer. Boş kaydet: mevcut anahtar korunur.',
|
|
269
|
+
ws_active: 'Exa aktif — kayıtlı anahtar: ',
|
|
270
|
+
ws_notcfg: 'Exa yapılandırılmadı — ücretsiz python çoklu-motor arama kullanılıyor.',
|
|
271
|
+
ws_empty: 'Anahtar boş — mevcut anahtar korundu',
|
|
272
|
+
// terminal & tarayıcı & mini
|
|
273
|
+
term_clear: 'Temizle',
|
|
274
|
+
term_ph: 'komut yaz, Enter\u2019la çalıştır…',
|
|
275
|
+
term_stop: 'Çalışan komutu durdur',
|
|
276
|
+
bb_ph: 'adres yaz veya ara…',
|
|
277
|
+
tip_bb_back: 'Geri',
|
|
278
|
+
tip_bb_fwd: 'İleri',
|
|
279
|
+
tip_bb_reload: 'Yenile',
|
|
280
|
+
tip_bb_shot: 'Ekran görüntüsünü sohbete ekle',
|
|
281
|
+
tip_bb_open: 'Tarayıcıda aç',
|
|
282
|
+
tip_bb_close: 'Kapat',
|
|
283
|
+
mini_watch: 'İzleyiciler (Watchers)',
|
|
284
|
+
mini_cron: 'Cron Görevler',
|
|
285
|
+
// cron formu
|
|
286
|
+
cron_h2: 'Cron Görevler',
|
|
287
|
+
cron_sub: 'Zamanlanmış görevler — saati gelince agent otomatik çalışır',
|
|
288
|
+
cron_name_ph: 'Görev adı',
|
|
289
|
+
cron_prompt_ph: 'Agent\u2019a verilecek görev…',
|
|
290
|
+
cron_add: '+ Görev Ekle',
|
|
291
|
+
cron_pr_5: 'Her 5 dakika',
|
|
292
|
+
cron_pr_15: 'Her 15 dakika',
|
|
293
|
+
cron_pr_30: 'Her 30 dakika',
|
|
294
|
+
cron_pr_hour: 'Her saat başı',
|
|
295
|
+
cron_pr_day9: 'Her gün 09:00',
|
|
296
|
+
cron_pr_wd21: 'Hafta içi 21:00',
|
|
297
|
+
cron_pr_custom: 'Özel cron…',
|
|
298
|
+
// tarihçe/limit/güvenlik panelleri (dinamik)
|
|
299
|
+
notes_h2: 'Oturum Notları',
|
|
300
|
+
history_h2: 'Oturum Geçmişi',
|
|
301
|
+
limits_h2: 'Limit Ayarları',
|
|
302
|
+
security_h2: 'Güvenlik',
|
|
303
|
+
st_open: 'Aç',
|
|
304
|
+
st_del: 'Sil',
|
|
305
|
+
sec_toggle: 'Tehlikeli işlemlerde onay iste (silme, değiştirme, komut çalıştırma, mail gönderme…)',
|
|
306
|
+
sec_sub: 'Kapalıyken her şey serbesttir (varsayım). Açıkken ajan riskli bir araç çağırmadan önce onay ister: sohbette onay kartı + WhatsApp\u2019a mesaj gider.',
|
|
307
|
+
sec_note: 'Onay: sohbet kartındaki butonlar ya da /approve · Bu araç için bir daha sorma: /approve always · Reddet: /deny',
|
|
308
|
+
sec_always_h2: 'Bir Daha Sorulmayan Araçlar',
|
|
309
|
+
sec_always_empty: 'Henüz "always" onaylı araç yok.',
|
|
310
|
+
sec_clear_always: 'Listeyi Temizle',
|
|
311
|
+
sec_on_toast: 'Onay kapısı AÇIK — riskli işlemlerde ajan sorar',
|
|
312
|
+
sec_off_toast: 'Onay kapısı KAPALI — her şey serbest',
|
|
313
|
+
sec_ok: 'Onayla',
|
|
314
|
+
sec_always: 'Her zaman',
|
|
315
|
+
sec_no: 'Reddet',
|
|
316
|
+
sec_ok_done: 'Onaylandı — devam ediyor',
|
|
317
|
+
sec_always_done: 'Onaylandı — bu araç için tekrar sorulmayacak',
|
|
318
|
+
sec_no_done: 'Reddedildi — ajan bu işlemi yapmadı',
|
|
319
|
+
// dinamik panel metinleri
|
|
320
|
+
prov_h2: 'Provider',
|
|
321
|
+
prov_sub: 'Beast config.yaml\u2019dan gelen modeller — aktif olanı seç',
|
|
322
|
+
notes_sub: 'Uzun konuşmaların özeti — input token tasarrufu için. Silersen agent o oturumun geçmişini notlardan hatırlamaz.',
|
|
323
|
+
notes_clear_all: 'Tüm Notları Temizle',
|
|
324
|
+
notes_empty: 'Henüz not alınmış oturum yok — konuşmalar 14 mesaja ulaşınca özet çıkarılır.',
|
|
325
|
+
notes_del: 'Notu Sil',
|
|
326
|
+
notes_open: 'Sohbeti Aç',
|
|
327
|
+
history_sub: 'Son 100 sohbet — tıklayıp aç, gereksizleri sil.',
|
|
328
|
+
hist_stat_sess: 'Oturum',
|
|
329
|
+
hist_stat_msg: 'Mesaj',
|
|
330
|
+
hist_stat_7d: 'Son 7 gün',
|
|
331
|
+
hist_empty: 'Henüz oturum yok.',
|
|
332
|
+
limits_sub: 'Provider bazlı maksimum input (bağlam) token limiti. Boş = varsayılan bütçe kullanılır. Ör. Groq 8000 token destekliyorsa 8000 yaz — ajan geçmişi bu bütçeye göre sıkıştırır.',
|
|
333
|
+
limits_compr: 'Bağlam sıkıştırma — eski mesajlar öze dönüşünce diskten de düşer (önerilir)',
|
|
334
|
+
limits_save: 'Limitleri Kaydet',
|
|
335
|
+
limits_note: 'Varsayılan input bütçesi: 18.000 token. Limit set edilen provider\u2019da bu değer geçerli olur.',
|
|
336
|
+
limits_empty: 'Model yok — Provider sekmesinden ekle.',
|
|
337
|
+
security_sub: 'Ajanın tehlikeli işlemlerinde onay kapısı. <b>Default kapalıdır</b> — ajan kendi kararına göre çalışır.',
|
|
338
|
+
stt_lang_label: 'Sesli mesaj dili (Whisper STT) · Voice note language',
|
|
339
|
+
stt_lang_sub: 'WA\u2019dan ve 🎤 mikrofondan gelen sesler bu dilde yazıya çevrilir.',
|
|
340
|
+
deleted: 'Silindi',
|
|
341
|
+
st_thinking: 'düşünüyor…',
|
|
342
|
+
st_queued: 'kuyruğa eklendi — iş bitince gider',
|
|
343
|
+
st_transcribing: 'ses yazıya çevriliyor…',
|
|
344
|
+
st_listening: 'dinliyorum… (bitirmek için 🎤)',
|
|
345
|
+
st_screenshot: 'ekran görüntüsü alınıyor…',
|
|
346
|
+
},
|
|
347
|
+
en: {
|
|
348
|
+
newChat: '+ New Chat',
|
|
349
|
+
emptyHint: 'Fast · light · capable. What shall we do?',
|
|
350
|
+
composerPh: 'Ask something or give a task… (Enter: send · Shift+Enter: newline · /: commands)',
|
|
351
|
+
tipModel: 'Choose model',
|
|
352
|
+
tipThink: 'Reasoning level',
|
|
353
|
+
tipPickCfg: 'Models shown in picker',
|
|
354
|
+
tipRail: 'Parallel Agents Console',
|
|
355
|
+
tipWatch: 'Watchers',
|
|
356
|
+
tipCron: 'Cron Jobs',
|
|
357
|
+
tip_light: 'Light theme',
|
|
358
|
+
bc_label: 'Beast Code',
|
|
359
|
+
bc_copy: 'Copy',
|
|
360
|
+
bc_copied: 'Copied',
|
|
361
|
+
tipModelRefresh: 'Refresh models (all providers)',
|
|
362
|
+
mr_done: 'Models refreshed',
|
|
363
|
+
tipMic: 'Voice command — speak, it transcribes when you stop',
|
|
364
|
+
mic_listening: 'Listening… press the mic again to finish',
|
|
365
|
+
mic_transcribing: 'Transcribing (local Whisper)…',
|
|
366
|
+
mic_fail: 'Could not detect speech',
|
|
367
|
+
mic_denied: 'Microphone access denied',
|
|
368
|
+
tip_dark: 'Dark theme',
|
|
369
|
+
tipTerm: 'Terminal (PowerShell)',
|
|
370
|
+
tipTermG: 'Git Bash terminal',
|
|
371
|
+
tipTermC: 'CMD terminal',
|
|
372
|
+
tipBrowser: 'Built-in browser',
|
|
373
|
+
tipEye: 'Agent browser visible/hidden — searches are watched in the panel when open, run hidden when closed',
|
|
374
|
+
tipAttach: 'Attach file / image',
|
|
375
|
+
tipStop: 'Stop',
|
|
376
|
+
tipSend: 'Send',
|
|
377
|
+
tipMic: 'Speak — your voice becomes text',
|
|
378
|
+
tipGear: 'Settings',
|
|
379
|
+
tipThemeDark: 'Dark theme',
|
|
380
|
+
tipThemeLight: 'Light theme',
|
|
381
|
+
tipLang: 'Dil değiştir / Switch language',
|
|
382
|
+
labelParallel: 'Parallel Agents',
|
|
383
|
+
set_title: 'SETTINGS',
|
|
384
|
+
tab_provider: 'Provider',
|
|
385
|
+
tab_fallout: 'Fallout',
|
|
386
|
+
tab_memory: 'Memory',
|
|
387
|
+
tab_skills: 'Skills',
|
|
388
|
+
tab_notes: 'Session Notes',
|
|
389
|
+
tab_history: 'Session History',
|
|
390
|
+
tab_agents: 'Parallel Agents',
|
|
391
|
+
tab_tts: 'Voice Reply',
|
|
392
|
+
tab_email: 'E-mail',
|
|
393
|
+
tab_integrations: 'Integrations',
|
|
394
|
+
tab_websearch: 'Web Search',
|
|
395
|
+
tab_limits: 'Limits',
|
|
396
|
+
tab_security: 'Security',
|
|
397
|
+
tab_events: 'Event Center',
|
|
398
|
+
tab_cron: 'Cron',
|
|
399
|
+
tab_usage: 'Costs',
|
|
400
|
+
tab_logs: 'Logs',
|
|
401
|
+
tab_dash: 'Dashboard',
|
|
402
|
+
tab_limits: 'Limit',
|
|
403
|
+
logs_h2: 'Logs',
|
|
404
|
+
logs_sub: 'Application events — last 600 lines. File: %APPDATA%\\beast\\logs',
|
|
405
|
+
logs_clear: 'Clear Logs',
|
|
406
|
+
logs_refresh: 'Refresh',
|
|
407
|
+
logs_empty: 'No logs yet.',
|
|
408
|
+
dash_h2: 'Session History',
|
|
409
|
+
dash_sub: 'All chat sessions — code, message count and time',
|
|
410
|
+
dash_stat_sessions: 'Sessions',
|
|
411
|
+
dash_stat_msgs: 'Messages',
|
|
412
|
+
dash_stat_today: 'Today',
|
|
413
|
+
dash_stat_last: 'Last activity',
|
|
414
|
+
dash_open: 'Open',
|
|
415
|
+
dash_empty: 'No sessions yet.',
|
|
416
|
+
lim_h2: 'Limit',
|
|
417
|
+
lim_sub: 'Provider-based maximum input (prompt) token limit — controls the context sent per model. 0 = unlimited.',
|
|
418
|
+
lim_enabled: 'Limit active',
|
|
419
|
+
lim_compress: 'Context compression (when over limit, older messages are dropped with a summary note)',
|
|
420
|
+
lim_default: 'Default limit (all providers, tokens)',
|
|
421
|
+
lim_prov_h2: 'Provider Limits',
|
|
422
|
+
lim_prov_sub: 'Limit per provider name — empty/0 uses the default',
|
|
423
|
+
lim_save: 'Save Limits',
|
|
424
|
+
lim_saved_toast: 'Limits saved',
|
|
425
|
+
lim_unlimited: 'unlimited',
|
|
426
|
+
tf_h2: 'TinyFish Search',
|
|
427
|
+
tf_sub: 'Free, fast web search API. If a key is set it is used at the TOP of the web_search chain; otherwise the old chain (browser → multi-engine → Exa) continues.',
|
|
428
|
+
tf_key_label: 'TinyFish API key (agent.tinyfish.ai/api-keys)',
|
|
429
|
+
tf_status_set: 'TinyFish active — saved key: ',
|
|
430
|
+
tf_status_unset: 'TinyFish off — using the old search chain.',
|
|
431
|
+
tf_empty_toast: 'Key empty — current key kept',
|
|
432
|
+
tf_saved_toast: 'TinyFish key saved',
|
|
433
|
+
tf_cleared_toast: 'TinyFish key deleted',
|
|
434
|
+
btn_close: 'Close',
|
|
435
|
+
em_pass_masked: 'Current password kept — type a new one to change it',
|
|
436
|
+
p_h2: 'Provider',
|
|
437
|
+
p_sub: 'Models from Beast config.yaml — pick the active one',
|
|
438
|
+
p_del_title: 'Remove model from list',
|
|
439
|
+
p_no_model: 'No models found — check %APPDATA%\\beast\\config.yaml and .env.',
|
|
440
|
+
p_deleted_h2: 'Deleted Models',
|
|
441
|
+
p_deleted_sub: '${n} model removed from list — you can restore it',
|
|
442
|
+
p_restore: 'Restore',
|
|
443
|
+
p_role_h2: 'Custom Role Models',
|
|
444
|
+
p_role_sub: 'Separate model for Vision, Terminal, Coding and Subagent; leave empty to use the main model',
|
|
445
|
+
p_role_main: '— Main model —',
|
|
446
|
+
p_custom_h2: 'Custom Provider',
|
|
447
|
+
p_custom_sub: 'Provide API URL + key, models are fetched automatically',
|
|
448
|
+
p_custom_del: 'Delete',
|
|
449
|
+
p_name_opt: 'Name (optional)',
|
|
450
|
+
p_api_url: 'API URL',
|
|
451
|
+
p_api_key: 'API Key',
|
|
452
|
+
p_fetch: 'Fetch Models',
|
|
453
|
+
p_models_manual: 'Enter models manually (one per line)',
|
|
454
|
+
p_save: 'Save',
|
|
455
|
+
p_model_toast: 'Model: ',
|
|
456
|
+
p_del_toast: 'Deleted: ',
|
|
457
|
+
p_restore_toast: 'Restored: ',
|
|
458
|
+
p_prov_del_toast: 'Provider deleted',
|
|
459
|
+
p_fetching: 'fetching…',
|
|
460
|
+
p_no_provider: 'No saved provider — add one from the Provider tab first.',
|
|
461
|
+
fo_h2: 'Fallout Chain',
|
|
462
|
+
fo_enabled: 'Fallout active',
|
|
463
|
+
fo_resume: 'Auto-resume unfinished work on startup',
|
|
464
|
+
fo_count: '${n}/10 slots',
|
|
465
|
+
fo_provider_ph: 'select provider…',
|
|
466
|
+
fo_save: 'Save',
|
|
467
|
+
fo_clear_title: 'Delete record',
|
|
468
|
+
fo_seq: 'Chain order',
|
|
469
|
+
fo_sub: 'Automatic recovery after a crash — if a model fails it moves to the next slot, state is written to disk and it resumes where it left off. You can add the same provider+model multiple times with different API keys.',
|
|
470
|
+
fo_note: 'Order matters: if #1 fails it goes to #2, if that fails to #3… Transitions appear in chat tagged with the <b>☢ FALLOUT</b> state label.',
|
|
471
|
+
mem_h2: 'Memory',
|
|
472
|
+
mem_sub: "The agent's persistent memory — goes straight into the system prompt, keep it short",
|
|
473
|
+
mem_soul: 'SOUL.md — agent personality (character, tone, behavior rules)',
|
|
474
|
+
mem_mem: 'MEMORY.md',
|
|
475
|
+
mem_user: 'USER.md',
|
|
476
|
+
mem_save: 'Save',
|
|
477
|
+
mem_saved: 'Memory saved — including SOUL.md',
|
|
478
|
+
sk_h2: 'Skills',
|
|
479
|
+
sk_sub: 'SKILL.md index — full text is read by the model',
|
|
480
|
+
sk_rules_h2: 'Persistent Rules',
|
|
481
|
+
sk_rules_sub: 'Instructions the agent follows in every chat — also addable via /rule on WA',
|
|
482
|
+
sk_no_rule: 'No rules yet.',
|
|
483
|
+
sk_rule_ph: 'New rule…',
|
|
484
|
+
sk_rule_add: 'Add',
|
|
485
|
+
sk_drafts_h2: 'Drafts',
|
|
486
|
+
sk_drafts_sub: 'Capability candidates auto-born from long tasks — accept to make a skill',
|
|
487
|
+
sk_no_draft: 'No drafts — auto-generated from long tasks where the agent uses 5+ tools.',
|
|
488
|
+
sk_dr_accept: 'Install as skill',
|
|
489
|
+
sk_dr_drop: 'Delete',
|
|
490
|
+
sk_open_folder: 'Open Skills folder',
|
|
491
|
+
tts_h2: 'Voice Reply (TTS)',
|
|
492
|
+
tts_sub: 'When on, WhatsApp replies are also sent as voice notes alongside text.',
|
|
493
|
+
tts_active: 'Active',
|
|
494
|
+
tts_save: 'Save TTS',
|
|
495
|
+
tts_note: 'Uses an OpenAI-compatible speech API (tts-1, tts-1-hd, etc.). Voices: alloy, echo, fable, onyx, nova, shimmer.',
|
|
496
|
+
tts_on: 'TTS on — replies also go as voice',
|
|
497
|
+
tts_off: 'TTS off',
|
|
498
|
+
em_h2: 'E-mail (Gmail)',
|
|
499
|
+
em_sub: 'IMAP/SMTP — create an "App Password" in your Gmail account and enter it here. The agent reads, summarizes and sends mail on your behalf.',
|
|
500
|
+
em_save: 'Save E-mail',
|
|
501
|
+
em_note: 'After saving you can give the agent commands like "summarize incoming mail", "send mail to X".',
|
|
502
|
+
em_saved: 'E-mail saved — the agent can now access mail',
|
|
503
|
+
it_h2: 'Integrations',
|
|
504
|
+
it_sub: 'Messaging bridges — incoming messages go to Beast, replies come back',
|
|
505
|
+
it_wa_sub: 'Private messages · groups (@mention) · slash commands (/help)',
|
|
506
|
+
it_connect: 'Connect via QR',
|
|
507
|
+
it_disconnect: 'Disconnect',
|
|
508
|
+
it_reset_pair: 'Reset pairing',
|
|
509
|
+
it_groups_on: 'Work in WhatsApp groups — bot replies when @mentioned',
|
|
510
|
+
it_groups_all: 'Mention not required: respond to every group message',
|
|
511
|
+
it_allow_label: 'Allowed numbers',
|
|
512
|
+
it_name_ph: 'Name (required)',
|
|
513
|
+
it_num_ph: 'Number 905xxxxxxxxx',
|
|
514
|
+
it_add: 'Add',
|
|
515
|
+
it_allow_note: 'Name + number required. Grant per-person permission (free/web/read/restricted) via the selector next to each.',
|
|
516
|
+
ev_h2: 'Event Center',
|
|
517
|
+
ev_sub: 'Live events without cron — open sources, the agent sets up subscriptions itself (event_subscribe). The triggered event drops into the relevant chat, the reply goes to WhatsApp.',
|
|
518
|
+
ev_on: 'Event center on',
|
|
519
|
+
ev_mail: 'Live e-mail tracking (IMAP IDLE) — uses the account from the E-mail tab',
|
|
520
|
+
ev_fs: 'Workspace file change monitoring',
|
|
521
|
+
ev_price_ph: 'Price symbol (e.g. PAXGUSDT)',
|
|
522
|
+
ev_save: 'Save',
|
|
523
|
+
ev_price_sub: 'empty symbol = price feed off (Binance miniTicker)',
|
|
524
|
+
ev_token_copy: 'copy token',
|
|
525
|
+
ev_subs_h3: 'Active Subscriptions',
|
|
526
|
+
ev_no_sub: 'No subscriptions — tell the agent "notify me on mail" or "shout if price drops below X" and it sets one up.',
|
|
527
|
+
ev_on_toast: 'Event center on',
|
|
528
|
+
ev_off_toast: 'Event center off',
|
|
529
|
+
us_h2: 'Costs',
|
|
530
|
+
us_sub: 'Collected from real API usage. For USD estimate add price_in / price_out (per 1M tokens) per provider in config.yaml.',
|
|
531
|
+
us_today_calls: 'Today calls',
|
|
532
|
+
us_today_tokens: 'Today tokens',
|
|
533
|
+
us_today_cost: "Today cost",
|
|
534
|
+
us_month_cost: 'This month cost',
|
|
535
|
+
us_models_today: 'Models — today',
|
|
536
|
+
us_models_month: 'Models — this month',
|
|
537
|
+
us_no_records: 'No records this period',
|
|
538
|
+
us_reset: 'Reset counters',
|
|
539
|
+
us_backup_h2: 'Backup',
|
|
540
|
+
us_backup_sub: 'All Beast data (settings, API keys, sessions, memory, WhatsApp mapping) is backed up AES-256 ENCRYPTED and signed with the Beast Code: Desktop\\Beast-Backups. Only this machine can restore it.',
|
|
541
|
+
us_backup_now: 'Backup now',
|
|
542
|
+
us_where_h2: 'Where I Left Off',
|
|
543
|
+
us_where_sub: 'On startup, a summary of the last session state + unfinished todos drops into the chat.',
|
|
544
|
+
us_where_on: 'Show "where I left off" summary on startup',
|
|
545
|
+
us_no_records: 'No records this period',
|
|
546
|
+
us_reset_toast: 'Usage counters reset',
|
|
547
|
+
us_backup_ing: 'Backing up…',
|
|
548
|
+
us_backup_ok: 'Encrypted backup saved: Desktop\\Beast-Backups',
|
|
549
|
+
us_backup_err: 'Error: ',
|
|
550
|
+
us_backup_restore: 'Restore from Backup',
|
|
551
|
+
us_restore_ing: 'Restoring…',
|
|
552
|
+
us_restore_ok: 'Restore complete — restart the app to apply',
|
|
553
|
+
us_where_on_toast: 'Startup summary on',
|
|
554
|
+
us_where_off_toast: 'Startup summary off',
|
|
555
|
+
ws_calls: 'calls',
|
|
556
|
+
ws_token: 'tokens',
|
|
557
|
+
ws_h2: 'Web Search',
|
|
558
|
+
ws_sub: 'Search chain: 1) built-in browser (direct Google) 2) python multi-engine (ddgs / DDG+Bing+Mojeek) 3) Exa — automatic. The Exa key is only used as a last resort.',
|
|
559
|
+
ws_exa_label: 'Exa API key (exa.ai)',
|
|
560
|
+
ws_exa_ph: 'masked on desktop view',
|
|
561
|
+
ws_save: 'Save',
|
|
562
|
+
ws_clear: 'Delete Key',
|
|
563
|
+
ws_note: 'The key is kept masked; saving a new one replaces the old. Saving empty keeps the current key.',
|
|
564
|
+
ws_status_set: 'Exa active — saved key: ',
|
|
565
|
+
ws_status_unset: 'Exa not configured — using free python multi-engine search.',
|
|
566
|
+
ws_empty_toast: 'Key empty — current key kept',
|
|
567
|
+
ws_saved_toast: 'Exa key saved',
|
|
568
|
+
ws_fail_toast: 'Could not save',
|
|
569
|
+
ws_cleared_toast: 'Exa key deleted',
|
|
570
|
+
ag_h2: 'Parallel Agents',
|
|
571
|
+
ag_sub: 'Background tasks delegated by the CEO — live monitoring',
|
|
572
|
+
ag_ceo_label: 'CEO mode — the talking agent does no work, only gives orders',
|
|
573
|
+
ag_ceo_on: 'CEO mode on',
|
|
574
|
+
ag_ceo_off: 'CEO mode off',
|
|
575
|
+
ag_no_jobs: 'No delegated tasks yet. In CEO mode the agent drops concrete work here.',
|
|
576
|
+
ag_working: 'running',
|
|
577
|
+
ag_records: 'records',
|
|
578
|
+
ag_st_running: 'running',
|
|
579
|
+
ag_st_queued: 'queued',
|
|
580
|
+
ag_st_done: 'done',
|
|
581
|
+
ag_st_error: 'error',
|
|
582
|
+
ag_st_aborted: 'aborted',
|
|
583
|
+
ag_cancel: 'Cancel',
|
|
584
|
+
ag_delete: 'Delete chat and record',
|
|
585
|
+
ag_empty: 'No background tasks yet.\nIn CEO mode the agent drops the orders it gave here.',
|
|
586
|
+
ag_tool_start: 'tool: ',
|
|
587
|
+
ag_detail: 'Log',
|
|
588
|
+
ag_show: 'show',
|
|
589
|
+
ag_hide: 'hide',
|
|
590
|
+
ag_live: 'Live log',
|
|
591
|
+
ag_log_empty: '(empty)',
|
|
592
|
+
ag_detail_err: '(could not get details)',
|
|
593
|
+
cr_empty: 'No tasks yet — add from above.',
|
|
594
|
+
cr_dot_on: 'active — click: fill the form',
|
|
595
|
+
cr_dot_off: 'off — click: fill the form',
|
|
596
|
+
cr_next: 'next: ',
|
|
597
|
+
cr_last: ' · last: ',
|
|
598
|
+
cr_run: 'Run now',
|
|
599
|
+
cr_pause: 'Pause',
|
|
600
|
+
cr_start: 'Start',
|
|
601
|
+
cr_del: 'Delete',
|
|
602
|
+
cr_modal_empty: 'No saved cron tasks — add from Settings → Cron tab.',
|
|
603
|
+
cr_ran: 'Started',
|
|
604
|
+
cr_toggle_pause: 'Pause',
|
|
605
|
+
w_empty: 'No saved watchers — add from the form above.',
|
|
606
|
+
wa_vazgec: 'Cancel',
|
|
607
|
+
wa_kaydet: 'save',
|
|
608
|
+
wa_updated: 'Updated',
|
|
609
|
+
wa_isim_ph: 'name',
|
|
610
|
+
wa_numara_ph: 'number',
|
|
611
|
+
wa_no_name_title: 'This person will NOT get replies — click to give a name',
|
|
612
|
+
wa_edit_title: 'Click: edit name/number',
|
|
613
|
+
wa_perm_title: 'Permission level — sets this person\u2019s agent access',
|
|
614
|
+
wa_owner_title_on: 'This person is the OWNER of BEAST — click to transfer to someone else',
|
|
615
|
+
wa_owner_title_off: 'Click: make this person the OWNER (only one allowed)',
|
|
616
|
+
wa_owner_on: '👑 owner',
|
|
617
|
+
wa_owner_off: 'make owner',
|
|
618
|
+
wa_perm_all: 'free',
|
|
619
|
+
wa_perm_read: 'read',
|
|
620
|
+
wa_perm_chat: 'restricted',
|
|
621
|
+
cr_empty: 'Henüz görev yok — yukarıdan ekle.',
|
|
622
|
+
cr_dot_on: 'aktif — tıkla: forma doldur',
|
|
623
|
+
cr_dot_off: 'kapalı — tıkla: forma doldur',
|
|
624
|
+
cr_next: 'sıradaki: ',
|
|
625
|
+
cr_last: ' · son: ',
|
|
626
|
+
cr_run: 'Şimdi çalıştır',
|
|
627
|
+
cr_pause: 'Durdur',
|
|
628
|
+
cr_start: 'Başlat',
|
|
629
|
+
cr_del: 'Sil',
|
|
630
|
+
cr_modal_empty: 'Kayıtlı cron görev yok — Ayarlar → Cron sekmesinden ekle.',
|
|
631
|
+
cr_ran: 'Çalıştırıldı',
|
|
632
|
+
cr_toggle_pause: 'Duraklat',
|
|
633
|
+
w_empty: 'Kayıtlı izleyici yok — yukarıdaki formla ekle.',
|
|
634
|
+
wa_vazgec: 'Vazgeç',
|
|
635
|
+
wa_kaydet: 'kaydet',
|
|
636
|
+
wa_updated: 'Güncellendi',
|
|
637
|
+
wa_isim_ph: 'isim',
|
|
638
|
+
wa_numara_ph: 'numara',
|
|
639
|
+
wa_no_name_title: 'Bu kişiye cevap VERİLMEYECEK — tıklayıp isim ver',
|
|
640
|
+
wa_edit_title: 'Tıkla: isim/numara düzenle',
|
|
641
|
+
wa_perm_title: 'Yetki seviyesi — bu kişinin agent erişimini belirler',
|
|
642
|
+
wa_owner_title_on: 'Bu kişi BEAST\u2019İN SAHİBİ — tıklayıp başka kişiye devret',
|
|
643
|
+
wa_owner_title_off: 'Tıkla: bu kişiyi SAHİP yap (yalnız biri olabilir)',
|
|
644
|
+
wa_owner_on: '👑 sahip',
|
|
645
|
+
wa_owner_off: 'sahip yap',
|
|
646
|
+
wa_perm_all: 'serbest',
|
|
647
|
+
wa_perm_read: 'okuma',
|
|
648
|
+
wa_perm_chat: 'kısıtlı',
|
|
649
|
+
us_reset_toast: 'Usage counters reset',
|
|
650
|
+
us_backup_ok: 'Backup taken: Desktop\\Beast-Backups',
|
|
651
|
+
us_where_on_toast: 'Startup summary on',
|
|
652
|
+
us_where_off_toast: 'Startup summary off',
|
|
653
|
+
ws_h2: 'Web Search',
|
|
654
|
+
ws_exa_label: 'Exa API key (exa.ai)',
|
|
655
|
+
ws_save: 'Save',
|
|
656
|
+
ws_clear: 'Delete Key',
|
|
657
|
+
ws_key_note: 'Key is kept masked; saving a new one replaces the old. Save empty: existing key kept.',
|
|
658
|
+
ws_active: 'Exa active — saved key: ',
|
|
659
|
+
ws_notcfg: 'Exa not configured — free python multi-engine search is used.',
|
|
660
|
+
ws_empty: 'Key empty — existing key kept',
|
|
661
|
+
term_clear: 'Clear',
|
|
662
|
+
term_ph: 'type a command, press Enter…',
|
|
663
|
+
term_stop: 'Stop running command',
|
|
664
|
+
bb_ph: 'type an address or search…',
|
|
665
|
+
tip_bb_back: 'Back',
|
|
666
|
+
tip_bb_fwd: 'Forward',
|
|
667
|
+
tip_bb_reload: 'Reload',
|
|
668
|
+
tip_bb_shot: 'Add screenshot to chat',
|
|
669
|
+
tip_bb_open: 'Open in browser',
|
|
670
|
+
tip_bb_close: 'Close',
|
|
671
|
+
mini_watch: 'Watchers',
|
|
672
|
+
mini_cron: 'Cron Jobs',
|
|
673
|
+
cron_h2: 'Cron Jobs',
|
|
674
|
+
cron_sub: 'Scheduled tasks — the agent runs automatically when due',
|
|
675
|
+
cron_name_ph: 'Job name',
|
|
676
|
+
cron_prompt_ph: 'Task to give the agent…',
|
|
677
|
+
cron_add: '+ Add Job',
|
|
678
|
+
cron_pr_5: 'Every 5 minutes',
|
|
679
|
+
cron_pr_15: 'Every 15 minutes',
|
|
680
|
+
cron_pr_30: 'Every 30 minutes',
|
|
681
|
+
cron_pr_hour: 'Every hour',
|
|
682
|
+
cron_pr_day9: 'Every day 09:00',
|
|
683
|
+
cron_pr_wd21: 'Weekdays 21:00',
|
|
684
|
+
cron_pr_custom: 'Custom cron…',
|
|
685
|
+
notes_h2: 'Session Notes',
|
|
686
|
+
history_h2: 'Session History',
|
|
687
|
+
limits_h2: 'Limits',
|
|
688
|
+
security_h2: 'Security',
|
|
689
|
+
st_open: 'Open',
|
|
690
|
+
st_del: 'Delete',
|
|
691
|
+
sec_toggle: 'Ask approval for dangerous actions (delete, modify, run commands, send mail…)',
|
|
692
|
+
sec_sub: 'When off, everything is free (default). When on, the agent asks approval before a risky tool call: an approval card in chat + a WhatsApp message.',
|
|
693
|
+
sec_note: 'Approve: chat card buttons or /approve · Never ask again for this tool: /approve always · Deny: /deny',
|
|
694
|
+
sec_always_h2: 'Tools Never Asked Again',
|
|
695
|
+
sec_always_empty: 'No "always" approved tools yet.',
|
|
696
|
+
sec_clear_always: 'Clear List',
|
|
697
|
+
sec_on_toast: 'Approval gate ON — the agent asks before risky actions',
|
|
698
|
+
sec_off_toast: 'Approval gate OFF — everything free',
|
|
699
|
+
sec_ok: 'Approve',
|
|
700
|
+
sec_always: 'Always',
|
|
701
|
+
sec_no: 'Deny',
|
|
702
|
+
sec_ok_done: 'Approved — continuing',
|
|
703
|
+
sec_always_done: 'Approved — will not ask again for this tool',
|
|
704
|
+
sec_no_done: 'Denied — the agent did not perform the action',
|
|
705
|
+
prov_h2: 'Provider',
|
|
706
|
+
prov_sub: 'Models from Beast config.yaml — pick the active one',
|
|
707
|
+
notes_sub: 'Summaries of long conversations — saves input tokens. If deleted, the agent loses session recall.',
|
|
708
|
+
notes_clear_all: 'Clear All Notes',
|
|
709
|
+
notes_empty: 'No session notes yet — summaries are produced after 14 messages.',
|
|
710
|
+
notes_del: 'Delete Note',
|
|
711
|
+
notes_open: 'Open Chat',
|
|
712
|
+
history_sub: 'Last 100 chats — click to open, delete what you do not need.',
|
|
713
|
+
hist_stat_sess: 'Sessions',
|
|
714
|
+
hist_stat_msg: 'Messages',
|
|
715
|
+
hist_stat_7d: 'Last 7 days',
|
|
716
|
+
hist_empty: 'No sessions yet.',
|
|
717
|
+
limits_sub: 'Per-provider maximum input (context) token limit. Empty = default budget. E.g. if Groq supports 8000 tokens, write 8000 — history is compressed to fit.',
|
|
718
|
+
limits_compr: 'Context compression — summarized old messages are also dropped from disk (recommended)',
|
|
719
|
+
limits_save: 'Save Limits',
|
|
720
|
+
limits_note: 'Default input budget: 18,000 tokens. A set limit overrides it for that provider.',
|
|
721
|
+
limits_empty: 'No models — add one in the Provider tab.',
|
|
722
|
+
security_sub: 'Approval gate for the agent\u2019s dangerous actions. <b>Off by default</b> — the agent runs on its own judgment.',
|
|
723
|
+
stt_lang_label: 'Voice note language (Whisper STT) · Sesli mesaj dili',
|
|
724
|
+
stt_lang_sub: 'Voice from WhatsApp and the 🎤 mic is transcribed in this language.',
|
|
725
|
+
deleted: 'Deleted',
|
|
726
|
+
st_thinking: 'thinking…',
|
|
727
|
+
st_queued: 'queued — sent when current task ends',
|
|
728
|
+
st_transcribing: 'transcribing voice…',
|
|
729
|
+
st_listening: 'listening… (tap 🎤 to finish)',
|
|
730
|
+
st_screenshot: 'capturing screen…',
|
|
731
|
+
},
|
|
732
|
+
};
|
|
733
|
+
|
|
734
|
+
let lang = 'tr';
|
|
735
|
+
try { lang = localStorage.getItem('beast.lang') === 'en' ? 'en' : 'tr'; } catch {}
|
|
736
|
+
|
|
737
|
+
function t(key) {
|
|
738
|
+
return (DICT[lang] && DICT[lang][key]) || (DICT.tr && DICT.tr[key]) || key;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
function apply(root) {
|
|
742
|
+
const r = root || document;
|
|
743
|
+
r.querySelectorAll('[data-i18n]').forEach((el) => { el.textContent = t(el.dataset.i18n); });
|
|
744
|
+
r.querySelectorAll('[data-i18n-ph]').forEach((el) => { el.placeholder = t(el.dataset.i18nPh); });
|
|
745
|
+
r.querySelectorAll('[data-i18n-title]').forEach((el) => { el.title = t(el.dataset.i18nTitle); });
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
function setLang(l) {
|
|
749
|
+
lang = DICT[l] ? l : 'tr';
|
|
750
|
+
try { localStorage.setItem('beast.lang', lang); } catch {}
|
|
751
|
+
apply(document);
|
|
752
|
+
try { document.dispatchEvent(new CustomEvent('langchange', { detail: { lang } })); } catch {}
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
window.I18N = { t, apply, setLang, get lang() { return lang; } };
|
|
756
|
+
apply(document);
|
|
757
|
+
})();
|