beast-agent 2.10.0 → 2.11.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/main.js +95 -2
package/package.json
CHANGED
package/src/main.js
CHANGED
|
@@ -75,6 +75,73 @@ function emitUpdateEvent() {
|
|
|
75
75
|
} catch {}
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
/* /version ORTAK METNİ — tüm kanallar (desktop/WA/TG/DC): güncel sürüm +
|
|
79
|
+
npm'deki en son sürüm (yeni varsa vurgulu; 10dk cache'li getNpmLatest). */
|
|
80
|
+
async function versionText(waStyle) {
|
|
81
|
+
const cur = beastVersion();
|
|
82
|
+
const latest = await getNpmLatest();
|
|
83
|
+
const b = waStyle ? '*' : '**';
|
|
84
|
+
if (latest && isNewerVersion(latest, cur)) {
|
|
85
|
+
return (
|
|
86
|
+
`${b}Beast Agent v${cur}${b} — ${b}yeni sürüm var: v${latest}${b}\n` +
|
|
87
|
+
`Güncelleme: ${b}/update${b} (kontrol) · ${b}/update now${b} (hemen kur)`
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
if (latest) {
|
|
91
|
+
return `${b}Beast Agent v${cur}${b} — güncel ✓\nGüncelleme kontrolü: ${b}/update${b} · hemen kur: ${b}/update now${b}`;
|
|
92
|
+
}
|
|
93
|
+
return `${b}Beast Agent v${cur}${b}\nGüncelleme: ${b}/update${b} (yeni sürüm kontrolü) · ${b}/update now${b} (hemen kur)`;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* SÜRÜM GÜNCELLEMESİ BİLGİSİ: sürüm değiştiyse İLK AÇILIŞTA kullanıcı'nın
|
|
97
|
+
olduğu yere kısa bilgi düşer — en güncel oturum (desktop) + o oturuma
|
|
98
|
+
BĞLI kanal (WA/TG/DC; hangisindeyse oraya). settings.lastRunVersion
|
|
99
|
+
yazıldığı için sürüm başına YALNIZ BİR KEZ çalışır. */
|
|
100
|
+
function notifyVersionUpdate() {
|
|
101
|
+
const cur = beastVersion();
|
|
102
|
+
const prev = String(settings.lastRunVersion || '');
|
|
103
|
+
settings.lastRunVersion = cur;
|
|
104
|
+
saveSettings();
|
|
105
|
+
if (!prev || prev === cur) return; /* ilk kurulum ya da sürüm değişmedi */
|
|
106
|
+
const waStyleTxt =
|
|
107
|
+
`🔄 *Beast Agent güncellendi:* v${prev} → *v${cur}*\n` +
|
|
108
|
+
`Yenilikler: GitHub Releases · Sürüm: /version · Güncelleme: /update`;
|
|
109
|
+
let sid = '';
|
|
110
|
+
try { sid = reuseOrLatestSession(''); } catch {}
|
|
111
|
+
/* desktop: en güncel oturuma bilgi balonu */
|
|
112
|
+
try {
|
|
113
|
+
if (win && !win.isDestroyed() && sid) {
|
|
114
|
+
const mdTxt = waStyleTxt.replace(/\*/g, '**');
|
|
115
|
+
win.webContents.send('agent:event', { sessionId: sid, type: 'message', message: { role: 'assistant', content: mdTxt } });
|
|
116
|
+
win.webContents.send('agent:event', { sessionId: sid, type: 'done', usage: null });
|
|
117
|
+
}
|
|
118
|
+
} catch {}
|
|
119
|
+
/* kanallar: SADECE bu oturuma bağlı kanal (kullanıcı oradaydı) */
|
|
120
|
+
(async () => {
|
|
121
|
+
try {
|
|
122
|
+
if (wa && wa.connected) {
|
|
123
|
+
const own = waOwnerNum();
|
|
124
|
+
const jid = own ? own + '@s.whatsapp.net' : '';
|
|
125
|
+
if (jid && [...waChats.entries()].some(([j, s]) => j === jid && String(s) === String(sid))) {
|
|
126
|
+
await sendWaSafe(jid, waStyleTxt);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
} catch {}
|
|
130
|
+
try {
|
|
131
|
+
if (tg && tg.connected) {
|
|
132
|
+
const hit = [...tgChats.entries()].find(([, s]) => String(s) === String(sid));
|
|
133
|
+
if (hit) await sendTgSafe(hit[0], waStyleTxt);
|
|
134
|
+
}
|
|
135
|
+
} catch {}
|
|
136
|
+
try {
|
|
137
|
+
if (dc && dc.connected) {
|
|
138
|
+
const hit = [...dcChats.entries()].find(([, s]) => String(s) === String(sid));
|
|
139
|
+
if (hit) await sendDcSafe(hit[0], waStyleTxt);
|
|
140
|
+
}
|
|
141
|
+
} catch {}
|
|
142
|
+
})();
|
|
143
|
+
}
|
|
144
|
+
|
|
78
145
|
function replyUpdate(text) {
|
|
79
146
|
try {
|
|
80
147
|
for (const sid of updateReplies.sids) desktopEcho(sid, '/update', text);
|
|
@@ -1623,7 +1690,8 @@ async function tryWaSlash(jid, rawText, senderNum, payload0) {
|
|
|
1623
1690
|
out = 'Bu komut yalnız BeastCode modunda çalışır — önce /beastcode yaz.';
|
|
1624
1691
|
}
|
|
1625
1692
|
} else if (cmd === 'version') {
|
|
1626
|
-
|
|
1693
|
+
/* npm'deki en son sürümü de göster */
|
|
1694
|
+
out = await versionText(true);
|
|
1627
1695
|
} else {
|
|
1628
1696
|
out = `Bilinmeyen komut: /${cmd}\nListe için /help yaz.`;
|
|
1629
1697
|
}
|
|
@@ -2643,6 +2711,14 @@ async function processTgMessage(chatId, payload, requeues = 0) {
|
|
|
2643
2711
|
tgLog(`skip flush: izinli eşleşme yok (sender=${payload.senderId || '?'})`);
|
|
2644
2712
|
return;
|
|
2645
2713
|
}
|
|
2714
|
+
/* /version HER KANALDA: sürüm + npm'deki en son sürüm (izin kontrolü üstte) */
|
|
2715
|
+
const tgRaw = String((payload && payload.text) || '').trim();
|
|
2716
|
+
if (tgRaw === '/version' || tgRaw.startsWith('/version ')) {
|
|
2717
|
+
versionText(true)
|
|
2718
|
+
.then((txt) => sendTgSafe(chatId, txt))
|
|
2719
|
+
.catch(() => {});
|
|
2720
|
+
return;
|
|
2721
|
+
}
|
|
2646
2722
|
/* OPENCODE STEER: meşgulse bekleme — engine.send tampona ekler, koşan tur
|
|
2647
2723
|
sonraki istekte görür (WA ile aynı mantık) */
|
|
2648
2724
|
let sid = tgChats.get(chatId) || tgSingleSid;
|
|
@@ -2854,6 +2930,14 @@ async function processDcMessage(channelId, payload) {
|
|
|
2854
2930
|
dcLog(`skip flush: izinli eşleşme yok (sender=${payload.senderId || '?'})`);
|
|
2855
2931
|
return;
|
|
2856
2932
|
}
|
|
2933
|
+
/* /version HER KANALDA: sürüm + npm'deki en son sürüm (izin kontrolü üstte) */
|
|
2934
|
+
const dcRaw = String((payload && payload.text) || '').trim();
|
|
2935
|
+
if (dcRaw === '/version' || dcRaw.startsWith('/version ')) {
|
|
2936
|
+
versionText(true)
|
|
2937
|
+
.then((txt) => sendDcSafe(channelId, txt))
|
|
2938
|
+
.catch(() => {});
|
|
2939
|
+
return;
|
|
2940
|
+
}
|
|
2857
2941
|
/* OPENCODE STEER: meşgulse bekleme — engine.send tampona ekler, koşan tur
|
|
2858
2942
|
sonraki istekte görür (WA/TG ile aynı mantık) */
|
|
2859
2943
|
let sid = dcChats.get(channelId) || dcSingleSid;
|
|
@@ -3413,6 +3497,12 @@ app.whenReady().then(() => {
|
|
|
3413
3497
|
ensureDc().start().catch((e) => dcLog('autostart failed: ' + String((e && e.message) || e)));
|
|
3414
3498
|
}
|
|
3415
3499
|
|
|
3500
|
+
/* SÜRÜM GÜNCELLENDİYSE ilk açılışta bilgi: kanalların bağlanmasına 5 sn tanı,
|
|
3501
|
+
sonra kullanıcının olduğu yere (en güncel oturum + bağlı kanal) düşer */
|
|
3502
|
+
setTimeout(() => {
|
|
3503
|
+
try { notifyVersionUpdate(); } catch {}
|
|
3504
|
+
}, 5000);
|
|
3505
|
+
|
|
3416
3506
|
app.on('activate', () => {
|
|
3417
3507
|
if (BrowserWindow.getAllWindows().length === 0) createWindow();
|
|
3418
3508
|
});
|
|
@@ -4808,7 +4898,10 @@ ipcMain.handle('agent:send', (_e, { sessionId, text }) => {
|
|
|
4808
4898
|
return true;
|
|
4809
4899
|
}
|
|
4810
4900
|
if (t === '/version') {
|
|
4811
|
-
|
|
4901
|
+
/* npm registry'den en son sürümü de göster (10dk cache'li) */
|
|
4902
|
+
versionText(false)
|
|
4903
|
+
.then((txt) => desktopEcho(sessionId, t, txt))
|
|
4904
|
+
.catch(() => desktopEcho(sessionId, t, `**Beast Agent v${beastVersion()}**`));
|
|
4812
4905
|
return true;
|
|
4813
4906
|
}
|
|
4814
4907
|
if (t === '/help') {
|