beast-agent 2.31.0 → 2.33.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/src/preload.js CHANGED
@@ -120,6 +120,7 @@ contextBridge.exposeInMainWorld('beast', {
120
120
  financeCancel: (ticket) => ipcRenderer.invoke('finance:cancel', { ticket }),
121
121
  financeInstall: () => ipcRenderer.invoke('finance:install'),
122
122
  financeSymbolsList: (filter) => ipcRenderer.invoke('finance:symbols:list', filter),
123
+ financeReport: () => ipcRenderer.invoke('finance:report'),
123
124
  clipRead: () => ipcRenderer.invoke('clip:read'),
124
125
  clipWrite: (t) => ipcRenderer.invoke('clip:write', t),
125
126
  thinkSet: (v) => ipcRenderer.invoke('think:set', v),
@@ -147,6 +148,8 @@ contextBridge.exposeInMainWorld('beast', {
147
148
  cronDelete: (id) => ipcRenderer.invoke('cron:delete', id),
148
149
  cronToggle: (id) => ipcRenderer.invoke('cron:toggle', id),
149
150
  cronRunNow: (id) => ipcRenderer.invoke('cron:runNow', id),
151
+ notifyGet: () => ipcRenderer.invoke('notify:get'),
152
+ notifySet: (on) => ipcRenderer.invoke('notify:set', on),
150
153
 
151
154
  watchersList: () => ipcRenderer.invoke('watchers:list'),
152
155
 
@@ -222,6 +225,9 @@ contextBridge.exposeInMainWorld('beast', {
222
225
  whereWasISet: (cfg) => ipcRenderer.invoke('wherewasi:set', cfg),
223
226
  getEmail: () => ipcRenderer.invoke('email:get'),
224
227
  setEmail: (cfg) => ipcRenderer.invoke('email:set', cfg),
228
+ emailList: (opts) => ipcRenderer.invoke('email:list', opts),
229
+ emailRead: (uid) => ipcRenderer.invoke('email:read', uid),
230
+ emailSend: (msg) => ipcRenderer.invoke('email:send', msg),
225
231
  captureScreen: () => ipcRenderer.invoke('screen:capture'),
226
232
  waListSessions: () => ipcRenderer.invoke('wa:sessions'),
227
233
  botsList: () => ipcRenderer.invoke('bots:list'),
@@ -166,6 +166,7 @@
166
166
  em_mem_clear: 'Hafızayı Temizle',
167
167
  em_mem_cleared: 'Empati hafızası temizlendi',
168
168
  tab_cron: 'Cron',
169
+ tab_agenda: 'Ajanda',
169
170
  tab_usage: 'Maliyet',
170
171
  tab_logs: 'Log',
171
172
  tab_dash: 'Dashboard',
@@ -687,6 +688,50 @@
687
688
  wa_queue_info: 'Mesaj kuyruğu: ${n} bekleyen',
688
689
  wa_queue_failed: '${n} gönderilemedi',
689
690
  wa_queue_empty_ok: 'Kuyruk temiz',
691
+ /* Cron düzenleme */
692
+ cr_update: 'Güncelle',
693
+ cr_cancel_edit: 'Vazgeç',
694
+ cr_edit_hint: 'tıkla: düzenle',
695
+ cr_edit_loaded: 'Görev forma yüklendi — düzenleyip Güncelle',
696
+ cr_updated: 'Görev güncellendi',
697
+ cr_added: 'Görev eklendi',
698
+ cr_edit_cancelled: 'Düzenleme iptal edildi',
699
+ /* İzleyici ekleme formu */
700
+ w_add: '+',
701
+ w_added: 'İzleyici eklendi',
702
+ w_add_name: 'İsim',
703
+ w_add_url: 'https://...',
704
+ w_add_path: 'json path (örn: data.price)',
705
+ w_add_value: 'eşik değer',
706
+ w_add_re: 'regex (opsiyonel)',
707
+ w_kind_web: 'Web',
708
+ w_kind_battery: 'Pil',
709
+ w_kind_logs: 'Log',
710
+ w_op_changed: 'değişti',
711
+ /* Ajanda */
712
+ aj_h2: 'Ajanda',
713
+ aj_sub: 'Yaklaşan cron görevleri, hatırlatıcılar ve izleyiciler — en yakın üstte.',
714
+ aj_empty: 'Planlanmış bir şey yok.',
715
+ aj_now: 'şimdi',
716
+ aj_later: 'sonra',
717
+ aj_ago: 'önce',
718
+ aj_notify: 'Masaüstü bildirimleri (toast) — cron, hatırlatıcı, izleyici ve ajan bitişinde',
719
+ aj_notify_on: 'Bildirimler açık',
720
+ aj_notify_off: 'Bildirimler kapalı',
721
+ /* E-posta paneli */
722
+ mail_inbox: 'Gelen Kutusu',
723
+ mail_refresh: 'Yenile',
724
+ mail_compose: 'Yeni Mail',
725
+ mail_to: 'alıcı@ornek.com',
726
+ mail_subject: 'Konu',
727
+ mail_body: 'Mesaj…',
728
+ mail_send: 'Gönder',
729
+ mail_sent: 'Mail gönderildi',
730
+ mail_send_fail: 'Mail gönderilemedi',
731
+ mail_empty: 'Gelen kutusu boş.',
732
+ mail_reply: 'Yanıtla',
733
+ mail_read_fail: 'Mail okunamadı',
734
+ mail_need_to: 'Alıcı adresi gerekli',
690
735
  },
691
736
  en: {
692
737
  newChat: '+ New Chat',
@@ -842,6 +887,7 @@
842
887
  em_mem_clear: 'Clear Memory',
843
888
  em_mem_cleared: 'Empathy memory cleared',
844
889
  tab_cron: 'Cron',
890
+ tab_agenda: 'Agenda',
845
891
  tab_usage: 'Cost',
846
892
  tab_logs: 'Logs',
847
893
  tab_dash: 'Dashboard',
@@ -1107,6 +1153,50 @@
1107
1153
  wa_queue_info: 'Message queue: ${n} pending',
1108
1154
  wa_queue_failed: '${n} could not be sent',
1109
1155
  wa_queue_empty_ok: 'Queue clear',
1156
+ /* Cron edit */
1157
+ cr_update: 'Update',
1158
+ cr_cancel_edit: 'Cancel',
1159
+ cr_edit_hint: 'click: edit',
1160
+ cr_edit_loaded: 'Task loaded into form — edit and Update',
1161
+ cr_updated: 'Task updated',
1162
+ cr_added: 'Task added',
1163
+ cr_edit_cancelled: 'Edit cancelled',
1164
+ /* Watcher add form */
1165
+ w_add: '+',
1166
+ w_added: 'Watcher added',
1167
+ w_add_name: 'Name',
1168
+ w_add_url: 'https://...',
1169
+ w_add_path: 'json path (e.g. data.price)',
1170
+ w_add_value: 'threshold value',
1171
+ w_add_re: 'regex (optional)',
1172
+ w_kind_web: 'Web',
1173
+ w_kind_battery: 'Battery',
1174
+ w_kind_logs: 'Log',
1175
+ w_op_changed: 'changed',
1176
+ /* Agenda */
1177
+ aj_h2: 'Agenda',
1178
+ aj_sub: 'Upcoming cron jobs, reminders and watchers — nearest first.',
1179
+ aj_empty: 'Nothing scheduled.',
1180
+ aj_now: 'now',
1181
+ aj_later: 'from now',
1182
+ aj_ago: 'ago',
1183
+ aj_notify: 'Desktop notifications (toast) — on cron, reminder, watcher and agent finish',
1184
+ aj_notify_on: 'Notifications on',
1185
+ aj_notify_off: 'Notifications off',
1186
+ /* Email panel */
1187
+ mail_inbox: 'Inbox',
1188
+ mail_refresh: 'Refresh',
1189
+ mail_compose: 'New Mail',
1190
+ mail_to: 'to@example.com',
1191
+ mail_subject: 'Subject',
1192
+ mail_body: 'Message…',
1193
+ mail_send: 'Send',
1194
+ mail_sent: 'Mail sent',
1195
+ mail_send_fail: 'Could not send mail',
1196
+ mail_empty: 'Inbox is empty.',
1197
+ mail_reply: 'Reply',
1198
+ mail_read_fail: 'Could not read mail',
1199
+ mail_need_to: 'Recipient address required',
1110
1200
  us_reset_toast: 'Usage counters reset',
1111
1201
  us_backup_ok: 'Backup taken: Desktop\\Beast-Backups',
1112
1202
  us_where_on_toast: 'Startup summary on',
@@ -190,6 +190,59 @@
190
190
  </div>
191
191
  <div id="finTraderStatus">Kapalı</div>
192
192
  </div>
193
+ <div class="fin-card">
194
+ <div class="fin-card-title">RİSK OTOMASYONU <span id="finWatchDot" class="fin-dot off" title="Koruma döngüsü"></span><span id="finWatchInfo" class="fin-hint"></span></div>
195
+ <div class="fin-field fin-check">
196
+ <label title="5 saniyelik döngü: +R'da SL'yi başabaşa çeker, trailing uygular, kısmi TP alır — ajan turunu beklemez">
197
+ <input id="finWatchdog" type="checkbox" /> Aktif — BE + trailing + kısmi TP
198
+ </label>
199
+ </div>
200
+ <div class="fin-grid2">
201
+ <div class="fin-field"><span>BE (R)</span><input id="finBeOnR" type="number" min="0" max="10" step="0.1" title="Kâr kaç R'ye ulaşınca SL başabaşa çekilsin (0 = kapalı)" /></div>
202
+ <div class="fin-field"><span>Trailing başlangıç (R)</span><input id="finTrailStartR" type="number" min="0" max="10" step="0.1" title="Kaç R kârdan sonra trailing başlasın (0 = kapalı)" /></div>
203
+ <div class="fin-field"><span>Trailing mesafe (R)</span><input id="finTrailR" type="number" min="0" max="5" step="0.1" title="SL fiyattan kaç R geriden gelsin" /></div>
204
+ <div class="fin-field"><span>Kısmi TP (R)</span><input id="finPartialR" type="number" min="0" max="10" step="0.1" title="Kaç R kârda kısmi kapatma yapılsın (0 = kapalı)" /></div>
205
+ <div class="fin-field"><span>Kısmi TP (%)</span><input id="finPartialPct" type="number" min="0" max="90" step="5" title="Kısmi kapatmada kapanacak lot yüzdesi" /></div>
206
+ <div class="fin-field"><span>Günlük kayıp uyarı (%)</span><input id="finMaxDailyLoss" type="number" min="0" max="50" step="0.5" title="Gün içi düşüş bu yüzdeyi geçince aksiyon uygulanır (0 = kapalı)" /></div>
207
+ </div>
208
+ <div class="fin-grid2">
209
+ <div class="fin-field"><span>İşlem riski (%)</span><input id="finRiskPct" type="number" min="0" max="20" step="0.1" title="Pozisyon başına hesap riski — mt5_risksize ve riskPct ile lot bu orandan hesaplanır" /></div>
210
+ <div class="fin-field"><span>Sembol başına max</span><input id="finMaxPerSymbol" type="number" min="0" max="20" step="1" title="Aynı sembolde aynı yönde en fazla kaç pozisyon (0 = sınırsız)" /></div>
211
+ <div class="fin-field"><span>Aynı yön max</span><input id="finMaxSameSide" type="number" min="0" max="20" step="1" title="Toplam aynı yönde (buy ya da sell) en fazla pozisyon (0 = sınırsız)" /></div>
212
+ <div class="fin-field"><span>Min marj seviyesi (%)</span><input id="finMinMarginLevel" type="number" min="0" max="1000" step="10" title="İşlem sonrası marj seviyesi bunun altına düşecekse işlem reddedilir (0 = kapalı)" /></div>
213
+ </div>
214
+ <div class="fin-field">
215
+ <span>Günlük limit aksiyonu</span>
216
+ <select id="finDailyLossAction" title="Günlük kayıp limiti aşılınca ne yapılsın">
217
+ <option value="warn">Yalnız uyar</option>
218
+ <option value="stop">Ajanları durdur</option>
219
+ <option value="flatten">Durdur + hepsini kapat</option>
220
+ </select>
221
+ </div>
222
+ <div class="fin-field">
223
+ <span>Bildirim kanalı</span>
224
+ <select id="finNotifyTarget" title="İşlem/koruma/alarm bildirimleri bu kanala gider; panel ve masaüstü toast her zaman çalışır">
225
+ <option value="auto">Otomatik (bağlı olan kanallar)</option>
226
+ <option value="telegram">Telegram</option>
227
+ <option value="whatsapp">WhatsApp</option>
228
+ <option value="discord">Discord</option>
229
+ <option value="off">Kapalı (yalnız panel)</option>
230
+ </select>
231
+ </div>
232
+ <div id="finAlertList" class="fin-alerts"><div class="fin-empty">Aktif fiyat alarmı yok</div></div>
233
+ </div>
234
+ <div class="fin-card">
235
+ <div class="fin-card-title">PERFORMANS <span id="finStatsInfo" class="fin-hint"></span><span class="file-spacer"></span><button id="finReportBtn" title="Haftalık rapor üret — istatistik + işlem günlüğü + ajan değerlendirmesi">&#128196; Rapor</button></div>
236
+ <div id="finEquity" class="fin-equity"></div>
237
+ <div class="fin-grid">
238
+ <div class="fin-kv"><span>Bugün</span><b id="finStatToday">—</b></div>
239
+ <div class="fin-kv"><span>Hafta</span><b id="finStatWeek">—</b></div>
240
+ <div class="fin-kv"><span>Win rate</span><b id="finStatWin">—</b></div>
241
+ <div class="fin-kv"><span>Profit factor</span><b id="finStatPf">—</b></div>
242
+ <div class="fin-kv"><span>Max DD</span><b id="finStatDd">—</b></div>
243
+ <div class="fin-kv"><span>İşlem (90g)</span><b id="finStatTrades">—</b></div>
244
+ </div>
245
+ </div>
193
246
  <div class="fin-card">
194
247
  <div class="fin-card-title">POZİSYONLAR <span id="finPosCount"></span></div>
195
248
  <div id="finPosList"><div class="fin-empty">Açık pozisyon yok</div></div>
@@ -455,6 +508,7 @@
455
508
  <button class="tab" data-tab="events" data-i18n="tab_events">Olay Merkezi</button>
456
509
  <button class="tab" data-tab="empati" data-i18n="tab_empati">Empati Loop</button>
457
510
  <button class="tab" data-tab="cron" data-i18n="tab_cron">Cron</button>
511
+ <button class="tab" data-tab="agenda" data-i18n="tab_agenda">Ajanda</button>
458
512
  <button class="tab" data-tab="usage" data-i18n="tab_usage">Maliyet · Limit</button>
459
513
  <button class="tab" data-tab="headroom" data-i18n="tab_headroom">Token Sıkıştırma</button>
460
514
  <button class="tab" data-tab="logs" data-i18n="tab_logs">Log</button>
@@ -506,9 +560,11 @@
506
560
  </div>
507
561
  <textarea id="cronPrompt" rows="3" placeholder="Agent'a verilecek görev…" data-i18n-ph="cron_prompt_ph"></textarea>
508
562
  <button id="cronAddBtn" data-i18n="cron_add">+ Görev Ekle</button>
563
+ <button id="cronCancel" class="ghost" hidden data-i18n="cr_cancel_edit">Vazgeç</button>
509
564
  </div>
510
565
  <div id="cronList"></div>
511
566
  </div>
567
+ <div id="tab-agenda" class="pane" hidden></div>
512
568
  </section>
513
569
  </div>
514
570
  </div>
@@ -612,6 +668,43 @@
612
668
  <button class="mini-close" id="watchClose" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
613
669
  </div>
614
670
  <div class="mini-body">
671
+ <div id="wAddBox">
672
+ <div class="mini-add-row">
673
+ <input id="wAddName" class="inp" data-i18n-ph="w_add_name" placeholder="İsim" maxlength="80" />
674
+ <select id="wAddKind" class="inp mini-select">
675
+ <option value="web" data-i18n="w_kind_web">Web</option>
676
+ <option value="battery" data-i18n="w_kind_battery">Pil</option>
677
+ <option value="logs" data-i18n="w_kind_logs">Log</option>
678
+ </select>
679
+ <input id="wAddEvery" class="inp" type="number" min="1" max="1440" value="15" title="dakika" style="width:70px" />
680
+ <button id="wAddBtn" data-i18n="w_add">+</button>
681
+ </div>
682
+ <div class="mini-add-row" id="wAddWeb">
683
+ <input id="wAddUrl" class="inp" data-i18n-ph="w_add_url" placeholder="https://..." />
684
+ <input id="wAddPath" class="inp" data-i18n-ph="w_add_path" placeholder="json path (örn: data.price)" />
685
+ </div>
686
+ <div class="mini-add-row" id="wAddCond">
687
+ <select id="wAddOp" class="inp mini-select">
688
+ <option value="lte">&lt;=</option>
689
+ <option value="lt">&lt;</option>
690
+ <option value="gte">&gt;=</option>
691
+ <option value="gt">&gt;</option>
692
+ <option value="eq">=</option>
693
+ <option value="neq">≠</option>
694
+ <option value="changed" data-i18n="w_op_changed">değişti</option>
695
+ </select>
696
+ <input id="wAddValue" class="inp" data-i18n-ph="w_add_value" placeholder="eşik değer" />
697
+ </div>
698
+ <div class="mini-add-row" id="wAddLogs" hidden>
699
+ <select id="wAddLevel" class="inp mini-select">
700
+ <option value="error">error</option>
701
+ <option value="warn">warn</option>
702
+ <option value="info">info</option>
703
+ </select>
704
+ <input id="wAddWindow" class="inp" type="number" min="1" max="720" value="10" title="pencere (dk)" style="width:80px" />
705
+ <input id="wAddRe" class="inp" data-i18n-ph="w_add_re" placeholder="regex (opsiyonel)" />
706
+ </div>
707
+ </div>
615
708
  <div id="watchList" class="mini-list"></div>
616
709
  </div>
617
710
  </div>