beast-agent 2.37.0 → 2.38.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 +4 -3
- package/src/main.js +28 -19
- package/src/renderer/index.html +9 -2
- package/src/renderer/renderer.js +17 -9
package/package.json
CHANGED
package/src/agent/engine.js
CHANGED
|
@@ -2687,10 +2687,11 @@ class Engine {
|
|
|
2687
2687
|
|
|
2688
2688
|
send(sessionId, payload, opts = {}) {
|
|
2689
2689
|
const userAction = !!(opts && opts.userAction);
|
|
2690
|
-
/* /stop
|
|
2691
|
-
|
|
2690
|
+
/* /stop KİLİDİ: sistem tetikli gönderimler (rapor, kick, cron, izleyici,
|
|
2691
|
+
arka plan) kilit açılana dek bloklanır. Kullanıcının yazdığı YENİ mesaj
|
|
2692
|
+
cevaplanır ama kilidi AÇMAZ — durdurulan iş kendiliğinden devam etmez;
|
|
2693
|
+
kilit yalnız /start (clearStop) ya da açık bir "başlat" eylemiyle açılır. */
|
|
2692
2694
|
if (this._stopped && !userAction) return false;
|
|
2693
|
-
if (userAction) this._stopped = false;
|
|
2694
2695
|
const s = this._load(String(sessionId));
|
|
2695
2696
|
if (!s) return false;
|
|
2696
2697
|
|
package/src/main.js
CHANGED
|
@@ -1096,8 +1096,8 @@ function waSlashHelp() {
|
|
|
1096
1096
|
'• */beastcode* [görev] – ⚡ UZAKTAN KODLAMA: masaüstünde Beast Code paneli açılır, WhatsApp\u2019tan uygulama yazdır (örn: /beastcode hava durumu uygulaması yaz)',
|
|
1097
1097
|
'• */beastagent* – kodlama modunu kapat, masaüstünde chat ekranına dön',
|
|
1098
1098
|
'• */plan* · */build* · */auto* – BeastCode modunda çalışma modu (planla · uygula · otomatik)',
|
|
1099
|
-
'• */stop* – koşan
|
|
1100
|
-
'• */start* –
|
|
1099
|
+
'• */stop* – koşan her şeyi ANINDA durdur + kilitle (kilit yalnız */start* ile açılır; yeni mesaj durdurulan işi devam ettirmez)',
|
|
1100
|
+
'• */start* – kilidi aç; yeni istekler normal işlenir',
|
|
1101
1101
|
'• */restart* – uygulamayı yeniden başlat',
|
|
1102
1102
|
'• */change* – modelleri listele (*/change 5* ile 5.modele geç)',
|
|
1103
1103
|
'• */notes* – bu oturumun notlarını göster',
|
|
@@ -1258,6 +1258,9 @@ let servicesPaused = false;
|
|
|
1258
1258
|
function stopEverything() {
|
|
1259
1259
|
let n = 0;
|
|
1260
1260
|
try { n = engine.stopAll(); } catch {}
|
|
1261
|
+
/* BEAST FINANCE: trader + ekip + sembol işçileri de GERÇEKTEN durur
|
|
1262
|
+
(timer'ları kapanır, panel durumu kapanır; panelden ▶ ile yeniden başlar) */
|
|
1263
|
+
try { Promise.resolve(finStopAllFinanceAgents('/stop: kullanıcı tüm ajanları durdurdu')).catch(() => {}); } catch {}
|
|
1261
1264
|
/* bekleyen masaüstü/WA birleştirme kuyrukları temizlenir */
|
|
1262
1265
|
try { for (const [, q] of desktopQueue) clearTimeout(q.timer); } catch {}
|
|
1263
1266
|
desktopQueue.clear();
|
|
@@ -1268,9 +1271,10 @@ function stopEverything() {
|
|
|
1268
1271
|
return n;
|
|
1269
1272
|
}
|
|
1270
1273
|
|
|
1274
|
+
/* /stop kilidini aç (YALNIZ /start ve açık "başlat" eylemleri çağırır;
|
|
1275
|
+
normal mesajlar kilidi AÇMAZ — durdurulan iş kendiliğinden devam etmez) */
|
|
1271
1276
|
function resumeServices() {
|
|
1272
1277
|
if (!servicesPaused) {
|
|
1273
|
-
/* /stop kapısı burada da kalkar — /start VE kullanıcının kendi mesajı canlandırır */
|
|
1274
1278
|
try { engine.clearStop(); } catch {}
|
|
1275
1279
|
return;
|
|
1276
1280
|
}
|
|
@@ -1535,19 +1539,18 @@ async function tryWaSlash(jid, rawText, senderNum, payload0) {
|
|
|
1535
1539
|
const r = arg ? applyThinkLevel(arg) : null;
|
|
1536
1540
|
out = r && r.error ? r.error : r ? r.text : thinkStatusText();
|
|
1537
1541
|
} else if (cmd === 'stop') {
|
|
1538
|
-
/* /stop: koşan
|
|
1542
|
+
/* /stop: koşan her şey + KİLİT; kilit yalnız /start ile açılır */
|
|
1539
1543
|
const stopped = stopEverything();
|
|
1540
1544
|
out =
|
|
1541
1545
|
`*Durdu* — ${stopped} koşan iş kesildi.\n` +
|
|
1542
1546
|
`Sürüyen sorgular, akıştaki cevaplar ve ajan faaliyetleri ANINDA kesildi; ajan yeni sorgu da açamaz.\n` +
|
|
1543
|
-
`
|
|
1547
|
+
`Bu kilit yalnız /start ile açılır — yeni mesaj yazmak durdurulan işi devam ettirmez.`;
|
|
1544
1548
|
} else if (cmd === 'start') {
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
}
|
|
1549
|
+
const wasStopped = !!(engine && engine._stopped);
|
|
1550
|
+
resumeServices();
|
|
1551
|
+
out = wasStopped
|
|
1552
|
+
? '*Devam* — kilit açıldı; yeni istekler normal işlenir. Finans trader durduysa panelden ▶ ile yeniden başlat.'
|
|
1553
|
+
: 'Zaten çalışıyor — durdurulmuş bir şey yok.';
|
|
1551
1554
|
} else if (cmd === 'restart') {
|
|
1552
1555
|
out = '*\u21BB Yeniden başlatılıyor…* Uygulama birkaç saniye içinde kapanıp açılacak.';
|
|
1553
1556
|
setTimeout(() => {
|
|
@@ -2437,7 +2440,8 @@ async function handleWaIncoming(jid, payload, senderNum) {
|
|
|
2437
2440
|
if (senderNum) waJidPn.set(jid, String(senderNum));
|
|
2438
2441
|
}
|
|
2439
2442
|
waLog(`gate: kuyruğa geçiliyor jid=${waPrettyJid(jid)} sender=+${senderNum || '?'}`);
|
|
2440
|
-
|
|
2443
|
+
/* /stop kilidi normal mesajla AÇILMAZ — mesaj yine işlenir (engine userAction),
|
|
2444
|
+
ama durdurulan iş/kuyruk kendiliğinden devam etmez */
|
|
2441
2445
|
waQueuePush(jid, { ...payload, isGroup }, senderNum);
|
|
2442
2446
|
} catch (e) {
|
|
2443
2447
|
waLog(`handleWaIncoming KRASİ: ${String((e && e.stack) || e)}`);
|
|
@@ -2833,7 +2837,8 @@ async function handleTgIncoming(chatId, payload) {
|
|
|
2833
2837
|
tgLog(`skip: isimsiz kayıt (${hit.id}) — cevap verilmedi, Entegrasyonlar'da isim ekle`);
|
|
2834
2838
|
return;
|
|
2835
2839
|
}
|
|
2836
|
-
|
|
2840
|
+
/* /stop kilidi normal mesajla AÇILMAZ — mesaj yine işlenir (engine userAction),
|
|
2841
|
+
ama durdurulan iş/kuyruk kendiliğinden devam etmez */
|
|
2837
2842
|
tgQueuePush(String(chatId), payload);
|
|
2838
2843
|
} catch (e) {
|
|
2839
2844
|
tgLog(`handleTgIncoming KRASİ: ${String((e && e.stack) || e)}`);
|
|
@@ -3052,7 +3057,8 @@ async function handleDcIncoming(channelId, payload) {
|
|
|
3052
3057
|
dcLog(`skip: isimsiz kayıt (${hit.id}) — cevap verilmedi, Entegrasyonlar'da isim ekle`);
|
|
3053
3058
|
return;
|
|
3054
3059
|
}
|
|
3055
|
-
|
|
3060
|
+
/* /stop kilidi normal mesajla AÇILMAZ — mesaj yine işlenir (engine userAction),
|
|
3061
|
+
ama durdurulan iş/kuyruk kendiliğinden devam etmez */
|
|
3056
3062
|
dcQueuePush(String(channelId), payload);
|
|
3057
3063
|
} catch (e) {
|
|
3058
3064
|
dcLog(`handleDcIncoming KRASİ: ${String((e && e.stack) || e)}`);
|
|
@@ -5380,7 +5386,8 @@ ipcMain.handle('agent:send', (_e, { sessionId, text }) => {
|
|
|
5380
5386
|
}
|
|
5381
5387
|
return true;
|
|
5382
5388
|
}
|
|
5383
|
-
|
|
5389
|
+
/* /stop kilidi normal mesajla AÇILMAZ — mesaj yine işlenir (engine userAction),
|
|
5390
|
+
ama durdurulan iş/kuyruk kendiliğinden devam etmez */
|
|
5384
5391
|
queueDesktopMessage(sessionId, text);
|
|
5385
5392
|
return true;
|
|
5386
5393
|
});
|
|
@@ -5404,7 +5411,7 @@ function desktopSlashHelp() {
|
|
|
5404
5411
|
'**/help** – bu liste',
|
|
5405
5412
|
'**/version** – Beast Agent sürümünü göster',
|
|
5406
5413
|
'**/restart** – uygulamayı yeniden başlat',
|
|
5407
|
-
'**/stop** – koşan
|
|
5414
|
+
'**/stop** – koşan her şeyi durdur + kilitle · **/start** – kilidi aç',
|
|
5408
5415
|
'**/change [n]** – modelleri listele · n. modele geç',
|
|
5409
5416
|
'**/model [isim]** – aktif modeli göster / değiştir · **/model refresh** – tüm provider modellerini yeniden çek',
|
|
5410
5417
|
'**/think 0-5** – düşünme seviyesi (0 kapalı · 5 max)',
|
|
@@ -5538,11 +5545,13 @@ function handleGlobalStopStart(sessionId, cmd) {
|
|
|
5538
5545
|
reply =
|
|
5539
5546
|
`\u25A0 **Durdu** — ${n} koşan iş kesildi.\n` +
|
|
5540
5547
|
'Sürüyen sorgular, akıştaki cevaplar ve ajan faaliyetleri ANINDA kesildi; ajan yeni sorgu da açamaz.\n' +
|
|
5541
|
-
'
|
|
5548
|
+
'Bu kilit yalnız `/start` ile açılır — yeni mesaj yazmak durdurulan işi devam ettirmez.';
|
|
5542
5549
|
} else {
|
|
5543
|
-
const
|
|
5550
|
+
const wasStopped = !!(engine && engine._stopped);
|
|
5544
5551
|
resumeServices();
|
|
5545
|
-
reply =
|
|
5552
|
+
reply = wasStopped
|
|
5553
|
+
? '\u25B6 **Devam** — kilit açıldı; yeni istekler normal işlenir. Finans trader durduysa panelden \u25B6 ile yeniden başlat.'
|
|
5554
|
+
: 'Zaten çalışıyor — durdurulmuş bir şey yok.';
|
|
5546
5555
|
}
|
|
5547
5556
|
if (win && !win.isDestroyed()) {
|
|
5548
5557
|
win.webContents.send('agent:event', { sessionId: sid, type: 'message', message: { role: 'user', content: cmd } });
|
package/src/renderer/index.html
CHANGED
|
@@ -224,6 +224,10 @@
|
|
|
224
224
|
<option value="flatten">Durdur + hepsini kapat</option>
|
|
225
225
|
</select>
|
|
226
226
|
</div>
|
|
227
|
+
<div id="finAlertList" class="fin-alerts"><div class="fin-empty">Aktif fiyat alarmı yok</div></div>
|
|
228
|
+
</div>
|
|
229
|
+
<div class="fin-card" id="finNotifyCard" hidden>
|
|
230
|
+
<div class="fin-card-title">BİLDİRİM <span class="fin-hint">— kanal seçimi ve olay filtresi</span></div>
|
|
227
231
|
<div class="fin-field">
|
|
228
232
|
<span>Bildirim kanalı</span>
|
|
229
233
|
<select id="finNotifyTarget" title="Emir/işlem bildirimleri bu kanala gider; panel ve masaüstü toast her zaman çalışır">
|
|
@@ -239,7 +243,6 @@
|
|
|
239
243
|
<input id="finNotifyTradeOnly" type="checkbox" checked /> Kanala sadece emir/işlem olayları gelsin (alarm gelmez)
|
|
240
244
|
</label>
|
|
241
245
|
</div>
|
|
242
|
-
<div id="finAlertList" class="fin-alerts"><div class="fin-empty">Aktif fiyat alarmı yok</div></div>
|
|
243
246
|
</div>
|
|
244
247
|
<div class="fin-card" id="finPerfCard" hidden>
|
|
245
248
|
<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>
|
|
@@ -770,11 +773,15 @@
|
|
|
770
773
|
<button class="mini-close" id="finSettingsClose" title="Kapat">×</button>
|
|
771
774
|
</div>
|
|
772
775
|
<div class="mini-body">
|
|
773
|
-
<div class="fin-set-hint">Varsayılan olarak
|
|
776
|
+
<div class="fin-set-hint">Varsayılan olarak dört bölüm de gizlidir — açmak tamamen isteğe bağlıdır. Seçim bilgisayarda hatırlanır. Risk otomasyonu gizliyken AKTİF OLMAZ.</div>
|
|
774
777
|
<label class="fin-set-row" title="BE + trailing + kısmi TP koruması, günlük limitler, fiyat alarmları bölümü">
|
|
775
778
|
<input id="finShowRisk" type="checkbox" />
|
|
776
779
|
<span class="fsr-main"><b>RİSK OTOMASYONU</b><i>BE + trailing + kısmi TP, günlük limitler, alarmlar</i></span>
|
|
777
780
|
</label>
|
|
781
|
+
<label class="fin-set-row" title="Bildirim kanalı (WhatsApp/Telegram/Discord) ve hangi olayların gönderileceği bölümü">
|
|
782
|
+
<input id="finShowNotify" type="checkbox" />
|
|
783
|
+
<span class="fsr-main"><b>BİLDİRİM</b><i>Kanal seçimi, emir/alarm olay filtresi</i></span>
|
|
784
|
+
</label>
|
|
778
785
|
<label class="fin-set-row" title="Equity grafiği + günlük/haftalık istatistikler + haftalık rapor bölümü">
|
|
779
786
|
<input id="finShowPerf" type="checkbox" />
|
|
780
787
|
<span class="fsr-main"><b>PERFORMANS</b><i>Equity grafiği, istatistikler, haftalık rapor</i></span>
|
package/src/renderer/renderer.js
CHANGED
|
@@ -169,9 +169,11 @@ const els = {
|
|
|
169
169
|
finSettingsOverlay: $('#finSettingsOverlay'),
|
|
170
170
|
finSettingsClose: $('#finSettingsClose'),
|
|
171
171
|
finShowRisk: $('#finShowRisk'),
|
|
172
|
+
finShowNotify: $('#finShowNotify'),
|
|
172
173
|
finShowPerf: $('#finShowPerf'),
|
|
173
174
|
finShowFlow: $('#finShowFlow'),
|
|
174
175
|
finRiskCard: $('#finRiskCard'),
|
|
176
|
+
finNotifyCard: $('#finNotifyCard'),
|
|
175
177
|
finPerfCard: $('#finPerfCard'),
|
|
176
178
|
finFlowCard: $('#finFlowCard'),
|
|
177
179
|
finBalance: $('#finBalance'),
|
|
@@ -6743,7 +6745,7 @@ const SLASH_COMMANDS = [
|
|
|
6743
6745
|
{ cmd: '/new', desc: 'yeni oturum aç (kod verilir)' },
|
|
6744
6746
|
{ cmd: '/open ', desc: 'koddaki oturuma geç' },
|
|
6745
6747
|
{ cmd: '/sessions', desc: 'bu sohbetin oturumları' },
|
|
6746
|
-
{ cmd: '/stop', desc: 'çalışan
|
|
6748
|
+
{ cmd: '/stop', desc: 'çalışan her şeyi durdur + kilitle — kilit yalnız /start ile açılır' },
|
|
6747
6749
|
{ cmd: '/restart', desc: 'uygulamayı yeniden başlat' },
|
|
6748
6750
|
{ cmd: '/change', desc: 'modelleri listele · /change 5 ile geç' },
|
|
6749
6751
|
{ cmd: '/screenshot', desc: 'ekran görüntüsünü sohbete ekle' },
|
|
@@ -6752,7 +6754,7 @@ const SLASH_COMMANDS = [
|
|
|
6752
6754
|
{ cmd: '/clear', desc: 'oturum geçmişini GERÇEKTEN sil (kod korunur)' },
|
|
6753
6755
|
{ cmd: '/autodel', desc: 'tüm otomatik hatırlatmaları sil · /autodel all: cron dahil hepsi' },
|
|
6754
6756
|
{ cmd: '/deltodo', desc: 'todo listesini temizle · /deltodo all: tüm oturumlar' },
|
|
6755
|
-
{ cmd: '/start', desc: '
|
|
6757
|
+
{ cmd: '/start', desc: 'kilidi aç; yeni istekler normal işlenir' },
|
|
6756
6758
|
{ cmd: '/rule ', desc: 'kalıcı kural ekle' },
|
|
6757
6759
|
{ cmd: '/rules', desc: 'kalıcı kuralları listele' },
|
|
6758
6760
|
{ cmd: '/model', desc: 'modeli göster/değiştir' },
|
|
@@ -9691,15 +9693,16 @@ function finStrategyFlush() {
|
|
|
9691
9693
|
}
|
|
9692
9694
|
|
|
9693
9695
|
/* ---------- GÖRÜNÜM AYARLARI (isteğe bağlı bölümler) ----------
|
|
9694
|
-
RİSK OTOMASYONU + PERFORMANS + AKIŞ varsayılan GİZLİ; açmak
|
|
9695
|
-
Seçim localStorage'da hatırlanır. Risk otomasyonu gizliyken
|
|
9696
|
-
AKTİF OLMAZ — kart yeniden gösterilince kutucuktan açılabilir. */
|
|
9696
|
+
RİSK OTOMASYONU + BİLDİRİM + PERFORMANS + AKIŞ varsayılan GİZLİ; açmak
|
|
9697
|
+
isteğe bağlı. Seçim localStorage'da hatırlanır. Risk otomasyonu gizliyken
|
|
9698
|
+
watchdog AKTİF OLMAZ — kart yeniden gösterilince kutucuktan açılabilir. */
|
|
9697
9699
|
const finViewKey = 'beast.financeView';
|
|
9698
|
-
const finView = { risk: false, perf: false, flow: false };
|
|
9700
|
+
const finView = { risk: false, notify: false, perf: false, flow: false };
|
|
9699
9701
|
try {
|
|
9700
9702
|
const v = JSON.parse(localStorage.getItem(finViewKey) || 'null');
|
|
9701
9703
|
if (v && typeof v === 'object') {
|
|
9702
9704
|
finView.risk = v.risk === true;
|
|
9705
|
+
finView.notify = v.notify === true;
|
|
9703
9706
|
finView.perf = v.perf === true;
|
|
9704
9707
|
finView.flow = v.flow === true;
|
|
9705
9708
|
}
|
|
@@ -9707,15 +9710,18 @@ try {
|
|
|
9707
9710
|
|
|
9708
9711
|
function finViewPaint() {
|
|
9709
9712
|
if (els.finRiskCard) els.finRiskCard.hidden = !finView.risk;
|
|
9713
|
+
if (els.finNotifyCard) els.finNotifyCard.hidden = !finView.notify;
|
|
9710
9714
|
if (els.finPerfCard) els.finPerfCard.hidden = !finView.perf;
|
|
9711
9715
|
if (els.finFlowCard) els.finFlowCard.hidden = !finView.flow;
|
|
9712
9716
|
if (els.finShowRisk) els.finShowRisk.checked = finView.risk;
|
|
9717
|
+
if (els.finShowNotify) els.finShowNotify.checked = finView.notify;
|
|
9713
9718
|
if (els.finShowPerf) els.finShowPerf.checked = finView.perf;
|
|
9714
9719
|
if (els.finShowFlow) els.finShowFlow.checked = finView.flow;
|
|
9715
9720
|
const row = (cb) => cb && cb.closest('.fin-set-row');
|
|
9716
9721
|
const r1 = row(els.finShowRisk); if (r1) r1.classList.toggle('on', finView.risk);
|
|
9717
|
-
const r2 = row(els.
|
|
9718
|
-
const r3 = row(els.
|
|
9722
|
+
const r2 = row(els.finShowNotify); if (r2) r2.classList.toggle('on', finView.notify);
|
|
9723
|
+
const r3 = row(els.finShowPerf); if (r3) r3.classList.toggle('on', finView.perf);
|
|
9724
|
+
const r4 = row(els.finShowFlow); if (r4) r4.classList.toggle('on', finView.flow);
|
|
9719
9725
|
}
|
|
9720
9726
|
|
|
9721
9727
|
function finViewApply() {
|
|
@@ -9741,7 +9747,8 @@ function finViewToggle(key, on) {
|
|
|
9741
9747
|
? 'RİSK OTOMASYONU gösteriliyor — aktif etmek için karttaki kutucuğu işaretle'
|
|
9742
9748
|
: 'RİSK OTOMASYONU gizlendi ve kapatıldı');
|
|
9743
9749
|
} else {
|
|
9744
|
-
|
|
9750
|
+
const label = key === 'notify' ? 'BİLDİRİM' : key === 'perf' ? 'PERFORMANS' : 'AKIŞ';
|
|
9751
|
+
toast(label + (on ? ' bölümü gösteriliyor' : ' bölümü gizlendi'));
|
|
9745
9752
|
}
|
|
9746
9753
|
if (financeModeOn()) finSnapshot();
|
|
9747
9754
|
}
|
|
@@ -9757,6 +9764,7 @@ if (els.finSettingsOverlay) {
|
|
|
9757
9764
|
});
|
|
9758
9765
|
}
|
|
9759
9766
|
if (els.finShowRisk) els.finShowRisk.addEventListener('change', () => finViewToggle('risk', els.finShowRisk.checked));
|
|
9767
|
+
if (els.finShowNotify) els.finShowNotify.addEventListener('change', () => finViewToggle('notify', els.finShowNotify.checked));
|
|
9760
9768
|
if (els.finShowPerf) els.finShowPerf.addEventListener('change', () => finViewToggle('perf', els.finShowPerf.checked));
|
|
9761
9769
|
if (els.finShowFlow) els.finShowFlow.addEventListener('change', () => finViewToggle('flow', els.finShowFlow.checked));
|
|
9762
9770
|
finViewApply();
|