beast-agent 0.25.2 → 0.25.3
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/main.js +66 -11
package/package.json
CHANGED
package/src/main.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const { app, BrowserWindow, WebContentsView, ipcMain, shell, dialog, Tray, Menu, nativeImage, desktopCapturer, session } = require('electron');
|
|
3
|
+
const { app, BrowserWindow, WebContentsView, ipcMain, shell, dialog, Tray, Menu, nativeImage, desktopCapturer, session, net: electronNet } = require('electron');
|
|
4
4
|
const path = require('path');
|
|
5
5
|
const fs = require('fs');
|
|
6
6
|
const http = require('http');
|
|
@@ -3743,13 +3743,21 @@ function flushDesktopOnDone(ev) {
|
|
|
3743
3743
|
- Bağlantı geri gelince (DNS kontrolü) sırayla otomatik gönderilir
|
|
3744
3744
|
- Renderer'a 'net' / 'netQueue' olayları gider: ⏳ kuyruk balonu + toast */
|
|
3745
3745
|
const NET_CHECK_HOSTS = ['one.one.one.one', 'dns.google'];
|
|
3746
|
+
const NET_LOOKUP_HOSTS = ['www.google.com', 'www.microsoft.com'];
|
|
3747
|
+
const NET_HTTP_PROBES = [
|
|
3748
|
+
'http://www.msftconnecttest.com/connecttest.txt',
|
|
3749
|
+
'http://cp.cloudflare.com/generate_204',
|
|
3750
|
+
'http://connectivitycheck.gstatic.com/generate_204',
|
|
3751
|
+
];
|
|
3746
3752
|
const NET_CHECK_MS = 8000;
|
|
3747
3753
|
const NET_CHECK_TIMEOUT = 4000;
|
|
3754
|
+
const NET_OFFLINE_STRIKES = 2; // üst üste bu kadar başarısız turda offline ilan edilir
|
|
3748
3755
|
const CHAT_QUEUE_MAX = 50; // kuyruk üst sınırı — taşarsa en eski düşer
|
|
3749
3756
|
|
|
3750
3757
|
let netOnline = true; // son bilinen bağlantı durumu (başlangıçta iyimser)
|
|
3751
3758
|
let netCheckedOnce = false;
|
|
3752
3759
|
let netCheckBusy = false;
|
|
3760
|
+
let netFailStreak = 0;
|
|
3753
3761
|
let chatQueueFlushing = false;
|
|
3754
3762
|
const chatOfflineQueue = []; // { key, sessionId, text, attachments, at }
|
|
3755
3763
|
|
|
@@ -3833,8 +3841,42 @@ async function flushChatQueue() {
|
|
|
3833
3841
|
}
|
|
3834
3842
|
}
|
|
3835
3843
|
|
|
3836
|
-
/* gerçek internet
|
|
3837
|
-
|
|
3844
|
+
/* gerçek internet kontrolü — TEK yöntem yanıltıcı olabilir:
|
|
3845
|
+
dns.resolve (c-ares) sistem çözümleyicisini atlar; mobil ağ/hotspot/VPN ve
|
|
3846
|
+
ISS DNS engellemelerinde (ör. 1.1.1.1, dns.google) internet VARken bile
|
|
3847
|
+
başarısız çıkar. Bu yüzden katmanlı deniyoruz; HERHANGİ bir katman başarılıysa
|
|
3848
|
+
internet VAR sayılır:
|
|
3849
|
+
1) HTTP connectivity endpoint'leri (http modülü dns.lookup = OS çözümleyicisi
|
|
3850
|
+
kullanır — tarayıcı gibi; captive portal/proxy/mobil ağ hepsinde çalışır)
|
|
3851
|
+
2) dns.lookup (Windows sistem çözümleyicisi — hosts dosyası/VPN/NRPT dahil)
|
|
3852
|
+
+ dns.resolve (doğrudan DNS sunucusu)
|
|
3853
|
+
3) OS'in kendi bağlantı durumu (Electron net.isOnline — Windows NCSI)
|
|
3854
|
+
Ayrıca tek başarısız tur offline ilan etmez (2 üst üste başarısız tur gerekir):
|
|
3855
|
+
geçici DNS gecikmesi mesajları gereksiz kuyruğa atmaz. */
|
|
3856
|
+
function httpProbe(url) {
|
|
3857
|
+
return new Promise((resolve) => {
|
|
3858
|
+
let done = false;
|
|
3859
|
+
const fin = (v) => { if (!done) { done = true; resolve(v); } };
|
|
3860
|
+
try {
|
|
3861
|
+
const req = http.get(url, { timeout: NET_CHECK_TIMEOUT }, (res) => {
|
|
3862
|
+
res.resume(); // gövdeyi tüket — soket serbest kalsın
|
|
3863
|
+
const ok = !!res.statusCode && res.statusCode < 500;
|
|
3864
|
+
try { res.destroy(); } catch {}
|
|
3865
|
+
fin(ok);
|
|
3866
|
+
});
|
|
3867
|
+
req.on('timeout', () => { try { req.destroy(); } catch {} fin(false); });
|
|
3868
|
+
req.on('error', () => fin(false));
|
|
3869
|
+
} catch { fin(false); }
|
|
3870
|
+
});
|
|
3871
|
+
}
|
|
3872
|
+
|
|
3873
|
+
function lookupProbe(host) {
|
|
3874
|
+
return new Promise((resolve) => {
|
|
3875
|
+
const t = setTimeout(() => resolve(false), NET_CHECK_TIMEOUT);
|
|
3876
|
+
dns.lookup(host, (err) => { clearTimeout(t); resolve(!err); });
|
|
3877
|
+
});
|
|
3878
|
+
}
|
|
3879
|
+
|
|
3838
3880
|
function dnsProbe(host) {
|
|
3839
3881
|
return new Promise((resolve) => {
|
|
3840
3882
|
const t = setTimeout(() => resolve(false), NET_CHECK_TIMEOUT);
|
|
@@ -3849,24 +3891,37 @@ async function netCheck() {
|
|
|
3849
3891
|
if (netCheckBusy) return;
|
|
3850
3892
|
netCheckBusy = true;
|
|
3851
3893
|
try {
|
|
3852
|
-
let ok =
|
|
3853
|
-
|
|
3854
|
-
|
|
3894
|
+
let ok = (await Promise.all(NET_HTTP_PROBES.map(httpProbe))).some(Boolean);
|
|
3895
|
+
if (!ok) {
|
|
3896
|
+
const lookups = [
|
|
3897
|
+
...NET_LOOKUP_HOSTS.map(lookupProbe),
|
|
3898
|
+
...NET_CHECK_HOSTS.map(dnsProbe),
|
|
3899
|
+
];
|
|
3900
|
+
ok = (await Promise.all(lookups)).some(Boolean);
|
|
3901
|
+
}
|
|
3902
|
+
if (!ok) {
|
|
3903
|
+
try { ok = electronNet.isOnline() === true; } catch {}
|
|
3855
3904
|
}
|
|
3856
3905
|
const first = !netCheckedOnce;
|
|
3857
3906
|
const was = netOnline;
|
|
3858
|
-
netOnline = ok;
|
|
3859
3907
|
netCheckedOnce = true;
|
|
3860
|
-
if (
|
|
3908
|
+
if (ok) {
|
|
3909
|
+
netFailStreak = 0;
|
|
3910
|
+
netOnline = true;
|
|
3911
|
+
} else {
|
|
3912
|
+
netFailStreak++;
|
|
3913
|
+
if (!was || netFailStreak >= NET_OFFLINE_STRIKES) netOnline = false;
|
|
3914
|
+
}
|
|
3915
|
+
if (netOnline !== was || first) {
|
|
3861
3916
|
try {
|
|
3862
|
-
if (win && !win.isDestroyed()) win.webContents.send('agent:event', { type: 'net', online:
|
|
3917
|
+
if (win && !win.isDestroyed()) win.webContents.send('agent:event', { type: 'net', online: netOnline });
|
|
3863
3918
|
} catch {}
|
|
3864
|
-
if (
|
|
3919
|
+
if (netOnline) {
|
|
3865
3920
|
log.info('main', 'bağlantı geri geldi — offline kuyruk kontrol ediliyor');
|
|
3866
3921
|
chatQueueEmit(); // renderer: pill/toast güncellensin
|
|
3867
3922
|
flushChatQueue().catch(() => {});
|
|
3868
3923
|
} else {
|
|
3869
|
-
log.info('main',
|
|
3924
|
+
log.info('main', `internet bağlantısı yok — mesajlar kuyruğa alınacak (streak=${netFailStreak})`);
|
|
3870
3925
|
chatQueueEmit();
|
|
3871
3926
|
}
|
|
3872
3927
|
}
|