beast-agent 2.40.0 → 2.42.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/assets/app.ico CHANGED
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "beast-agent",
3
3
  "productName": "Beast Agent",
4
- "version": "2.40.0",
4
+ "version": "2.42.0",
5
5
  "description": "Ultra-fast local agent shell for Windows.",
6
6
  "author": "algokodcom (AlgoKod)",
7
7
  "license": "MIT",
@@ -2106,6 +2106,7 @@ class Engine {
2106
2106
  ? 'Bağımsız alt-işleri run_background ile PARALEL ajana devret; işi KENDİN YÜRÜTME — emri ver, takip et, raporla.'
2107
2107
  : 'Bağımsız alt-işleri delegate_task ile devret; kendi başına halledebileceğin işleri devretme.',
2108
2108
  'Güncel/dış bilgi gerekiyorsa web_search kullan (zincir DAHİLİ tarayıcıyla başlar — gerçek Chromium ile Google); hızlı ham metin okuması için webfetch (veya http_fetch) kullan.',
2109
+ 'KULLANICI GITHUB REPO ADRESİ/LİNKİ VERİRSE (github.com/owner/repo) ya da "şu repoyu indir/kur/çalıştır" derse sandbox_repo aracını kullan: action=indir → Beast Sandbox\'a (~/Beast-Sandbox) klonlar; ardından action=kur (bağımlılıklar) ve action=baslat (çalıştır) ile devam et — uzun sürse bile tur KİLİTLENMEZ, çıktı Sandbox ÇALIŞTIR panelinde canlı akar, localhost adresi sağdaki dahili tarayıcıda otomatik açılır. Sonucu kullanıcıya tek cümleyle bildir (repo, komut, çalışıyor mu).',
2109
2110
  'DERİN ARAŞTIRMA: web_search\u2019in sonucu yetersizse/istenen bilgi listede YOKSA aramayı tekrar tekrar deneme yerine deep_search kullan — 1-4 sorgu varyantını (eş anlamlı, Türkçe+İngilizce yazımlar) PARALEL aratır ve ilk sayfaları GİZLİ gerçek Chromium\u2019da açıp tam metin okur (paneli açmaz, kullanıcıyı rahatsız etmez; JS/SPA sayfalar çalışır). Fiyat karşılaştırma, çok kaynaklı araştırma, "her şeyi bul" işleri ve Türkçe sorgularda sonuç zayıfsa doğrudan deep_search seç. read_top=0 verirsen yalnız harmanlanmış sonuç listesi döner.',
2110
2111
  'ARAMA-DİSİPLİN: bir bilgiyi 2-3 denemede bulamazsan TAKILMA — farklı bir açıya/sorguya geç, yine yoksa bulabildiğin kısmi bilgiyle cevap ver ve neyi bulamadığını açıkça söyle. Kapalı/gizli içerik (private profil, login arkası veri) peşinde KOŞMA — bulunamayacağı belliyse hemen vazgeç.',
2111
2112
  'TARAYICI VARSAYILANI (ZORUNLU): kullanıcı "şu siteyi aç", "bunu ara / google\u2019da ara", "şu sayfaya git" gibi bir web isteği verdiğinde HEP DAHİLİ TARAYICIYI KULLAN (browser_open ile aç → açılış yanıtında hazır snapshot gelir → ref numaralarıyla browser_click/browser_type/browser_select ile hareket et; HER eylem yanıtında taze snapshot döner — ayrıca browser_snapshot çağırma, yanıttaki refleri kullan; browser_read ile metin oku; sadece görsel yerleşim/grafik gerekiyorsa browser_screenshot çek). Tarih/saat alanlarını (type=date/time) browser_type ile DÜZ METİN yaz ("15.03.2026", "2026-03-15") — takvimden tıklamaya çalışma, alan programatik ayarlanır. Panel ekranın sağında açılır ve kullanıcı da sayfayı anında görür; JS/login/SPA/dinamik içerik için idealdir. Bu kural TÜM oturumları kapsar — masaüstü sohbeti ve çok kullanıcılı botlar (WhatsApp vb.) dahil.' +
@@ -5010,6 +5011,51 @@ const skills = require('./skills');
5010
5011
  return { ...r, via };
5011
5012
  }
