beast-agent 1.4.0 → 1.4.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 +1 -1
- package/src/main.js +49 -36
- package/src/renderer/renderer.js +24 -0
package/package.json
CHANGED
package/src/main.js
CHANGED
|
@@ -316,36 +316,24 @@ function waRememberSession(jid, sid) {
|
|
|
316
316
|
/beastagent → normal sohbet oturumuna geri dönülür. */
|
|
317
317
|
|
|
318
318
|
function waBcWorkspace() {
|
|
319
|
-
|
|
319
|
+
/* masaüstü Beast Code paneliyle AYNI klasör — WhatsApp'tan yazınca
|
|
320
|
+
panelde aynı dosyalar canlı görünür */
|
|
321
|
+
const dir = ideRoot();
|
|
320
322
|
try { fs.mkdirSync(dir, { recursive: true }); } catch {}
|
|
321
323
|
return dir;
|
|
322
324
|
}
|
|
323
325
|
|
|
324
|
-
/* Sohbetin Beast Code oturumu:
|
|
326
|
+
/* Sohbetin Beast Code oturumu: masaüstü paneliyle AYNI oturum (klasör bazlı
|
|
327
|
+
bcGetSession) — WhatsApp'tan yazılan sohbet, masaüstü Beast Code panelinde
|
|
328
|
+
canlı akar; panelde yazılan da WhatsApp'a düşer */
|
|
325
329
|
function waBcSession(jid) {
|
|
326
|
-
const
|
|
327
|
-
if (
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
330
|
+
const s = bcGetSession(waBcWorkspace());
|
|
331
|
+
if (waChats.get(jid) !== s.id) {
|
|
332
|
+
waChats.set(jid, s.id);
|
|
333
|
+
waRememberSession(jid, s.id);
|
|
334
|
+
saveWaChats();
|
|
335
|
+
if (wa) wa.setWatchJids([...waChats.keys()]);
|
|
332
336
|
}
|
|
333
|
-
const s = engine._load(engine.createSession().id);
|
|
334
|
-
s.messages = s.messages || [];
|
|
335
|
-
s.bgTitle = 'Beast Code (WA)'; /* sohbet geçmişi listesinde etiketli görünür */
|
|
336
|
-
s.bcCode = true; /* engine: BEAST CODE MODU bloğu + todo disiplini */
|
|
337
|
-
s.workspace = waBcWorkspace();
|
|
338
|
-
engine.cache.set(s.id, s);
|
|
339
|
-
try {
|
|
340
|
-
fs.appendFileSync(
|
|
341
|
-
engine._file(s.id),
|
|
342
|
-
JSON.stringify({ t: 'meta2', bgOf: '', title: 'Beast Code (WA)', at: new Date().toISOString() }) + '\n'
|
|
343
|
-
);
|
|
344
|
-
} catch {}
|
|
345
|
-
waChats.set(jid, s.id);
|
|
346
|
-
waRememberSession(jid, s.id);
|
|
347
|
-
saveWaChats();
|
|
348
|
-
if (wa) wa.setWatchJids([...waChats.keys()]);
|
|
349
337
|
return s;
|
|
350
338
|
}
|
|
351
339
|
|
|
@@ -701,8 +689,8 @@ function waSlashHelp() {
|
|
|
701
689
|
'• */new* – yeni oturum aç (kod verilir)',
|
|
702
690
|
'• */open* <kod> – o koddaki oturuma geç',
|
|
703
691
|
'• */sessions* – bu sohbetin oturumları',
|
|
704
|
-
'• */beastcode* [görev] – ⚡ UZAKTAN KODLAMA
|
|
705
|
-
'• */beastagent* – kodlama
|
|
692
|
+
'• */beastcode* [görev] – ⚡ UZAKTAN KODLAMA: masaüstünde Beast Code paneli açılır, WhatsApp\u2019tan uygulama yazdır (örn: /beastcode hava durumu uygulaması yaz)',
|
|
693
|
+
'• */beastagent* – kodlama modunu kapat, masaüstünde chat ekranına dön',
|
|
706
694
|
'• */plan* · */build* · */auto* – BeastCode modunda çalışma modu (planla · uygula · otomatik)',
|
|
707
695
|
'• */stop* – koşan işleri durdur (ajanlar+turlar; cron/izleyici/olay sürer)',
|
|
708
696
|
'• */start* – durdurulan servisleri devam ettir',
|
|
@@ -1201,29 +1189,31 @@ async function tryWaSlash(jid, rawText, senderNum, payload0) {
|
|
|
1201
1189
|
`*İzleyici:* ${watchers.list().length} adet\n*Cron:* ${jobs} aktif görev`;
|
|
1202
1190
|
} else if (cmd === 'beastcode') {
|
|
1203
1191
|
/* /beastcode [görev] — WhatsApp'tan UZAKTAN KODLAMA modu:
|
|
1204
|
-
|
|
1192
|
+
masaüstünde GERÇEK Beast Code paneli açılır (IDE ekranı), sohbet
|
|
1193
|
+
panel oturumuyla birleşir; yazılanlar panelde canlı akar */
|
|
1205
1194
|
const s = waBcSession(jid);
|
|
1206
1195
|
waBcMode.add(jid);
|
|
1207
1196
|
saveWaChats();
|
|
1208
|
-
emitWaEventSafe({ type: 'bc-
|
|
1197
|
+
emitWaEventSafe({ type: 'bc-screen', on: true, sessionId: s.id, workspace: s.workspace || waBcWorkspace() });
|
|
1209
1198
|
if (arg) {
|
|
1210
1199
|
/* görev normal WA akışına verilir — meşgulse bekleme-kuyruğu devrede */
|
|
1211
1200
|
waQueuePush(jid, { text: arg, isGroup: !!(payload0 && payload0.isGroup) }, senderNum);
|
|
1212
1201
|
out =
|
|
1213
|
-
`*⚡ BEASTCODE MODU — görev alındı, yazıyorum.*\n` +
|
|
1214
|
-
`
|
|
1202
|
+
`*⚡ BEASTCODE MODU AÇILDI — görev alındı, yazıyorum.*\n` +
|
|
1203
|
+
`Bilgisayarda Beast Code paneli açıldı: \`${s.workspace || waBcWorkspace()}\`\n` +
|
|
1215
1204
|
`Mod değiştir: \`/plan\` (sadece plan) · \`/build\` (uygula) · \`/auto\`\n` +
|
|
1216
1205
|
`Sohbete dönmek için: /beastagent`;
|
|
1217
1206
|
} else {
|
|
1218
1207
|
out =
|
|
1219
|
-
`*⚡ BEASTCODE MODU
|
|
1220
|
-
`
|
|
1221
|
-
`
|
|
1208
|
+
`*⚡ BEASTCODE MODU AÇILDI*\n` +
|
|
1209
|
+
`Bilgisayarda Beast Code paneli açıldı — çalışma klasörü: \`${s.workspace || waBcWorkspace()}\`\n` +
|
|
1210
|
+
`Ne yazarsan UYGULAMA olarak yaparım: dosyalar yazar, komut çalıştırır, doğrular.\n` +
|
|
1222
1211
|
`İlk görevi yaz — örn: "todo listesi uygulaması yaz"\n` +
|
|
1223
1212
|
`Sohbete dönmek için: /beastagent`;
|
|
1224
1213
|
}
|
|
1225
1214
|
} else if (cmd === 'beastagent') {
|
|
1226
|
-
/* /beastagent — kodlama modundan normal sohbete dön
|
|
1215
|
+
/* /beastagent — kodlama modundan normal sohbete dön; masaüstünde
|
|
1216
|
+
Beast Code paneli kapanır, chat ekranı geri gelir */
|
|
1227
1217
|
if (!waBcMode.has(jid)) {
|
|
1228
1218
|
out = 'Zaten sohbet modundasın — kodlamak için /beastcode yaz.';
|
|
1229
1219
|
} else {
|
|
@@ -1237,9 +1227,9 @@ async function tryWaSlash(jid, rawText, senderNum, payload0) {
|
|
|
1237
1227
|
waRememberSession(jid, v.id);
|
|
1238
1228
|
saveWaChats();
|
|
1239
1229
|
if (wa) wa.setWatchJids([...waChats.keys()]);
|
|
1240
|
-
emitWaEventSafe({ type: 'bc-
|
|
1230
|
+
emitWaEventSafe({ type: 'bc-screen', on: false });
|
|
1241
1231
|
out =
|
|
1242
|
-
`*💬 Sohbet moduna dönüldü* — yeni oturum \`${v.code}\`.\n` +
|
|
1232
|
+
`*💬 Sohbet moduna dönüldü* — masaüstünde chat ekranı açıldı, yeni oturum \`${v.code}\`.\n` +
|
|
1243
1233
|
`Kodlar duruyor: \`${waBcWorkspace()}\`\n` +
|
|
1244
1234
|
`Tekrar kodlamak için: /beastcode`;
|
|
1245
1235
|
}
|
|
@@ -2019,6 +2009,29 @@ async function processWaMessage(jid, payload, senderNum, requeues = 0) {
|
|
|
2019
2009
|
}
|
|
2020
2010
|
|
|
2021
2011
|
if (payload.text) text += `\n${String(payload.text).slice(0, 6000)}`;
|
|
2012
|
+
/* BEASTCODE MODU: WA'dan gelen kullanıcı mesajını masaüstü panelde de göster.
|
|
2013
|
+
Ajan cevabı engine olaylarıyla zaten panele akar ama KULLANICI mesajı için
|
|
2014
|
+
engine olay üretmez (panel kendi input'undan "code>" satırı basar) — bu
|
|
2015
|
+
yüzden açıkça bildiriyoruz; yoksa WhatsApp'tan yazılanlar panelde görünmez. */
|
|
2016
|
+
if (waBcMode.has(jid) && win && !win.isDestroyed()) {
|
|
2017
|
+
const waEcho = [];
|
|
2018
|
+
if (payload.text) waEcho.push(String(payload.text).slice(0, 6000));
|
|
2019
|
+
if (attachments.length) {
|
|
2020
|
+
waEcho.push(
|
|
2021
|
+
'[' +
|
|
2022
|
+
attachments
|
|
2023
|
+
.map((a) => (a.type === 'image' ? 'resim' : 'dosya: ' + (a.name || '?')))
|
|
2024
|
+
.join(', ') +
|
|
2025
|
+
']'
|
|
2026
|
+
);
|
|
2027
|
+
}
|
|
2028
|
+
win.webContents.send('agent:event', {
|
|
2029
|
+
sessionId: sid,
|
|
2030
|
+
type: 'wa-user',
|
|
2031
|
+
from: isGroup ? (groupSender || 'grup üyesi') : (hit && hit.name) || '+' + (senderNum || '?'),
|
|
2032
|
+
text: waEcho.join('\n'),
|
|
2033
|
+
});
|
|
2034
|
+
}
|
|
2022
2035
|
engine.send(sid, { text: text.slice(0, 8000), attachments });
|
|
2023
2036
|
}
|
|
2024
2037
|
|
package/src/renderer/renderer.js
CHANGED
|
@@ -1844,6 +1844,23 @@ function onWaEvent(ev) {
|
|
|
1844
1844
|
if (!els.settingsOverlay.hidden && setTab === 'integrations') renderIntegrationsPane();
|
|
1845
1845
|
return;
|
|
1846
1846
|
}
|
|
1847
|
+
if (ev.type === 'bc-screen') {
|
|
1848
|
+
/* WA'dan /beastcode → masaüstünde GERÇEK Beast Code paneli açılır;
|
|
1849
|
+
/beastagent → chat ekranına dönülür. Panel, WA oturumuna bağlanır:
|
|
1850
|
+
WhatsApp'tan yazılan sohbet canlı olarak panelde akar. */
|
|
1851
|
+
setIdeMode(!!ev.on);
|
|
1852
|
+
if (ev.on) {
|
|
1853
|
+
if (ev.sessionId) bcSessionId = ev.sessionId;
|
|
1854
|
+
bcSetBusy(false);
|
|
1855
|
+
if (ev.workspace) bcLine('t-sys', '[WhatsApp — Beast Code modu açıldı · ' + ev.workspace + ']');
|
|
1856
|
+
else bcLine('t-sys', '[WhatsApp — Beast Code modu açıldı]');
|
|
1857
|
+
} else {
|
|
1858
|
+
if (bcSessionId) bcSessionId = null;
|
|
1859
|
+
bcSetBusy(false);
|
|
1860
|
+
bcStatusHide();
|
|
1861
|
+
}
|
|
1862
|
+
return;
|
|
1863
|
+
}
|
|
1847
1864
|
if (ev.type === 'queue') {
|
|
1848
1865
|
/* FEATURE 2: offline kuyruk bildirimi — toast + paneldeki sayaç */
|
|
1849
1866
|
if (ev.text) toast(ev.text);
|
|
@@ -6817,6 +6834,13 @@ function bcNoteStream(delta) {
|
|
|
6817
6834
|
/* Beast Code oturumunun engine olayları → panel çıktısı */
|
|
6818
6835
|
function bcIngest(ev) {
|
|
6819
6836
|
switch (ev.type) {
|
|
6837
|
+
case 'wa-user':
|
|
6838
|
+
/* WhatsApp'tan gelen kullanıcı mesajı panelde görünür — ajan cevabı
|
|
6839
|
+
zaten akar; bu olay kullanıcının KENDİ yazdığını gösterir */
|
|
6840
|
+
bcFlushStream();
|
|
6841
|
+
bcCloseToolGroup();
|
|
6842
|
+
bcLine('t-cmd', '📱 ' + (ev.from || 'WhatsApp') + '» ' + (ev.text || ''));
|
|
6843
|
+
break;
|
|
6820
6844
|
case 'token':
|
|
6821
6845
|
/* grup açıksa ara not (kutu içi); değilse normal akış */
|
|
6822
6846
|
if (bcNoteStream(ev.delta)) break;
|