beast-agent 1.5.1 → 1.5.2

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": "1.5.1",
4
+ "version": "1.5.2",
5
5
  "description": "Ultra-fast local agent shell for Windows.",
6
6
  "author": "algokodcom (AlgoKod)",
7
7
  "license": "MIT",
package/src/main.js CHANGED
@@ -2993,37 +2993,17 @@ function browserWidthFor(w) {
2993
2993
  return Math.max(380, Math.min(800, Math.floor(w * 0.46)));
2994
2994
  }
2995
2995
 
2996
- function browserShownWidth(w) {
2997
- /* telefon modunda dock genişliği KORUNUR 390x844 telefon ekranı
2998
- görüntünün ORTASINDA, cihaz çerçevesiyle gösterilir (DevTools gibi) */
2999
- return Math.min(browser.width, Math.max(320, w - 320));
2996
+ /* emit'lerdeki genişlik HEP gösterilen genişlik olmalı (telefon modunda 430)
2997
+ yoksa yüklenme bitince dock eski genişliğine döner, daralan solda boşluk bırakır */
2998
+ function browserW() {
2999
+ try { return win.getContentSize()[0]; } catch { return 0; }
3000
3000
  }
3001
3001
 
3002
- /* telefon modu görüntü parametreleri: mobil ekran emülasyonu + sığma ölçeği */
3003
- function applyPhoneEmulation() {
3004
- try {
3005
- const wc = browser.view && browser.view.webContents;
3006
- if (!wc) return;
3007
- if (!browser.phone) {
3008
- wc.disableDeviceEmulation();
3009
- return;
3010
- }
3011
- let w = 800;
3012
- let h = 900;
3013
- try { [w, h] = win.getContentSize(); } catch {}
3014
- const viewW = browserShownWidth(w);
3015
- const viewH = Math.max(240, h - BROWSER_TOOLBAR_H - 8);
3016
- const PW = 390;
3017
- const PH = 844;
3018
- const scale = Math.max(0.3, Math.min(1, (viewW - 20) / PW, (viewH - 12) / PH));
3019
- wc.enableDeviceEmulation({
3020
- screenPosition: 'mobile',
3021
- screenOrientation: { type: 'portraitPrimary', angle: 0 },
3022
- viewSize: { width: PW, height: PH },
3023
- deviceScaleFactor: 2,
3024
- scale,
3025
- });
3026
- } catch {}
3002
+ function browserShownWidth(w) {
3003
+ const avail = Math.max(320, w - 320);
3004
+ /* TELEFON MODU: dock KENDİSİ daralır (~430px) — sayfa mobil düzenle
3005
+ kenarlara tam oturur; kapatınca kullanıcı genişliği geri gelir */
3006
+ return browser.phone ? Math.min(430, avail) : Math.min(browser.width, avail);
3027
3007
  }
3028
3008
 
3029
3009
  function layoutBrowser() {
@@ -3048,7 +3028,6 @@ function layoutBrowser() {
3048
3028
  try {
3049
3029
  view.setBounds({ x: Math.max(0, w - shownWidth), y: BROWSER_TOOLBAR_H, width: shownWidth, height: Math.max(0, h - BROWSER_TOOLBAR_H) });
3050
3030
  view.setVisible(browser.open && browser.visible);
3051
- if (browser.phone) applyPhoneEmulation(); // pencere boyutlanınca telefon ölçeği tazelensin
3052
3031
  } catch {}
3053
3032
  }
3054
3033
 
@@ -3085,7 +3064,7 @@ function ensureBrowser() {
3085
3064
  // Tarayıcı kapalıyken olayların UI'ı geri açmamasını garantile
3086
3065
  const notify = (extra) => {
3087
3066
  if (browser.open && win && !win.isDestroyed()) {
3088
- browserEmit({ open: true, width: browser.width, ...extra });
3067
+ browserEmit({ open: true, width: browserShownWidth(browserW()), ...extra });
3089
3068
  }
3090
3069
  };
3091
3070
  wc.on('did-navigate', (_e, url) => notify({ url, loading: false }));
@@ -3101,7 +3080,6 @@ function ensureBrowser() {
3101
3080
  browser.view = null;
3102
3081
  });
3103
3082
  browser.view = view;
3104
- if (browser.phone) applyPhoneEmulation(); // tarayıcı telefon modunda doğarsa emülasyonu uygula
3105
3083
  return view;
3106
3084
  }
3107
3085
 
@@ -3146,7 +3124,7 @@ function setBrowserOpen(v, forceVisible) {
3146
3124
  layoutBrowser();
3147
3125
  let url = '';
3148
3126
  try { url = browser.view.webContents.getURL(); } catch {}
3149
- browserEmit({ open: true, width: browser.width, url });
3127
+ browserEmit({ open: true, width: browserShownWidth(browserW()), url });
3150
3128
  }
3151
3129
 
3152
3130
  /* --- Paralel ajan trafik düzeni: ajanlar aynı saniyede sorgu atınca Google
@@ -3210,7 +3188,7 @@ async function browserNavigateNow(raw, signal, ctx) {
3210
3188
  let title = '';
3211
3189
  let finalUrl = url;
3212
3190
  try { title = wc.getTitle(); finalUrl = wc.getURL() || url; } catch {}
3213
- browserEmit({ open: true, width: browser.width, url: finalUrl });
3191
+ browserEmit({ open: true, width: browserShownWidth(browserW()), url: finalUrl });
3214
3192
  flushBrowserStorage(); // oturum çerezleri diske — ani kapanışta kaybolmasın
3215
3193
  /* açılışta snapshot da göm — model ayrı snapshot çağırmadan ref'lere başlar */
3216
3194
  let snap = null;
@@ -5389,7 +5367,7 @@ ipcMain.handle('browser:shown:set', (_e, v) => {
5389
5367
  if (browser.open) {
5390
5368
  browser.visible = !!v;
5391
5369
  layoutBrowser();
5392
- browserEmit({ open: true, width: browser.width });
5370
+ browserEmit({ open: true, width: browserShownWidth(browserW()) });
5393
5371
  }
5394
5372
  return { shown: !!v };
5395
5373
  });
@@ -5446,7 +5424,7 @@ function setBrowserPhone(on) {
5446
5424
  if (url && /^https?:/i.test(url)) wc.loadURL(url).catch(() => {});
5447
5425
  }
5448
5426
  } catch {}
5449
- applyPhoneEmulation(); // açık: 390x844 cihaz ortalanır kapalı: emülasyon kapanır
5427
+ /* dock daralır/genişler layout + renderer --bw tazelenir */
5450
5428
  if (browser.open && win && !win.isDestroyed()) {
5451
5429
  layoutBrowser();
5452
5430
  const [w] = win.getContentSize();
@@ -6213,7 +6191,7 @@ ipcMain.handle('ide:previewFile', async (_e, rel) => {
6213
6191
  const url = base + '/' + relPath;
6214
6192
  setBrowserOpen(true, true);
6215
6193
  browser.view.webContents.loadURL(url).catch(() => {});
6216
- browserEmit({ open: true, width: browser.width, url });
6194
+ browserEmit({ open: true, width: browserShownWidth(browserW()), url });
6217
6195
  return { ok: true, url };
6218
6196
  } catch (e) {
6219
6197
  return { ok: false, error: String((e && e.message) || e) };
@@ -6251,7 +6229,7 @@ ipcMain.handle('ide:preview', async () => {
6251
6229
  url = base + '/';
6252
6230
  }
6253
6231
  browser.view.webContents.loadURL(url).catch(() => {});
6254
- browserEmit({ open: true, width: browser.width, url });
6232
+ browserEmit({ open: true, width: browserShownWidth(browserW()), url });
6255
6233
  if (!bcLastServerUrl) bcTellServe(url.replace(/\/$/, ''));
6256
6234
  return { ok: true, url };
6257
6235
  } catch (e) {
@@ -374,7 +374,6 @@
374
374
  <button id="bbReload" title="Yenile" data-i18n-title="tip_bb_reload">&#x21BB;</button>
375
375
  <input id="bbUrl" placeholder="adres yaz veya ara…" autocomplete="off" spellcheck="false" data-i18n-ph="bb_ph" />
376
376
  <button id="bbPhone" title="Telefon modu — mobil versiyon / web versiyonu" data-i18n-title="tip_bb_phone"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="7" y="2" width="10" height="20" rx="2.5"/><line x1="11" y1="18" x2="13" y2="18"/></svg></button>
377
- <button id="bbShot" title="Ekran görüntüsünü sohbete ekle" data-i18n-title="tip_bb_shot">&#x25A3;</button>
378
377
  <button id="bbOpenExt" title="Tarayıcıda aç" data-i18n-title="tip_bb_open">&#x2197;</button>
379
378
  <button id="bbClose" title="Kapat" data-i18n-title="btn_close">&#x00D7;</button>
380
379
  </div>
@@ -56,7 +56,6 @@ const els = {
56
56
  bbReload: $('#bbReload'),
57
57
  bbUrl: $('#bbUrl'),
58
58
  bbOpenExt: $('#bbOpenExt'),
59
- bbShot: $('#bbShot'),
60
59
  bbClose: $('#bbClose'),
61
60
  bbResize: $('#bbResize'),
62
61
  bbPhone: $('#bbPhone'),
@@ -5326,28 +5325,6 @@ async function init() {
5326
5325
  const u = els.bbUrl.value.trim();
5327
5326
  if (/^https?:\/\//i.test(u)) beast.openExternal(u);
5328
5327
  });
5329
- els.bbShot.addEventListener('click', async () => {
5330
- try {
5331
- setStatus('ekran görüntüsü alınıyor…');
5332
- const r = await beast.browserScreenshot();
5333
- setStatus('');
5334
- if (r && r.ok) {
5335
- pending.push({
5336
- type: 'image',
5337
- name: 'screenshot-' + new Date().toISOString().slice(11, 19).replace(/:/g, '') + '.jpg',
5338
- dataUrl: r.image,
5339
- });
5340
- renderChips();
5341
- scrollDown();
5342
- toast('Görüntü eklendi — mesajına iliştirilecek');
5343
- } else {
5344
- toast((r && r.error) || 'Ekran görüntüsü alınamadı');
5345
- }
5346
- } catch (e) {
5347
- setStatus('');
5348
- toast(String((e && e.message) || e));
5349
- }
5350
- });
5351
5328
  els.bbUrl.addEventListener('keydown', (e) => {
5352
5329
  if (e.key === 'Enter') {
5353
5330
  const v = els.bbUrl.value.trim();
@@ -6753,7 +6730,8 @@ async function renderTasksPanel() {
6753
6730
  const undoMap = new Map((r.undo || []).map((u) => [u.id, u.files]));
6754
6731
  let html =
6755
6732
  '<div class="tsk-head"><span>G\u00D6REVLER</span>' +
6756
- '<button id="tskUndoLast" ' + (r.lastTodoId ? '' : 'disabled') + ' title="Kay\u0131tl\u0131 son g\u00F6revi geri al">\u21B6 Son G\u00F6revi Geri Al</button>' +
6733
+ '<button id="tskUndoLast" class="tsk-undo-last" ' + (r.lastTodoId ? '' : 'disabled') +
6734
+ ' title="Son g\u00F6revi geri al">\u21B6</button>' +
6757
6735
  '<button id="tskClose" title="Kapat">\u00D7</button></div>';
6758
6736
  if (!(r.todos || []).length) {
6759
6737
  html += '<div class="tsk-empty">g\u00F6rev listesi yok</div>';
@@ -2500,11 +2500,14 @@ body.ide-mode #bcPanel { display: flex; }
2500
2500
  .bc-todoitem.done { color: var(--muted); }
2501
2501
  .bc-todoitem.done .bc-todocheck { color: var(--ok, var(--accent)); }
2502
2502
  .bc-todoitem.done .bc-todotext { text-decoration: line-through; }
2503
+ #filePanelTitle { display: none; } /* başlık kaldırıldı — başlıkta yalnız ikonlar */
2504
+ #filePanel .file-spacer { display: none; }
2503
2505
  #filePanelHead {
2504
2506
  display: flex;
2505
2507
  align-items: center;
2508
+ justify-content: space-evenly;
2506
2509
  gap: 6px;
2507
- padding: 10px 10px;
2510
+ padding: 10px 6px;
2508
2511
  border-bottom: 1px solid var(--border);
2509
2512
  }
2510
2513
  #filePanelTitle { font-size: 11px; letter-spacing: 2px; color: var(--muted); font-weight: 800; }
@@ -2521,7 +2524,7 @@ body.ide-mode #bcPanel { display: flex; }
2521
2524
  }
2522
2525
  #filePanelHead button:hover { color: var(--text); background: var(--panel2); }
2523
2526
  #filePreview { border-color: var(--accent); color: var(--accent); font-weight: 700; }
2524
- #filePanelPath {
2527
+ #filePanelPath {
2525
2528
  font-family: var(--mono, monospace);
2526
2529
  font-size: 10px;
2527
2530
  color: var(--muted);
@@ -2572,6 +2575,14 @@ body.ide-mode #bcPanel { display: flex; }
2572
2575
  }
2573
2576
  .tsk-head button:hover { color: var(--text); border-color: var(--accent); }
2574
2577
  .tsk-head button[disabled] { opacity: 0.35; cursor: default; }
2578
+ /* başlıktaki tek ikonluk geri-al butonu — görev ikonuyla aynı boyda */
2579
+ .tsk-head .tsk-undo-last {
2580
+ color: var(--accent);
2581
+ border-color: var(--accent);
2582
+ padding: 2px 7px;
2583
+ font-size: 12px;
2584
+ }
2585
+ .tsk-head .tsk-undo-last:hover { color: var(--err); border-color: var(--err); }
2575
2586
  .tsk-row {
2576
2587
  display: flex;
2577
2588
  align-items: center;