5012
5013
 
5014
+ /* Sandbox köprüsü (main.js hook'ları): ana sohbetteki ajan sandbox_repo
5015
+ aracıyla repo indirir/kurar/çalıştırır — Sandbox paneliyle AYNI makine.
5016
+ Kur/Başlat yönetilen süreçtir: tur kilitlenmez, çıktı panelde akar,
5017
+ localhost adresi sağdaki dahili tarayıcıda açılır. */
5018
+ async _sandboxRepo(args) {
5019
+ const action = String((args && args.action) || '').trim().toLowerCase();
5020
+ const repo = String((args && args.repo) || '').trim();
5021
+ if (action === 'indir') {
5022
+ if (typeof this.sbCloneHook !== 'function') return { ok: false, error: 'sandbox köprüsü yok' };
5023
+ const r = await this.sbCloneHook(repo);
5024
+ if (!r || !r.ok) return r || { ok: false, error: 'klonlanamadı' };
5025
+ let info = null;
5026
+ try { if (typeof this.sbDetectHook === 'function') info = this.sbDetectHook(r.folder); } catch {}
5027
+ return {
5028
+ ok: true,
5029
+ name: r.name,
5030
+ folder: r.folder,
5031
+ detected: info ? { kind: info.kind, label: info.label, install: info.install, run: info.run } : undefined,
5032
+ note:
5033
+ 'Repo "' + r.name + '" → ' + r.folder + ' klasörüne indirildi. Kurmak için sandbox_repo action=kur, çalıştırmak için action=baslat (bağımlılıklar eksikse önce kurar); kullanıcı Sandbox panelindeki Başlat/Dev butonlarını da kullanabilir.',
5034
+ };
5035
+ }
5036
+ if (action !== 'kur' && action !== 'baslat' && action !== 'durdur') {
5037
+ return { ok: false, error: 'action şunlardan biri olmalı: indir | kur | baslat | durdur' };
5038
+ }
5039
+ let folder = '';
5040
+ try { if (typeof this.sbFolderHook === 'function') folder = String(this.sbFolderHook(repo) || ''); } catch {}
5041
+ if (!folder) return { ok: false, error: 'repo bulunamadı — önce sandbox_repo action=indir ile indir ya da Sandbox panelinden bir repo seç' };
5042
+ if (action === 'kur') {
5043
+ if (typeof this.sbInstallHook !== 'function') return { ok: false, error: 'sandbox köprüsü yok' };
5044
+ const r = this.sbInstallHook(folder);
5045
+ if (!r || !r.ok) return r || { ok: false, error: 'kurulum başlatılamadı' };
5046
+ return { ok: true, folder, command: r.cmd, note: 'Kurulum ÇALIŞTIR panelinde başladı: ' + r.cmd + ' — çıktı panelde canlı akar; bitince kullanıcıya bildir, sonra action=baslat.' };
5047
+ }
5048
+ if (action === 'baslat') {
5049
+ if (typeof this.sbStartHook !== 'function') return { ok: false, error: 'sandbox köprüsü yok' };
5050
+ const r = this.sbStartHook(folder, 'run');
5051
+ if (!r || !r.ok) return r || { ok: false, error: 'başlatılamadı' };
5052
+ return { ok: true, folder, command: r.cmd, note: 'Süreç ÇALIŞTIR panelinde başladı: ' + r.cmd + '. Dev server adresi yakalanınca sağdaki dahili tarayıcıda otomatik açılır; durdurmak için action=durdur.' };
5053
+ }
5054
+ if (typeof this.sbStopHook !== 'function') return { ok: false, error: 'sandbox köprüsü yok' };
5055
+ const stopped = !!this.sbStopHook(folder);
5056
+ return { ok: true, folder, wasRunning: stopped, note: stopped ? 'Süreç durduruldu.' : 'Bu repoda çalışan bir süreç yoktu.' };
5057
+ }
5058
+
5013
5059
  async _subExecTool(name, args, signal) {
5014
5060
  try {
5015
5061
  const blocked = this._guardTool(name, args);
@@ -5024,6 +5070,7 @@ const skills = require('./skills');
5024
5070
  });
5025
5071
  }
