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/package.json +1 -1
- package/src/agent/engine.js +1 -1
- package/src/agent/financetools.js +316 -45
- package/src/agent/finindicators.js +254 -0
- package/src/agent/finrisk.js +132 -0
- package/src/agent/finstats.js +229 -0
- package/src/agent/finwatch.js +110 -0
- package/src/agent/scripts/mt5_bridge.py +65 -0
- package/src/main.js +735 -9
- package/src/preload.js +6 -0
- package/src/renderer/i18n.js +90 -0
- package/src/renderer/index.html +93 -0
- package/src/renderer/renderer.js +490 -12
- package/src/renderer/style.css +36 -0
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'),
|
package/src/renderer/i18n.js
CHANGED
|
@@ -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',
|
package/src/renderer/index.html
CHANGED
|
@@ -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">📄 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">×</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"><=</option>
|
|
689
|
+
<option value="lt"><</option>
|
|
690
|
+
<option value="gte">>=</option>
|
|
691
|
+
<option value="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>
|