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.
Files changed (52) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +130 -130
  3. package/bin/beast-agent.js +137 -137
  4. package/package.json +1 -1
  5. package/scripts/fix-electron.js +138 -138
  6. package/scripts/release.js +137 -131
  7. package/scripts/swap-electron.js +40 -40
  8. package/src/agent/agentdefs.js +122 -122
  9. package/src/agent/bots.js +580 -580
  10. package/src/agent/bus.js +389 -389
  11. package/src/agent/computeruse.js +200 -200
  12. package/src/agent/config.js +284 -284
  13. package/src/agent/discord.js +332 -332
  14. package/src/agent/engine.js +75 -10
  15. package/src/agent/kb.js +123 -123
  16. package/src/agent/llm.js +430 -430
  17. package/src/agent/logger.js +90 -90
  18. package/src/agent/mcp.js +427 -427
  19. package/src/agent/mem0.js +605 -605
  20. package/src/agent/memory.js +427 -427
  21. package/src/agent/mqueue.js +124 -124
  22. package/src/agent/pdf.js +20 -20
  23. package/src/agent/research.js +133 -133
  24. package/src/agent/scripts/news.py +113 -113
  25. package/src/agent/scripts/stealthsearch.py +30 -30
  26. package/src/agent/scripts/websearch.py +225 -225
  27. package/src/agent/searxng.js +325 -325
  28. package/src/agent/seeds/brainstorming/SKILL.md +90 -90
  29. package/src/agent/seeds/dispatching-parallel-agents/SKILL.md +120 -120
  30. package/src/agent/seeds/executing-plans/SKILL.md +60 -60
  31. package/src/agent/seeds/subagent-driven-development/SKILL.md +167 -167
  32. package/src/agent/seeds/systematic-debugging/SKILL.md +131 -131
  33. package/src/agent/seeds/test-driven-development/SKILL.md +152 -152
  34. package/src/agent/seeds/verification-before-completion/SKILL.md +63 -63
  35. package/src/agent/seeds/writing-plans/SKILL.md +162 -162
  36. package/src/agent/seeds/writing-skills/SKILL.md +229 -229
  37. package/src/agent/skills.js +652 -652
  38. package/src/agent/store.js +378 -378
  39. package/src/agent/telegram.js +155 -155
  40. package/src/agent/tokens.js +39 -39
  41. package/src/agent/usage.js +125 -125
  42. package/src/agent/watchers.js +312 -312
  43. package/src/agent/watext.js +80 -80
  44. package/src/agent/whatsapp.js +555 -555
  45. package/src/cron.js +255 -255
  46. package/src/main.js +348 -6
  47. package/src/preload.js +9 -0
  48. package/src/renderer/browserPreload.js +73 -73
  49. package/src/renderer/i18n.js +4 -0
  50. package/src/renderer/index.html +448 -409
  51. package/src/renderer/renderer.js +824 -41
  52. package/src/renderer/style.css +264 -5