5026
5072
  if (name === 'ocr_read') return JSON.stringify(await this._ocrRead(args || {}, signal));
5073
+ if (name === 'sandbox_repo') return JSON.stringify(await this._sandboxRepo(args || {}));
5027
5074
  /* opencode general-agent portu: alt-ajan da edit/grep/glob kullanır.
5028
5075
  MT5 (mt5_*) araçları da tools.exec'e geçer (finance işçileri/danışma). */
5029
5076
  if (!(name === 'run_command' || name === 'read_file' || name === 'write_file' || name === 'edit_file' ||
@@ -5565,6 +5612,9 @@ const skills = require('./skills');
5565
5612
  const n = Number((args && args.max_results) || 8);
5566
5613
  return JSON.stringify(await this._webSearchChain(q, n, sessionId, signal));
5567
5614
  }
5615
+ if (name === 'sandbox_repo') {
5616
+ return JSON.stringify(await this._sandboxRepo(args || {}));
5617
+ }
5568
5618
  if (name === 'ocr_read') {
5569
5619
  return JSON.stringify(await this._ocrRead(args || {}, signal, sessionId));
5570
5620
  }
@@ -130,9 +130,10 @@ function build(opts = {}) {
130
130
  user
131
131
  ),
132
132
  prompt: [
133
- 'BEAST SANDBOX MODUNDASIN: GitHub\u2019dan indirilmi\u015f A\u00c7IK KAYNAK bir repo klas\u00f6r\u00fcndesin (Beast-Sandbox). Bu kodun sahibi de\u011filsin \u2014 hazir bir di\u015f proje; repo sahibinin konvansiyonlarina uy, gereksiz yeniden bi\u00e7imlendirme yapma.',
134
- '\u0130\u015fe README + paket bildirim dosyalar\u0131yla ba\u015fla (list/glob); ba\u011f\u0131ml\u0131l\u0131klar kurulu de\u011filse \u00f6nce kurulum komutunu \u00e7al\u0131\u015ft\u0131r (npm install vb.).',
135
- 'UZUN S\u00dcREL\u0130 sunucu/s\u00fcre\u00e7 (npm start, npm run dev, python app.py vb.) bash ile ASLA ba\u015flatma \u2014 tur kilitlenir; kullan\u0131c\u0131 \u00e7al\u0131\u015ft\u0131rmak isterse panel_run arac\u0131yla \u00c7ALI\u015eTIR paneline b\u0131rak (\u00e7\u0131kt\u0131 orada canl\u0131 akar) ve adresi kullan\u0131c\u0131ya bildir. panel_run yaln\u0131z B\u0130R s\u00fcre\u00e7 \u00e7al\u0131\u015ft\u0131r\u0131r.',
133
+ 'BEAST SANDBOX MODUNDASIN: GitHub\u2019dan indirilmi\u015f A\u00c7IK KAYNAK bir repo klas\u00f6r\u00fcndesin (Beast-Sandbox). Bu kodun sahibi de\u011filsin \u2014 haz\u0131r bir d\u0131\u015f proje; repo sahibinin konvansiyonlar\u0131na uy, gereksiz yeniden bi\u00e7imlendirme yapma.',
134
+ 'PANEL: \u00c7ALI\u015eTIR b\u00f6l\u00fcm\u00fcndeki Ba\u015flat/Dev butonlar\u0131 proje tipini OTOMAT\u0130K alg\u0131lar (package.json scripts + npm/pnpm/yarn/bun kilidi; requirements.txt/pyproject + uv; hugo/jekyll/mkdocs; Cargo.toml; go.mod; statik index.html) ve gerekirse \u00d6NCE ba\u011f\u0131ml\u0131l\u0131klar\u0131 kurup sonra do\u011fru komutu \u00e7al\u0131\u015ft\u0131r\u0131r. Alg\u0131lama komut bulamazsa ya da komut 10 sn i\u00e7inde hata verirse sistem sana OTOMAT\u0130K mesaj d\u00fc\u015f\u00fcr\u00fcr: repo yap\u0131s\u0131na g\u00f6re (README, betikler, site ayarlar\u0131, ana dosyalar) DO\u011eRU komutu bul ve panel_run ile ba\u015flat. \u00d6zel komut kutusu ad-hoc komut \u00e7al\u0131\u015ft\u0131r\u0131r; kaydet butonu o komutu repo i\u00e7in kal\u0131c\u0131 ba\u015flatma komutu yapar. Kullan\u0131c\u0131 butonla ba\u015flatt\u0131ysa \u00e7\u0131kt\u0131 panelde canl\u0131 akar, localhost adresi yakalan\u0131nca \u00c7ALI\u015eTIR panelinde CANLI \u00d6N\u0130ZLEME a\u00e7\u0131l\u0131r (kullan\u0131c\u0131 G\u00f6rsel/\u00c7\u0131kt\u0131 d\u00fc\u011fmesiyle ge\u00e7i\u015f yapar).',
135
+ '\u0130\u015fe README + paket bildirim dosyalar\u0131yla ba\u015fla (list/glob); ba\u011f\u0131ml\u0131l\u0131klar kurulu de\u011filse kurulumu sen yapabilirsin (npm install, pip install -r requirements.txt vb.) \u2014 Ba\u015flat/Dev butonlar\u0131 da gerekirse \u00f6nce kurar. Komut ba\u015far\u0131s\u0131z olursa ger\u00e7ek hatay\u0131 g\u00f6rmek i\u00e7in ayn\u0131 komutu bash ile \u00e7al\u0131\u015ft\u0131r, nedenini bul, gerekiyorsa d\u00fczelt ve kullan\u0131c\u0131ya do\u011fru \u00f6zel komutu s\u00f6yle (kutuya yaz\u0131p kaydetsin).',
136
+ 'UZUN S\u00dcREL\u0130 sunucu/s\u00fcre\u00e7 (npm start, npm run dev, hugo server, python app.py vb.) bash ile ASLA ba\u015flatma \u2014 tur kilitlenir; kullan\u0131c\u0131 senden isterse panel_run ile ba\u015flat (\u00e7\u0131kt\u0131 panelde akar, adres \u00c7ALI\u015eTIR panelinde canl\u0131 \u00f6nizlemede a\u00e7\u0131l\u0131r). Repo ba\u015f\u0131na TEK s\u00fcre\u00e7: kullan\u0131c\u0131 zaten ba\u015flatt\u0131ysa panel_run hata verir \u2014 kullan\u0131c\u0131ya \u00f6nce Durdur demesini s\u00f6yle.',
136
137
  ].join('\n'),
137
138
  mode: 'all',
138
139
  native: false,
@@ -1613,6 +1613,22 @@ const definitions = [
1613
1613
  },
1614
1614
  },
