beast-agent 2.33.1 → 2.34.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "beast-agent",
3
3
  "productName": "Beast Agent",
4
- "version": "2.33.1",
4
+ "version": "2.34.0",
5
5
  "description": "Ultra-fast local agent shell for Windows.",
6
6
  "author": "algokodcom (AlgoKod)",
7
7
  "license": "MIT",
package/src/main.js CHANGED
@@ -9582,6 +9582,7 @@ ipcMain.handle('finance:mode', async (_e, payload) => {
9582
9582
  financeState.mode = !!(payload && payload.on);
9583
9583
  const sid = String((payload && payload.sessionId) || '');
9584
9584
  let needNew = false;
9585
+ let resumeSid = '';
9585
9586
  if (sid && engine) {
9586
9587
  try {
9587
9588
  let s = engine.cache.get(sid);
@@ -9605,9 +9606,21 @@ ipcMain.handle('finance:mode', async (_e, payload) => {
9605
9606
  }
9606
9607
  } catch {}
9607
9608
  }
9609
+ /* ESKİ SOHBETTEN DEVAM: finance moduna girerken aktif oturum finance değilse
9610
+ (örn. normal sohbet) yeni oturum AÇMAK yerine en son kullanılan finance
9611
+ sohbet oturumu önerilir; hiç yoksa yeni oturum açılır. */
9612
+ if (financeState.mode && needNew && engine) {
9613
+ try {
9614
+ const prev = (engine.listSessions() || []).find((v) => v && v.finance && !v.isBg && v.id);
9615
+ if (prev) {
9616
+ resumeSid = String(prev.id);
9617
+ needNew = false;
9618
+ }
9619
+ } catch {}
9620
+ }
9608
9621
  /* OTOMATİK TRADER KAPALI: finance moduna geçmek trader'ı KENDİLİĞİNDEN
9609
9622
  başlatmaz — kullanıcı TRADE AJANI kartındaki ▶ ile elle başlatır */
9610
- return { ok: true, mode: financeState.mode, needNew };
9623
+ return { ok: true, mode: financeState.mode, needNew, resumeSid };
9611
9624
  });
9612
9625
 
9613
9626
  /* MT5 sembol seçici: terminaldeki tüm semboller (isteğe bağlı *filter*) */
@@ -157,13 +157,13 @@
157
157
  <div class="fin-card-title">HESAP</div>
158
158
  <div class="fin-grid">
159
159
  <div class="fin-kv"><span>Bakiye</span><b id="finBalance">—</b></div>
160
- <div class="fin-kv"><span>Özkaynak</span><b id="finEquity">—</b></div>
160
+ <div class="fin-kv"><span>Varlık</span><b id="finEquityValue">—</b></div>
161
161
  <div class="fin-kv"><span>Kâr/Zarar</span><b id="finProfit">—</b></div>
162
162
  <div class="fin-kv"><span>Serbest Marj</span><b id="finFree">—</b></div>
163
163
  </div>
164
164
  </div>
165
165
  <div class="fin-card fin-card-trader">
166
- <div class="fin-card-title">TRADE AJANI <span id="finTraderDot" class="fin-dot off" title="Trader durumu"></span><span class="file-spacer"></span><button id="finSkillsBtn" title="Rol → skill eşleştirmesi — hangi rol hangi skill'i okur">&#9881;</button></div>
166
+ <div class="fin-card-title">TRADE AJANI <span id="finTraderDot" class="fin-dot off" title="Trader durumu"></span><span class="file-spacer"></span><button id="finModelRefreshBtn" title="Modelleri yeniden çek — eksik/güncel modelleri tazeler">&#x27F3;</button><button id="finSkillsBtn" title="Rol → skill eşleştirmesi — hangi rol hangi skill'i okur">&#9881;</button></div>
167
167
  <div class="fin-field">
168
168
  <span>Model</span>
169
169
  <select id="finTraderModel" title="Trader ajanının modeli — farklı API/model seçilebilir"></select>
@@ -234,7 +234,7 @@
234
234
  </div>
235
235
  <div class="fin-card" id="finPerfCard" hidden>
236
236
  <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>
237
- <div id="finEquity" class="fin-equity"></div>
237
+ <div id="finEquityChart" class="fin-equity"></div>
238
238
  <div class="fin-grid">
239
239
  <div class="fin-kv"><span>Bugün</span><b id="finStatToday">—</b></div>
240
240
  <div class="fin-kv"><span>Hafta</span><b id="finStatWeek">—</b></div>
@@ -175,10 +175,11 @@ const els = {
175
175
  finPerfCard: $('#finPerfCard'),
176
176
  finFlowCard: $('#finFlowCard'),
177
177
  finBalance: $('#finBalance'),
178
- finEquity: $('#finEquity'),
178
+ finEquity: $('#finEquityValue'),
179
179
  finProfit: $('#finProfit'),
180
180
  finFree: $('#finFree'),
181
181
  finTraderModel: $('#finTraderModel'),
182
+ finModelRefreshBtn: $('#finModelRefreshBtn'),
182
183
  finInterval: $('#finInterval'),
183
184
  finMaxLot: $('#finMaxLot'),
184
185
  finSymBtn: $('#finSymBtn'),
@@ -227,7 +228,7 @@ const els = {
227
228
  finStatPf: $('#finStatPf'),
228
229
  finStatDd: $('#finStatDd'),
229
230
  finStatTrades: $('#finStatTrades'),
230
- finEquityBox: $('#finEquity'),
231
+ finEquityBox: $('#finEquityChart'),
231
232
  stVideoEl: $('#stVideoEl'),
232
233
  stVideoName: $('#stVideoName'),
233
234
  stVideoOpen: $('#stVideoOpen'),
@@ -7178,6 +7179,8 @@ async function init() {
7178
7179
  try {
7179
7180
  state = await beast.refreshModels();
7180
7181
  applyState();
7182
+ /* finance modu açıksa TRADE AJANI model listesini de tazele */
7183
+ if (financeModeOn()) await finFillModels();
7181
7184
  toast(_t('mr_done'));
7182
7185
  } catch {
7183
7186
  toast(_t('ws_fail_toast'));
@@ -9502,6 +9505,8 @@ function finRenderAlerts(list) {
9502
9505
 
9503
9506
  async function finFillModels() {
9504
9507
  if (!els.finTraderModel) return;
9508
+ /* mevcut seçim korunur — yenilemede model kaybolursa "Genel aktif model"e düşer */
9509
+ const cur = els.finTraderModel.value || (finCfgCache && finCfgCache.traderSel) || '';
9505
9510
  let models = [];
9506
9511
  try {
9507
9512
  const st = await beast.getState();
@@ -9511,11 +9516,13 @@ async function finFillModels() {
9511
9516
  const optAuto = document.createElement('option');
9512
9517
  optAuto.value = '';
9513
9518
  optAuto.textContent = 'Genel aktif model';
9519
+ if (!cur) optAuto.selected = true;
9514
9520
  els.finTraderModel.appendChild(optAuto);
9515
9521
  for (const m of models) {
9516
9522
  const o = document.createElement('option');
9517
9523
  o.value = m.sel;
9518
9524
  o.textContent = (m.providerName || m.sel) + ' · ' + m.model;
9525
+ if (m.sel === cur) o.selected = true;
9519
9526
  els.finTraderModel.appendChild(o);
9520
9527
  }
9521
9528
  finModelsFilled = true;
@@ -9594,8 +9601,11 @@ async function setFinanceMode(on) {
9594
9601
  try { localStorage.setItem('beast.financeMode', on ? '1' : '0'); } catch {}
9595
9602
  const fm = await beast.financeMode(!!on, activeId).catch(() => ({}));
9596
9603
  /* finance modu açıldı ama aktif oturum NORMAL (örn. WhatsApp sohbeti) ise
9597
- ASLA o oturumu finance'e çevirme — kendine ÖZEL finance oturumu aç */
9598
- if (on && fm && fm.needNew) {
9604
+ ASLA o oturumu finance'e çevirme — önce EN SON finance sohbetinden devam
9605
+ et (resumeSid); hiç finance sohbeti yoksa kendine ÖZEL yeni oturum aç */
9606
+ if (on && fm && fm.resumeSid) {
9607
+ try { await openSession(fm.resumeSid); } catch {}
9608
+ } else if (on && fm && fm.needNew) {
9599
9609
  try {
9600
9610
  const created = await beast.createSession();
9601
9611
  if (created && created.id) await openSession(created.id);
@@ -9787,6 +9797,23 @@ if (els.finTraderModel) {
9787
9797
  toast('Trade ajanı modeli: ' + (els.finTraderModel.value || 'genel aktif model'));
9788
9798
  });
9789
9799
  }
9800
+ /* TRADE AJANI: modelleri yeniden çek — üstteki ⟳ ile aynı mantık
9801
+ (models:refresh). Eksik/yeni modeller listeye girer, seçim korunur. */
9802
+ if (els.finModelRefreshBtn) {
9803
+ els.finModelRefreshBtn.addEventListener('click', async () => {
9804
+ els.finModelRefreshBtn.classList.add('spin');
9805
+ try {
9806
+ state = await beast.refreshModels();
9807
+ applyState();
9808
+ await finFillModels();
9809
+ toast(_t('mr_done'));
9810
+ } catch {
9811
+ toast(_t('ws_fail_toast'));
9812
+ } finally {
9813
+ els.finModelRefreshBtn.classList.remove('spin');
9814
+ }
9815
+ });
9816
+ }
9790
9817
  if (els.finTraderBtn) {
9791
9818
  els.finTraderBtn.addEventListener('click', async () => {
9792
9819
  if (els.finTraderBtn.classList.contains('stop')) {
@@ -287,9 +287,9 @@ body:not(.ide-mode):not(.studio-mode):not(.sandbox-mode) #watchPane { display: f
287
287
  /* Studio tuşu artık topbar'da (dd-btn dd-icon-btn) — aktif rozet diğer topbar ikonlarıyla aynı */
288
288
  #studioBtn.on { background: var(--accent-dim); color: var(--accent); }
289
289
 
290
- /* model refresh butonu — çekerken döner */
291
- #modelRefreshBtn.spin { opacity: .7; pointer-events: none; }
292
- #modelRefreshBtn.spin { animation: beast-spin 0.9s linear infinite; }
290
+ /* model refresh butonları — çekerken döner */
291
+ #modelRefreshBtn.spin, #finModelRefreshBtn.spin { opacity: .7; pointer-events: none; }
292
+ #modelRefreshBtn.spin, #finModelRefreshBtn.spin { animation: beast-spin 0.9s linear infinite; }
293
293
  @keyframes beast-spin { to { transform: rotate(360deg); } }
294
294
 
295
295
  /* ---------- cron modülü (ayarlar sekmesi) ---------- */