@@ -1,90 +1,90 @@
1
- 'use strict';
2
-
3
- /* Merkezî log sistemi:
4
- - Günlük dosyalar: %APPDATA%\beast\logs\beast-YYYY-MM-DD.log
5
- - Bellekte ring buffer (UI'da hızlı gösterim için)
6
- - 14 günden eski günlük dosyaları saatlik temizlikle silinir
7
- Kullanım: const log = require('./logger'); log.info('wa', 'bağlandı'); */
8
-
9
- const fs = require('fs');
10
- const path = require('path');
11
- const os = require('os');
12
-
13
- const ROOT = process.env.APPDATA
14
- ? path.join(process.env.APPDATA, 'beast')
15
- : path.join(os.homedir(), 'AppData', 'Roaming', 'beast');
16
- const LOG_DIR = path.join(ROOT, 'logs');
17
- const KEEP_DAYS = 14;
18
- const RING_MAX = 1000;
19
-
20
- const ring = [];
21
- let lastCleanup = 0;
22
-
23
- function fileFor(d) {
24
- const t = d || new Date();
25
- const p = (n) => String(n).padStart(2, '0');
26
- return path.join(LOG_DIR, `beast-${t.getFullYear()}-${p(t.getMonth() + 1)}-${p(t.getDate())}.log`);
27
- }
28
-
29
- function cleanup() {
30
- const now = Date.now();
31
- if (now - lastCleanup < 60 * 60 * 1000) return;
32
- lastCleanup = now;
33
- try {
34
- for (const f of fs.readdirSync(LOG_DIR)) {
35
- const m = /^beast-(\d{4})-(\d{2})-(\d{2})\.log$/.exec(f);
36
- if (!m) continue;
37
- const age = (now - Date.UTC(Number(m[1]), Number(m[2]) - 1, Number(m[3]))) / 86400000;
38
- if (age > KEEP_DAYS) { try { fs.unlinkSync(path.join(LOG_DIR, f)); } catch {} }
39
- }
40
- } catch {}
41
- }
42
-
43
- function write(level, tag, msg) {
44
- const line =
45
- `[${new Date().toISOString()}] [${String(level).toUpperCase()}] [${tag}] ` +
46
- String(msg == null ? '' : msg).replace(/\r?\n/g, ' | ').slice(0, 4000);
47
- ring.push(line);
48
- if (ring.length > RING_MAX) ring.splice(0, ring.length - RING_MAX);
49
- try {
50
- fs.mkdirSync(LOG_DIR, { recursive: true });
51
- cleanup();
52
- fs.appendFileSync(fileFor(), line + '\n');
53
- } catch {}
54
- return line;
55
- }
56
-
57
- const info = (tag, msg) => write('info', tag, msg);
58
- const warn = (tag, msg) => write('warn', tag, msg);
59
- const error = (tag, msg) => write('error', tag, msg);
60
-
61
- /* Bugün + dünün son n satırı (UI ve hata raporları için) */
62
- function tail(n = 300) {
63
- const lines = [];
64
- try { lines.push(...fs.readFileSync(fileFor(new Date(Date.now() - 86400000)), 'utf8').split('\n')); } catch {}
65
- try { lines.push(...fs.readFileSync(fileFor(), 'utf8').split('\n')); } catch {}
66
- return lines.filter((l) => l.trim()).slice(-Math.max(1, Number(n) || 300));
67
- }
68
-
69
- function dir() {
70
- try { fs.mkdirSync(LOG_DIR, { recursive: true }); } catch {}
71
- return LOG_DIR;
72
- }
73
-
74
- function recent() {
75
- return ring.slice(-200);
76
- }
77
-
78
- function clear() {
79
- try { ring.length = 0; } catch {}
80
- /* tail() bugün + dünün dosyasını okur; ikisini de boşalt ki
81
- UI'daki "Logları Temizle" gerçekten temizlesin */
82
- try {
83
- for (const d of [new Date(), new Date(Date.now() - 86400000)]) {
84
- try { fs.writeFileSync(fileFor(d), ''); } catch {}
85
- }
86
- } catch {}
87
- return true;
88
- }
89
-
90
- module.exports = { info, warn, error, tail, dir, recent, clear, LOG_DIR };
1
+ 'use strict';
2
+
3
+ /* Merkezî log sistemi:
4
+ - Günlük dosyalar: %APPDATA%\beast\logs\beast-YYYY-MM-DD.log
5
+ - Bellekte ring buffer (UI'da hızlı gösterim için)
6
+ - 14 günden eski günlük dosyaları saatlik temizlikle silinir
7
+ Kullanım: const log = require('./logger'); log.info('wa', 'bağlandı'); */
8
+
9
+ const fs = require('fs');
10
+ const path = require('path');
11
+ const os = require('os');
12
+
13
+ const ROOT = process.env.APPDATA
14
+ ? path.join(process.env.APPDATA, 'beast')
15
+ : path.join(os.homedir(), 'AppData', 'Roaming', 'beast');
16
+ const LOG_DIR = path.join(ROOT, 'logs');
17
+ const KEEP_DAYS = 14;
18
+ const RING_MAX = 1000;
19
+
20
+ const ring = [];
21
+ let lastCleanup = 0;
22
+
23
+ function fileFor(d) {
24
+ const t = d || new Date();
25
+ const p = (n) => String(n).padStart(2, '0');
26
+ return path.join(LOG_DIR, `beast-${t.getFullYear()}-${p(t.getMonth() + 1)}-${p(t.getDate())}.log`);
27
+ }
28
+
29
+ function cleanup() {
30
+ const now = Date.now();
31
+ if (now - lastCleanup < 60 * 60 * 1000) return;
32
+ lastCleanup = now;
33
+ try {
34
+ for (const f of fs.readdirSync(LOG_DIR)) {
35
+ const m = /^beast-(\d{4})-(\d{2})-(\d{2})\.log$/.exec(f);
36
+ if (!m) continue;
37
+ const age = (now - Date.UTC(Number(m[1]), Number(m[2]) - 1, Number(m[3]))) / 86400000;
38
+ if (age > KEEP_DAYS) { try { fs.unlinkSync(path.join(LOG_DIR, f)); } catch {} }
39
+ }
40
+ } catch {}
41
+ }
42
+
43
+ function write(level, tag, msg) {
44
+ const line =
45
+ `[${new Date().toISOString()}] [${String(level).toUpperCase()}] [${tag}] ` +
46
+ String(msg == null ? '' : msg).replace(/\r?\n/g, ' | ').slice(0, 4000);
47
+ ring.push(line);
48
+ if (ring.length > RING_MAX) ring.splice(0, ring.length - RING_MAX);
49
+ try {
50
+ fs.mkdirSync(LOG_DIR, { recursive: true });
51
+ cleanup();
52
+ fs.appendFileSync(fileFor(), line + '\n');
53
+ } catch {}
54
+ return line;
55
+ }
56
+
57
+ const info = (tag, msg) => write('info', tag, msg);
58
+ const warn = (tag, msg) => write('warn', tag, msg);
59
+ const error = (tag, msg) => write('error', tag, msg);
60
+
61
+ /* Bugün + dünün son n satırı (UI ve hata raporları için) */
62
+ function tail(n = 300) {
63
+ const lines = [];
64
+ try { lines.push(...fs.readFileSync(fileFor(new Date(Date.now() - 86400000)), 'utf8').split('\n')); } catch {}
65
+ try { lines.push(...fs.readFileSync(fileFor(), 'utf8').split('\n')); } catch {}
66
+ return lines.filter((l) => l.trim()).slice(-Math.max(1, Number(n) || 300));
67
+ }
68
+
69
+ function dir() {
70
+ try { fs.mkdirSync(LOG_DIR, { recursive: true }); } catch {}
71
+ return LOG_DIR;
72
+ }
73
+
74
+ function recent() {
75
+ return ring.slice(-200);
76
+ }
77
+
78
+ function clear() {
79
+ try { ring.length = 0; } catch {}
80
+ /* tail() bugün + dünün dosyasını okur; ikisini de boşalt ki
81
+ UI'daki "Logları Temizle" gerçekten temizlesin */
82
+ try {
83
+ for (const d of [new Date(), new Date(Date.now() - 86400000)]) {
84
+ try { fs.writeFileSync(fileFor(d), ''); } catch {}
85
+ }
86
+ } catch {}
87
+ return true;
88
+ }
89
+
90
+ module.exports = { info, warn, error, tail, dir, recent, clear, LOG_DIR };