1615
1615
  },
1616
+ {
1617
+ type: 'function',
1618
+ function: {
1619
+ name: 'sandbox_repo',
1620
+ description:
1621
+ 'Beast Sandbox yönetimi — kullanıcı GitHub repo adresi/linki verdiğinde ya da indirilmiş bir repoyu kurmak/çalıştırmak istediğinde kullan. action=indir: repoyu ~/Beast-Sandbox klasörüne klonlar (owner/repo ya da tam URL); action=kur: algılanan kurulum komutunu (npm install, pip install -r requirements.txt, uv sync, cargo fetch, go mod download) ÇALIŞTIR panelinde başlatır; action=baslat: çalıştırma komutunu başlatır — bağımlılıklar eksikse önce kurar (npm install && npm run dev, python app.py vb.); localhost adresi yakalanınca ÇALIŞTIR panelinde canlı önizlemede açılır; action=durdur: repodaki çalışan süreci durdurur. Kur/Başlat/Dev turu KİLİTLEMEZ, çıktı panelde canlı akar. repo alanı boşsa panelde son kullanılan repo kullanılır.',
1622
+ parameters: {
1623
+ type: 'object',
1624
+ properties: {
1625
+ action: { type: 'string', enum: ['indir', 'kur', 'baslat', 'durdur'], description: 'Yapılacak işlem' },
1626
+ repo: { type: 'string', description: 'GitHub adresi (owner/repo ya da tam URL) ya da repo adı/klasör yolu; son kullanılan repo için boş bırak' },
1627
+ },
1628
+ required: ['action'],
1629
+ },
1630
+ },
1631
+ },
1616
1632
  {
1617
1633
  type: 'function',
1618
1634
  function: {