beast-agent 1.9.0 → 2.0.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/LICENSE +21 -21
- package/README.md +130 -130
- package/bin/beast-agent.js +137 -137
- package/package.json +1 -1
- package/scripts/fix-electron.js +138 -138
- package/scripts/release.js +137 -131
- package/scripts/swap-electron.js +40 -40
- package/src/agent/agentdefs.js +122 -122
- package/src/agent/bots.js +580 -580
- package/src/agent/bus.js +389 -389
- package/src/agent/computeruse.js +200 -200
- package/src/agent/config.js +284 -284
- package/src/agent/discord.js +332 -332
- package/src/agent/engine.js +75 -10
- package/src/agent/kb.js +123 -123
- package/src/agent/llm.js +430 -430
- package/src/agent/logger.js +90 -90
- package/src/agent/mcp.js +427 -427
- package/src/agent/mem0.js +605 -605
- package/src/agent/memory.js +427 -427
- package/src/agent/mqueue.js +124 -124
- package/src/agent/pdf.js +20 -20
- package/src/agent/research.js +133 -133
- package/src/agent/scripts/news.py +113 -113
- package/src/agent/scripts/stealthsearch.py +30 -30
- package/src/agent/scripts/websearch.py +225 -225
- package/src/agent/searxng.js +325 -325
- package/src/agent/seeds/brainstorming/SKILL.md +90 -90
- package/src/agent/seeds/dispatching-parallel-agents/SKILL.md +120 -120
- package/src/agent/seeds/executing-plans/SKILL.md +60 -60
- package/src/agent/seeds/subagent-driven-development/SKILL.md +167 -167
- package/src/agent/seeds/systematic-debugging/SKILL.md +131 -131
- package/src/agent/seeds/test-driven-development/SKILL.md +152 -152
- package/src/agent/seeds/verification-before-completion/SKILL.md +63 -63
- package/src/agent/seeds/writing-plans/SKILL.md +162 -162
- package/src/agent/seeds/writing-skills/SKILL.md +229 -229
- package/src/agent/skills.js +652 -652
- package/src/agent/store.js +378 -378
- package/src/agent/telegram.js +155 -155
- package/src/agent/tokens.js +39 -39
- package/src/agent/usage.js +125 -125
- package/src/agent/watchers.js +312 -312
- package/src/agent/watext.js +80 -80
- package/src/agent/whatsapp.js +555 -555
- package/src/cron.js +255 -255
- package/src/main.js +348 -6
- package/src/preload.js +9 -0
- package/src/renderer/browserPreload.js +73 -73
- package/src/renderer/i18n.js +4 -0
- package/src/renderer/index.html +448 -409
- package/src/renderer/renderer.js +824 -41
- package/src/renderer/style.css +264 -5
package/src/agent/watext.js
CHANGED
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/* WhatsApp metin yardımcıları: model çıktısının markdown süslerini
|
|
4
|
-
temizleme + araç kullanımı için kısa durum satırları. Saf fonksiyonlar. */
|
|
5
|
-
|
|
6
|
-
/* Model çıktısını WhatsApp'a uygun sade metne çevir:
|
|
7
|
-
**kalın**, *vurgu*, _italik_, #başlık, `kod`, [link](url), --- çizgiler temizlenir;
|
|
8
|
-
liste maddeleri "• " olur; snake_case içindeki alt çizgi korunur. */
|
|
9
|
-
function waCleanText(md) {
|
|
10
|
-
let t = String(md || '');
|
|
11
|
-
/* #16: tüm markdown süsleri (bold/italik/başlık/işaret) düz metne iner */
|
|
12
|
-
t = t.replace(/```[a-zA-Z0-9_-]*\r?\n?/g, '');
|
|
13
|
-
t = t.replace(/`([^`\n]*)`/g, '$1');
|
|
14
|
-
t = t.replace(/\*\*\*([^*\n]+)\*\*\*/g, '$1');
|
|
15
|
-
t = t.replace(/\*\*([^*\n]+)\*\*/g, '$1');
|
|
16
|
-
t = t.replace(/^\s{0,3}#{1,6}\s*(.+)$/gm, '$1');
|
|
17
|
-
/* satırbaşı liste işaretleri madde imine döner (kalın işareti değil) */
|
|
18
|
-
t = t.replace(/^[ \t]*\*[ \t]+/gm, '\u2022 ');
|
|
19
|
-
t = t.replace(/\*/g, '');
|
|
20
|
-
t = t.replace(/^#{1,6}\s*/gm, '');
|
|
21
|
-
t = t.replace(/#/g, '');
|
|
22
|
-
t = t.replace(/(^|[\s(>])_([^_\n]+)_(?=$|[\s).,!?;:])/g, '$1$2');
|
|
23
|
-
t = t.replace(/^\s*>+\s?/gm, '');
|
|
24
|
-
t = t.replace(/^\s*[-+]\s+/gm, '\u2022 ');
|
|
25
|
-
t = t.replace(/^[ \t]*[_\-=]{3,}[ \t]*\r?\n?/gm, '');
|
|
26
|
-
t = t.replace(/\[([^\]\n]+)\]\((https?:\/\/[^)\s]+)\)/g, '$1 ($2)');
|
|
27
|
-
t = t.replace(/[ \t]+$/gm, '');
|
|
28
|
-
t = t.replace(/\n{3,}/g, '\n\n');
|
|
29
|
-
return t.trim();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/* Araç adı + argümanlardan tek satırlık durum metni — düz metin (#16: işaretsiz) */
|
|
33
|
-
const TOOL_LABELS = {
|
|
34
|
-
run_command: (a) => `Terminal: ${String(a.command || '').replace(/\s+/g, ' ').trim().slice(0, 140)}`,
|
|
35
|
-
read_file: (a) => `Dosya oku: ${a.path || ''}`,
|
|
36
|
-
write_file: (a) => `Dosya yaz: ${a.path || ''}`,
|
|
37
|
-
list_dir: (a) => `Klasör: ${a.path || '.'}`,
|
|
38
|
-
web_search: (a) => `Web arama: ${String(a.query || '').slice(0, 100)}`,
|
|
39
|
-
deep_search: (a) => {
|
|
40
|
-
const qs = Array.isArray(a.queries) ? a.queries : [a.query || ''];
|
|
41
|
-
return `Derin araştırma (${qs.length} sorgu): ${String(qs[0] || '').slice(0, 80)}`;
|
|
42
|
-
},
|
|
43
|
-
http_fetch: (a) => `Sayfa: ${a.url || ''}`,
|
|
44
|
-
browser_open: (a) => `Tarayıcı aç: ${a.url || ''}`,
|
|
45
|
-
browser_click: (a) => `Tıkla: ${a.ref ?? ''}`,
|
|
46
|
-
browser_type: (a) => `Yaz: ${String(a.text || '').slice(0, 60)}`,
|
|
47
|
-
browser_select: (a) => `Seç: ${a.ref ?? ''}`,
|
|
48
|
-
browser_navigate: (a) => `Git: ${a.url || ''}`,
|
|
49
|
-
browser_screenshot: () => 'Ekran görüntüsü',
|
|
50
|
-
browser_snapshot: () => 'Sayfa yapısı',
|
|
51
|
-
browser_read_text: () => 'Sayfa metni',
|
|
52
|
-
email_list: () => 'E-posta listesi',
|
|
53
|
-
email_read: (a) => `E-posta oku: ${a.uid ?? ''}`,
|
|
54
|
-
email_send: () => 'E-posta gönder',
|
|
55
|
-
memory_write: (a) => `Hafıza: ${String(a.text || '').slice(0, 60)}`,
|
|
56
|
-
user_write: (a) => `Kullanıcı bilgisi: ${String(a.text || '').slice(0, 60)}`,
|
|
57
|
-
memory_search: (a) => `Hafıza ara: ${String(a.query || '').slice(0, 60)}`,
|
|
58
|
-
todo_write: (a) => `Görev listesi (${(a.todos || []).length})`,
|
|
59
|
-
delegate_task: (a) => `Alt görev: ${String(a.task || '').slice(0, 80)}`,
|
|
60
|
-
set_reminder: (a) => `Hatırlatma${a.repeat ? ' [' + a.repeat + ']' : ''}: ${String(a.message || '').slice(0, 60)}`,
|
|
61
|
-
watcher_add: (a) => `İzleyici kur: ${a.name || ''}`,
|
|
62
|
-
watcher_list: () => 'İzleyiciler',
|
|
63
|
-
watcher_remove: (a) => `İzleyici sil: ${a.id || ''}`,
|
|
64
|
-
event_subscribe: (a) => `Olay aboneliği: ${a.type || ''}`,
|
|
65
|
-
event_list: () => 'Olay abonelikleri',
|
|
66
|
-
event_unsubscribe: (a) => `Abonelik sil: ${a.id || ''}`,
|
|
67
|
-
kb_add: (a) => `Bilgi ekle: ${String(a.title || '').slice(0, 60)}`,
|
|
68
|
-
kb_search: (a) => `Bilgi ara: ${String(a.query || '').slice(0, 60)}`,
|
|
69
|
-
memory_hygiene: () => 'Hafıza temizliği',
|
|
70
|
-
computer_look: () => 'Ekranı görüntülüyor',
|
|
71
|
-
computer_act: (a) => `Bilgisayar kullanıyor: ${a.op || ''}${a.combo ? ' ' + a.combo : ''}`,
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
function waToolLine(name, args) {
|
|
75
|
-
const f = TOOL_LABELS[name];
|
|
76
|
-
const body = f ? f(args || {}) : String(name);
|
|
77
|
-
return `\u203A ${body}`;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
module.exports = { waCleanText, waToolLine };
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/* WhatsApp metin yardımcıları: model çıktısının markdown süslerini
|
|
4
|
+
temizleme + araç kullanımı için kısa durum satırları. Saf fonksiyonlar. */
|
|
5
|
+
|
|
6
|
+
/* Model çıktısını WhatsApp'a uygun sade metne çevir:
|
|
7
|
+
**kalın**, *vurgu*, _italik_, #başlık, `kod`, [link](url), --- çizgiler temizlenir;
|
|
8
|
+
liste maddeleri "• " olur; snake_case içindeki alt çizgi korunur. */
|
|
9
|
+
function waCleanText(md) {
|
|
10
|
+
let t = String(md || '');
|
|
11
|
+
/* #16: tüm markdown süsleri (bold/italik/başlık/işaret) düz metne iner */
|
|
12
|
+
t = t.replace(/```[a-zA-Z0-9_-]*\r?\n?/g, '');
|
|
13
|
+
t = t.replace(/`([^`\n]*)`/g, '$1');
|
|
14
|
+
t = t.replace(/\*\*\*([^*\n]+)\*\*\*/g, '$1');
|
|
15
|
+
t = t.replace(/\*\*([^*\n]+)\*\*/g, '$1');
|
|
16
|
+
t = t.replace(/^\s{0,3}#{1,6}\s*(.+)$/gm, '$1');
|
|
17
|
+
/* satırbaşı liste işaretleri madde imine döner (kalın işareti değil) */
|
|
18
|
+
t = t.replace(/^[ \t]*\*[ \t]+/gm, '\u2022 ');
|
|
19
|
+
t = t.replace(/\*/g, '');
|
|
20
|
+
t = t.replace(/^#{1,6}\s*/gm, '');
|
|
21
|
+
t = t.replace(/#/g, '');
|
|
22
|
+
t = t.replace(/(^|[\s(>])_([^_\n]+)_(?=$|[\s).,!?;:])/g, '$1$2');
|
|
23
|
+
t = t.replace(/^\s*>+\s?/gm, '');
|
|
24
|
+
t = t.replace(/^\s*[-+]\s+/gm, '\u2022 ');
|
|
25
|
+
t = t.replace(/^[ \t]*[_\-=]{3,}[ \t]*\r?\n?/gm, '');
|
|
26
|
+
t = t.replace(/\[([^\]\n]+)\]\((https?:\/\/[^)\s]+)\)/g, '$1 ($2)');
|
|
27
|
+
t = t.replace(/[ \t]+$/gm, '');
|
|
28
|
+
t = t.replace(/\n{3,}/g, '\n\n');
|
|
29
|
+
return t.trim();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Araç adı + argümanlardan tek satırlık durum metni — düz metin (#16: işaretsiz) */
|
|
33
|
+
const TOOL_LABELS = {
|
|
34
|
+
run_command: (a) => `Terminal: ${String(a.command || '').replace(/\s+/g, ' ').trim().slice(0, 140)}`,
|
|
35
|
+
read_file: (a) => `Dosya oku: ${a.path || ''}`,
|
|
36
|
+
write_file: (a) => `Dosya yaz: ${a.path || ''}`,
|
|
37
|
+
list_dir: (a) => `Klasör: ${a.path || '.'}`,
|
|
38
|
+
web_search: (a) => `Web arama: ${String(a.query || '').slice(0, 100)}`,
|
|
39
|
+
deep_search: (a) => {
|
|
40
|
+
const qs = Array.isArray(a.queries) ? a.queries : [a.query || ''];
|
|
41
|
+
return `Derin araştırma (${qs.length} sorgu): ${String(qs[0] || '').slice(0, 80)}`;
|
|
42
|
+
},
|
|
43
|
+
http_fetch: (a) => `Sayfa: ${a.url || ''}`,
|
|
44
|
+
browser_open: (a) => `Tarayıcı aç: ${a.url || ''}`,
|
|
45
|
+
browser_click: (a) => `Tıkla: ${a.ref ?? ''}`,
|
|
46
|
+
browser_type: (a) => `Yaz: ${String(a.text || '').slice(0, 60)}`,
|
|
47
|
+
browser_select: (a) => `Seç: ${a.ref ?? ''}`,
|
|
48
|
+
browser_navigate: (a) => `Git: ${a.url || ''}`,
|
|
49
|
+
browser_screenshot: () => 'Ekran görüntüsü',
|
|
50
|
+
browser_snapshot: () => 'Sayfa yapısı',
|
|
51
|
+
browser_read_text: () => 'Sayfa metni',
|
|
52
|
+
email_list: () => 'E-posta listesi',
|
|
53
|
+
email_read: (a) => `E-posta oku: ${a.uid ?? ''}`,
|
|
54
|
+
email_send: () => 'E-posta gönder',
|
|
55
|
+
memory_write: (a) => `Hafıza: ${String(a.text || '').slice(0, 60)}`,
|
|
56
|
+
user_write: (a) => `Kullanıcı bilgisi: ${String(a.text || '').slice(0, 60)}`,
|
|
57
|
+
memory_search: (a) => `Hafıza ara: ${String(a.query || '').slice(0, 60)}`,
|
|
58
|
+
todo_write: (a) => `Görev listesi (${(a.todos || []).length})`,
|
|
59
|
+
delegate_task: (a) => `Alt görev: ${String(a.task || '').slice(0, 80)}`,
|
|
60
|
+
set_reminder: (a) => `Hatırlatma${a.repeat ? ' [' + a.repeat + ']' : ''}: ${String(a.message || '').slice(0, 60)}`,
|
|
61
|
+
watcher_add: (a) => `İzleyici kur: ${a.name || ''}`,
|
|
62
|
+
watcher_list: () => 'İzleyiciler',
|
|
63
|
+
watcher_remove: (a) => `İzleyici sil: ${a.id || ''}`,
|
|
64
|
+
event_subscribe: (a) => `Olay aboneliği: ${a.type || ''}`,
|
|
65
|
+
event_list: () => 'Olay abonelikleri',
|
|
66
|
+
event_unsubscribe: (a) => `Abonelik sil: ${a.id || ''}`,
|
|
67
|
+
kb_add: (a) => `Bilgi ekle: ${String(a.title || '').slice(0, 60)}`,
|
|
68
|
+
kb_search: (a) => `Bilgi ara: ${String(a.query || '').slice(0, 60)}`,
|
|
69
|
+
memory_hygiene: () => 'Hafıza temizliği',
|
|
70
|
+
computer_look: () => 'Ekranı görüntülüyor',
|
|
71
|
+
computer_act: (a) => `Bilgisayar kullanıyor: ${a.op || ''}${a.combo ? ' ' + a.combo : ''}`,
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
function waToolLine(name, args) {
|
|
75
|
+
const f = TOOL_LABELS[name];
|
|
76
|
+
const body = f ? f(args || {}) : String(name);
|
|
77
|
+
return `\u203A ${body}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
module.exports = { waCleanText, waToolLine };
|