beast-agent 1.9.0 → 2.1.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 +106 -14
  15. package/src/agent/kb.js +123 -123
  16. package/src/agent/llm.js +610 -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,138 +1,138 @@
1
- 'use strict';
2
-
3
- /* BEAST — electron binary onarıcı.
4
- SORUN: `electron` npm paketi binary'yi (dist/electron.exe) postinstall'da
5
- GitHub'dan indirir. Taze makinalarda bu indirme SESSİZCE başarısız olabilir
6
- (proxy/GitHub engeli, npm ignore-scripts=true, ağ kesintisi) — paket kurulmuş
7
- görünür ama `require('electron')` "Electron failed to install correctly" fırlatır.
8
- ÇÖZÜM: install.js'i elle çalıştır; olmazsa yedek aynadan (npmmirror) dene.
9
- Kullanım yerleri:
10
- - package.json postinstall → kurulumda otomatik (npm i -g beast-agent)
11
- - bin/beast-agent.js → her başlatmada bozuksa otomatik onar */
12
-
13
- const fs = require('fs');
14
- const path = require('path');
15
- const { spawnSync } = require('child_process');
16
-
17
- /* electron paket dizini (index.js'in yeri); paket hiç yoksa null */
18
- function electronDir() {
19
- try {
20
- return path.dirname(require.resolve('electron'));
21
- } catch {
22
- return null;
23
- }
24
- }
25
-
26
- /* binary sağlam mı? electron/index.js'in beklentisiyle aynı kontrol:
27
- path.txt + dist/<exe> varlığı */
28
- function status() {
29
- const dir = electronDir();
30
- if (!dir) return { ok: false, missing: true };
31
- const exe = process.platform === 'win32' ? 'electron.exe' : 'electron';
32
- const distOk = fs.existsSync(path.join(dir, 'dist', exe));
33
- const txtOk = fs.existsSync(path.join(dir, 'path.txt'));
34
- return distOk && txtOk ? { ok: true, dir } : { ok: false, dir };
35
- }
36
-
37
- /* platforma göre dist içindeki çalıştırılabilirin göreli yolu (electron/index.js ile aynı) */
38
- function platformPath() {
39
- switch (process.platform) {
40
- case 'win32':
41
- return 'electron.exe';
42
- case 'darwin':
43
- case 'mas':
44
- return 'Electron.app/Contents/MacOS/Electron';
45
- default:
46
- return 'electron';
47
- }
48
- }
49
-
50
- /* onarım — 3 katman:
51
- 0) binary sağlam, yalnız path.txt eksik/bozuk → indirimsiz anında yazar
52
- (install.js bu durumu "zaten kurulu" sanıp atlayabiliyor)
53
- 1) dist bozuk/eksik → dist'i sil + install.js (GitHub) ile taze indir
54
- 2) GitHub engelli → ELECTRON_MIRROR=npmmirror ile tekrar */
55
- function repair({ quiet } = {}) {
56
- let st = status();
57
- if (st.ok) return { ok: true, dir: st.dir, skipped: true };
58
- if (st.missing) return { ok: false, error: 'electron paketi hi\u00e7 yok — npm install -g beast-agent' };
59
- const dir = st.dir;
60
- const exeRel = platformPath();
61
- const exeAbs = path.join(dir, 'dist', ...exeRel.split('/'));
62
- const verFile = path.join(dir, 'dist', 'version');
63
- let wantVer = null;
64
- try { wantVer = String(require(path.join(dir, 'package.json')).version || ''); } catch {}
65
- const distIntact =
66
- fs.existsSync(exeAbs) &&
67
- (!wantVer ||
68
- (fs.existsSync(verFile) &&
69
- fs.readFileSync(verFile, 'utf8').replace(/^v/, '').trim() === wantVer));
70
-
71
- if (distIntact) {
72
- /* KATMAN 0: hızlı onarım — path.txt'yi kendimiz yazıyoruz (indirim yok) */
73
- try { fs.writeFileSync(path.join(dir, 'path.txt'), exeRel, 'utf8'); } catch {}
74
- if (status().ok) return { ok: true, dir, fast: true };
75
- }
76
-
77
- /* KATMAN 1-2: tam indirim */
78
- try { fs.rmSync(path.join(dir, 'dist'), { recursive: true, force: true }); } catch {}
79
- try { fs.unlinkSync(path.join(dir, 'path.txt')); } catch {}
80
- const installJs = path.join(dir, 'install.js');
81
- if (!fs.existsSync(installJs)) {
82
- return { ok: false, error: 'install.js yok — yeniden kur: npm install -g beast-agent' };
83
- }
84
-
85
- const sources = [null, 'https://npmmirror.com/mirrors/electron/'];
86
- for (let i = 0; i < sources.length; i++) {
87
- const env = { ...process.env };
88
- if (sources[i]) {
89
- env.ELECTRON_MIRROR = sources[i];
90
- if (!quiet) console.log(' \u2022 varsay\u0131lan kaynak ba\u015Far\u0131s\u0131z \u2014 yedek ayna deneniyor (npmmirror)\u2026');
91
- } else if (!quiet) {
92
- console.log(' \u2022 electron binary indiriliyor (ilk sefer ~110 MB, 1-2 dk)\u2026');
93
- }
94
- const r = spawnSync(process.execPath, [installJs], {
95
- cwd: dir,
96
- env,
97
- stdio: quiet ? 'ignore' : 'inherit',
98
- timeout: 600000,
99
- });
100
- if (!r.error && r.status === 0 && status().ok) {
101
- return { ok: true, dir, mirror: sources[i] || 'github' };
102
- }
103
- if (!quiet && r.error) {
104
- console.log(' ! deneme ba\u015far\u0131s\u0131z: ' + String(r.error.message || r.error).slice(0, 160));
105
- }
106
- }
107
- return { ok: false, error: 'electron binary indirilemedi (a\u011f/proxy engeli olabilir)' };
108
- }
109
-
110
- module.exports = { electronDir, status, repair };
111
-
112
- /* CLI: package.json postinstall → `node scripts/fix-electron.js --soft`
113
- (her durumda exit 0 — npm install bozulmasın, başlatma anında tekrar denenir)
114
- elle çağrı → hata durumunda exit 1 */
115
- if (require.main === module) {
116
- const soft = process.argv.includes('--soft');
117
- /* npm sitesindeki Install kutusu hep `npm i <isim>` yazar — lokal kurulumda
118
- `beast-agent` komutu PATH'e girmez ve kullanıcı uygulama başlamadı sanır.
119
- npm_config_global yalnız `npm i -g` kurulumlarında 'true' gelir → lokalse uyar. */
120
- const isGlobal =
121
- String(process.env.npm_config_global || process.env.NPM_CONFIG_GLOBAL || '').trim() === 'true';
122
- if (soft && !isGlobal) {
123
- console.log('');
124
- console.log('\u26A0\uFE0F Beast Agent bu klas\u00F6re LOKAL kuruldu \u2014 `beast-agent` komutu \u00E7al\u0131\u015Fmaz (PATH\u2019te de\u011Fil).');
125
- console.log(' Do\u011Fru kurulum (\u00F6nerilen): npm install -g beast-agent');
126
- console.log(' Bu klas\u00F6rde denemek: npx beast-agent');
127
- console.log('');
128
- }
129
- const r = repair({ quiet: false });
130
- if (r.ok) {
131
- console.log(r.skipped ? '\u2713 electron binary tamam' : '\u2713 electron binary onar\u0131ld\u0131');
132
- process.exit(0);
133
- }
134
- console.error('\u2717 electron onar\u0131lamad\u0131: ' + (r.error || '?'));
135
- console.error(' elle \u00e7\u00f6z\u00fcm: npm config set ignore-scripts false');
136
- console.error(' npm install -g beast-agent');
137
- process.exit(soft ? 0 : 1);
138
- }
1
+ 'use strict';
2
+
3
+ /* BEAST — electron binary onarıcı.
4
+ SORUN: `electron` npm paketi binary'yi (dist/electron.exe) postinstall'da
5
+ GitHub'dan indirir. Taze makinalarda bu indirme SESSİZCE başarısız olabilir
6
+ (proxy/GitHub engeli, npm ignore-scripts=true, ağ kesintisi) — paket kurulmuş
7
+ görünür ama `require('electron')` "Electron failed to install correctly" fırlatır.
8
+ ÇÖZÜM: install.js'i elle çalıştır; olmazsa yedek aynadan (npmmirror) dene.
9
+ Kullanım yerleri:
10
+ - package.json postinstall → kurulumda otomatik (npm i -g beast-agent)
11
+ - bin/beast-agent.js → her başlatmada bozuksa otomatik onar */
12
+
13
+ const fs = require('fs');
14
+ const path = require('path');
15
+ const { spawnSync } = require('child_process');
16
+
17
+ /* electron paket dizini (index.js'in yeri); paket hiç yoksa null */
18
+ function electronDir() {
19
+ try {
20
+ return path.dirname(require.resolve('electron'));
21
+ } catch {
22
+ return null;
23
+ }
24
+ }
25
+
26
+ /* binary sağlam mı? electron/index.js'in beklentisiyle aynı kontrol:
27
+ path.txt + dist/<exe> varlığı */
28
+ function status() {
29
+ const dir = electronDir();
30
+ if (!dir) return { ok: false, missing: true };
31
+ const exe = process.platform === 'win32' ? 'electron.exe' : 'electron';
32
+ const distOk = fs.existsSync(path.join(dir, 'dist', exe));
33
+ const txtOk = fs.existsSync(path.join(dir, 'path.txt'));
34
+ return distOk && txtOk ? { ok: true, dir } : { ok: false, dir };
35
+ }
36
+
37
+ /* platforma göre dist içindeki çalıştırılabilirin göreli yolu (electron/index.js ile aynı) */
38
+ function platformPath() {
39
+ switch (process.platform) {
40
+ case 'win32':
41
+ return 'electron.exe';
42
+ case 'darwin':
43
+ case 'mas':
44
+ return 'Electron.app/Contents/MacOS/Electron';
45
+ default:
46
+ return 'electron';
47
+ }
48
+ }
49
+
50
+ /* onarım — 3 katman:
51
+ 0) binary sağlam, yalnız path.txt eksik/bozuk → indirimsiz anında yazar
52
+ (install.js bu durumu "zaten kurulu" sanıp atlayabiliyor)
53
+ 1) dist bozuk/eksik → dist'i sil + install.js (GitHub) ile taze indir
54
+ 2) GitHub engelli → ELECTRON_MIRROR=npmmirror ile tekrar */
55
+ function repair({ quiet } = {}) {
56
+ let st = status();
57
+ if (st.ok) return { ok: true, dir: st.dir, skipped: true };
58
+ if (st.missing) return { ok: false, error: 'electron paketi hi\u00e7 yok — npm install -g beast-agent' };
59
+ const dir = st.dir;
60
+ const exeRel = platformPath();
61
+ const exeAbs = path.join(dir, 'dist', ...exeRel.split('/'));
62
+ const verFile = path.join(dir, 'dist', 'version');
63
+ let wantVer = null;
64
+ try { wantVer = String(require(path.join(dir, 'package.json')).version || ''); } catch {}
65
+ const distIntact =
66
+ fs.existsSync(exeAbs) &&
67
+ (!wantVer ||
68
+ (fs.existsSync(verFile) &&
69
+ fs.readFileSync(verFile, 'utf8').replace(/^v/, '').trim() === wantVer));
70
+
71
+ if (distIntact) {
72
+ /* KATMAN 0: hızlı onarım — path.txt'yi kendimiz yazıyoruz (indirim yok) */
73
+ try { fs.writeFileSync(path.join(dir, 'path.txt'), exeRel, 'utf8'); } catch {}
74
+ if (status().ok) return { ok: true, dir, fast: true };
75
+ }
76
+
77
+ /* KATMAN 1-2: tam indirim */
78
+ try { fs.rmSync(path.join(dir, 'dist'), { recursive: true, force: true }); } catch {}
79
+ try { fs.unlinkSync(path.join(dir, 'path.txt')); } catch {}
80
+ const installJs = path.join(dir, 'install.js');
81
+ if (!fs.existsSync(installJs)) {
82
+ return { ok: false, error: 'install.js yok — yeniden kur: npm install -g beast-agent' };
83
+ }
84
+
85
+ const sources = [null, 'https://npmmirror.com/mirrors/electron/'];
86
+ for (let i = 0; i < sources.length; i++) {
87
+ const env = { ...process.env };
88
+ if (sources[i]) {
89
+ env.ELECTRON_MIRROR = sources[i];
90
+ if (!quiet) console.log(' \u2022 varsay\u0131lan kaynak ba\u015Far\u0131s\u0131z \u2014 yedek ayna deneniyor (npmmirror)\u2026');
91
+ } else if (!quiet) {
92
+ console.log(' \u2022 electron binary indiriliyor (ilk sefer ~110 MB, 1-2 dk)\u2026');
93
+ }
94
+ const r = spawnSync(process.execPath, [installJs], {
95
+ cwd: dir,
96
+ env,
97
+ stdio: quiet ? 'ignore' : 'inherit',
98
+ timeout: 600000,
99
+ });
100
+ if (!r.error && r.status === 0 && status().ok) {
101
+ return { ok: true, dir, mirror: sources[i] || 'github' };
102
+ }
103
+ if (!quiet && r.error) {
104
+ console.log(' ! deneme ba\u015far\u0131s\u0131z: ' + String(r.error.message || r.error).slice(0, 160));
105
+ }
106
+ }
107
+ return { ok: false, error: 'electron binary indirilemedi (a\u011f/proxy engeli olabilir)' };
108
+ }
109
+
110
+ module.exports = { electronDir, status, repair };
111
+
112
+ /* CLI: package.json postinstall → `node scripts/fix-electron.js --soft`
113
+ (her durumda exit 0 — npm install bozulmasın, başlatma anında tekrar denenir)
114
+ elle çağrı → hata durumunda exit 1 */
115
+ if (require.main === module) {
116
+ const soft = process.argv.includes('--soft');
117
+ /* npm sitesindeki Install kutusu hep `npm i <isim>` yazar — lokal kurulumda
118
+ `beast-agent` komutu PATH'e girmez ve kullanıcı uygulama başlamadı sanır.
119
+ npm_config_global yalnız `npm i -g` kurulumlarında 'true' gelir → lokalse uyar. */
120
+ const isGlobal =
121
+ String(process.env.npm_config_global || process.env.NPM_CONFIG_GLOBAL || '').trim() === 'true';
122
+ if (soft && !isGlobal) {
123
+ console.log('');
124
+ console.log('\u26A0\uFE0F Beast Agent bu klas\u00F6re LOKAL kuruldu \u2014 `beast-agent` komutu \u00E7al\u0131\u015Fmaz (PATH\u2019te de\u011Fil).');
125
+ console.log(' Do\u011Fru kurulum (\u00F6nerilen): npm install -g beast-agent');
126
+ console.log(' Bu klas\u00F6rde denemek: npx beast-agent');
127
+ console.log('');
128
+ }
129
+ const r = repair({ quiet: false });
130
+ if (r.ok) {
131
+ console.log(r.skipped ? '\u2713 electron binary tamam' : '\u2713 electron binary onar\u0131ld\u0131');
132
+ process.exit(0);
133
+ }
134
+ console.error('\u2717 electron onar\u0131lamad\u0131: ' + (r.error || '?'));
135
+ console.error(' elle \u00e7\u00f6z\u00fcm: npm config set ignore-scripts false');
136
+ console.error(' npm install -g beast-agent');
137
+ process.exit(soft ? 0 : 1);
138
+ }
@@ -1,131 +1,137 @@
1
- 'use strict';
2
-
3
- /* Beast Agent — Dağıtım / Senkron Sistemi
4
- Tek komutla tam sürüm akışı (EXE/INSTALLER YOK — npm + kaynak dağıtımı):
5
- npm run release → otomatik patch bump (0.20.0 → 0.20.1)
6
- npm run release -- minor → 0.21.0
7
- npm run release -- 0.22.0 → belirli sürüm
8
-
9
- Adımlar:
10
- 1) package.json sürümü yükselt
11
- 2) commit + tag + push (main + tag)
12
- 3) GitHub Release (yalnız kaynak — exe/asset yüklenmez)
13
- 4) npm publish (NPM_TOKEN env var ise; yoksa atlar ve uyarır)
14
- 5) OneDrive yedek klasörüne kaynak kopyası (beast-v< sürüm >)
15
- */
16
-
17
- const fs = require('fs');
18
- const path = require('path');
19
- const { execSync } = require('child_process');
20
-
21
- const ROOT = path.join(__dirname, '..');
22
- const ONE_DRIVE_DIR = process.env.BEAST_BACKUP_DIR
23
- || 'C:\\Users\\batuh\\OneDrive\\Masaüstü\\Beast Agent';
24
-
25
- const step = (msg) => console.log('\n\x1b[1m▶ ' + msg + '\x1b[0m');
26
- const ok = (msg) => console.log(' \x1b[32m✓\x1b[0m ' + msg);
27
- const warn = (msg) => console.log(' \x1b[33m!\x1b[0m ' + msg);
28
- const fail = (msg) => { console.error(' \x1b[31m✗ ' + msg + '\x1b[0m'); process.exit(1); };
29
-
30
- function run(cmd, opts = {}) {
31
- /* stdio:'inherit' iken execSync null döner — trim patlamasın */
32
- return String(execSync(cmd, { cwd: ROOT, stdio: opts.inherit ? 'inherit' : 'pipe', encoding: 'utf8', ...opts }) ?? '').trim();
33
- }
34
-
35
- function bump(version, kind) {
36
- const [ma, mi, pa] = version.split('.').map(Number);
37
- if (kind === 'major') return `${ma + 1}.0.0`;
38
- if (kind === 'minor') return `${ma}.${mi + 1}.0`;
39
- return `${ma}.${mi}.${pa + 1}`;
40
- }
41
-
42
- /* ---------- argümanlar ---------- */
43
- const arg = process.argv[2] || 'patch';
44
- const pkgPath = path.join(ROOT, 'package.json');
45
- const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
46
- const current = pkg.version;
47
- const next = ['major', 'minor', 'patch'].includes(arg) ? bump(current, arg) : arg.replace(/^v/, '');
48
- if (!/^\d+\.\d+\.\d+$/.test(next)) fail('geçersiz sürüm: ' + next);
49
- const tag = 'v' + next;
50
-
51
- console.log(`\x1b[1mBeast Agent release: ${current} → ${next}\x1b[0m`);
52
-
53
- /* ---------- 1) sürüm bump ---------- */
54
- step('1/5 sürüm yükselt: ' + current + ' → ' + next);
55
- pkg.version = next;
56
- fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 4) + '\n');
57
- ok('package.json → ' + next);
58
-
59
- /* ---------- 2) commit + push ---------- */
60
- step('2/5 git: commit + tag + push');
61
- try {
62
- run('git add -A');
63
- run(`git commit -m "v${next}"`);
64
- } catch { warn('commit edilecek değişiklik yoktu'); }
65
- try { run(`git tag ${tag} -f`); } catch {}
66
- run('git push origin main');
67
- run(`git push origin ${tag}`);
68
- ok('pushed: main + ' + tag);
69
-
70
- /* ---------- 3) GitHub Release (kaynak — exe yok) ---------- */
71
- step('3/5 GitHub Release ' + tag);
72
- const gh = process.env.GH || 'gh';
73
- try {
74
- const notes = [
75
- `## Beast Agent ${tag}`,
76
- '',
77
- '- \`npm i -g beast-agent@\`' + next,
78
- '',
79
- 'Dağıtım npm üzerinden yapılır — exe/installer sürümü kaldırıldı.',
80
- 'Tam değişiklik listesi: commit geçmişi.',
81
- ].join('\n');
82
- const notesFile = path.join(ROOT, 'dist', 'release-notes.md');
83
- fs.mkdirSync(path.dirname(notesFile), { recursive: true });
84
- fs.writeFileSync(notesFile, notes);
85
- try { run(`${gh} release delete ${tag} --yes --cleanup-tag`); } catch {}
86
- run(`${gh} release create ${tag} --title "Beast Agent ${tag}" --notes-file "${notesFile}"`, { inherit: true });
87
- ok('release yayında: https://github.com/algokodcom/beast-agent/releases/tag/' + tag);
88
- } catch (e) {
89
- fail('GitHub release: ' + String(e));
90
- }
91
-
92
- /* ---------- 4) npm publish ---------- */
93
- step('4/5 npm publish');
94
- if (process.env.NPM_TOKEN) {
95
- try {
96
- run(`npm publish --//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}`, { inherit: true });
97
- ok('npm: beast-agent@' + next);
98
- } catch (e) {
99
- warn('npm publish başarısız (sürüm zaten var olabilir): ' + String(e).slice(0, 200));
100
- }
101
- } else {
102
- warn('NPM_TOKEN env yok npm adımı atlandı.');
103
- warn('Elle: set NPM_TOKEN=<token> && npm publish');
104
- }
105
-
106
- /* ---------- 5) OneDrive kaynak yedeği ---------- */
107
- step('5/5 OneDrive yedek (beast-v' + next + ')');
108
- try {
109
- const dest = path.join(ONE_DRIVE_DIR, 'beast-v' + next);
110
- fs.mkdirSync(dest, { recursive: true });
111
- /* robocopy 0-7 arası TÜM çıkış kodları başarıdır (1 = dosya kopyalandı);
112
- execSync 0 dışını hata sanır kodu burada yut, gerçek hatada (>7) dur */
113
- try {
114
- execSync(
115
- `robocopy "${ROOT}" "${dest}" /E /XD node_modules dist "beast agent web" .git /NFL /NDL /NJH`,
116
- { cwd: ROOT, stdio: 'pipe' }
117
- );
118
- } catch (e) {
119
- const code = e && e.status;
120
- if (!(typeof code === 'number' && code < 8)) throw e;
121
- }
122
- const info = path.join(dest, `YEDEK-BILGI-v${next}.txt`);
123
- fs.writeFileSync(info, `BEAST AGENT v${next} — ${new Date().toLocaleString('tr-TR')}\nKaynak: ${ROOT}\nGitHub: https://github.com/algokodcom/beast-agent/releases/tag/${tag}\nnpm: https://www.npmjs.com/package/beast-agent\n`);
124
- ok(dest);
125
- } catch (e) {
126
- warn('OneDrive yedeği atlandı: ' + String(e).slice(0, 160));
127
- }
128
-
129
- console.log(`\n\x1b[1m\x1b[32m✓ v${next} dağıtımı tamam.\x1b[0m`);
130
- console.log(' GitHub : https://github.com/algokodcom/beast-agent/releases/tag/' + tag);
131
- console.log(' npm : https://www.npmjs.com/package/beast-agent');
1
+ 'use strict';
2
+
3
+ /* Beast Agent — Dağıtım / Senkron Sistemi
4
+ Tek komutla tam sürüm akışı (EXE/INSTALLER YOK — npm + kaynak dağıtımı):
5
+ npm run release → otomatik patch bump (0.20.0 → 0.20.1)
6
+ npm run release -- minor → 0.21.0
7
+ npm run release -- 0.22.0 → belirli sürüm
8
+
9
+ Adımlar:
10
+ 1) package.json sürümü yükselt
11
+ 2) commit + tag + push (main + tag)
12
+ 3) GitHub Release (yalnız kaynak — exe/asset yüklenmez)
13
+ 4) npm publish (NPM_TOKEN env var ise; yoksa atlar ve uyarır)
14
+ 5) OneDrive yedek klasörüne kaynak kopyası (beast-v< sürüm >)
15
+ */
16
+
17
+ const fs = require('fs');
18
+ const path = require('path');
19
+ const { execSync } = require('child_process');
20
+
21
+ const ROOT = path.join(__dirname, '..');
22
+ const ONE_DRIVE_DIR = process.env.BEAST_BACKUP_DIR
23
+ || 'C:\\Users\\batuh\\OneDrive\\Masaüstü\\Beast Agent';
24
+
25
+ const step = (msg) => console.log('\n\x1b[1m▶ ' + msg + '\x1b[0m');
26
+ const ok = (msg) => console.log(' \x1b[32m✓\x1b[0m ' + msg);
27
+ const warn = (msg) => console.log(' \x1b[33m!\x1b[0m ' + msg);
28
+ const fail = (msg) => { console.error(' \x1b[31m✗ ' + msg + '\x1b[0m'); process.exit(1); };
29
+
30
+ function run(cmd, opts = {}) {
31
+ /* stdio:'inherit' iken execSync null döner — trim patlamasın */
32
+ return String(execSync(cmd, { cwd: ROOT, stdio: opts.inherit ? 'inherit' : 'pipe', encoding: 'utf8', ...opts }) ?? '').trim();
33
+ }
34
+
35
+ function bump(version, kind) {
36
+ const [ma, mi, pa] = version.split('.').map(Number);
37
+ if (kind === 'major') return `${ma + 1}.0.0`;
38
+ if (kind === 'minor') return `${ma}.${mi + 1}.0`;
39
+ return `${ma}.${mi}.${pa + 1}`;
40
+ }
41
+
42
+ /* ---------- argümanlar ---------- */
43
+ const arg = process.argv[2] || 'patch';
44
+ const pkgPath = path.join(ROOT, 'package.json');
45
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
46
+ const current = pkg.version;
47
+ const next = ['major', 'minor', 'patch'].includes(arg) ? bump(current, arg) : arg.replace(/^v/, '');
48
+ if (!/^\d+\.\d+\.\d+$/.test(next)) fail('geçersiz sürüm: ' + next);
49
+ const tag = 'v' + next;
50
+
51
+ console.log(`\x1b[1mBeast Agent release: ${current} → ${next}\x1b[0m`);
52
+
53
+ /* ---------- 1) sürüm bump ---------- */
54
+ step('1/5 sürüm yükselt: ' + current + ' → ' + next);
55
+ pkg.version = next;
56
+ fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 4) + '\n');
57
+ ok('package.json → ' + next);
58
+
59
+ /* ---------- 2) commit + push ---------- */
60
+ step('2/5 git: commit + tag + push');
61
+ try {
62
+ run('git add -A');
63
+ run(`git commit -m "v${next}"`);
64
+ } catch { warn('commit edilecek değişiklik yoktu'); }
65
+ try { run(`git tag ${tag} -f`); } catch {}
66
+ run('git push origin main');
67
+ run(`git push origin ${tag}`);
68
+ ok('pushed: main + ' + tag);
69
+
70
+ /* ---------- 3) GitHub Release (kaynak — exe yok) ---------- */
71
+ step('3/5 GitHub Release ' + tag);
72
+ const gh = process.env.GH || 'gh';
73
+ let ghOk = false;
74
+ try {
75
+ const notes = [
76
+ `## Beast Agent ${tag}`,
77
+ '',
78
+ '- \`npm i -g beast-agent@\`' + next,
79
+ '',
80
+ 'Dağıtım npm üzerinden yapılır — exe/installer sürümü kaldırıldı.',
81
+ 'Tam değişiklik listesi: commit geçmişi.',
82
+ ].join('\n');
83
+ const notesFile = path.join(ROOT, 'dist', 'release-notes.md');
84
+ fs.mkdirSync(path.dirname(notesFile), { recursive: true });
85
+ fs.writeFileSync(notesFile, notes);
86
+ try { run(`${gh} release delete ${tag} --yes --cleanup-tag`); } catch {}
87
+ run(`${gh} release create ${tag} --title "Beast Agent ${tag}" --notes-file "${notesFile}"`, { inherit: true });
88
+ ok('release yayında: https://github.com/algokodcom/beast-agent/releases/tag/' + tag);
89
+ ghOk = true;
90
+ } catch (e) {
91
+ /* gh kurulu değil / oturum yok → yayın atlanır, akış npm ile sürer */
92
+ warn('GitHub release atlandı (gh yok veya hata): ' + String(e).slice(0, 160));
93
+ }
94
+ if (!ghOk) {
95
+ warn('GitHub Release elle açılabilir: https://github.com/algokodcom/beast-agent/releases/new?tag=' + tag);
96
+ }
97
+
98
+ /* ---------- 4) npm publish ---------- */
99
+ step('4/5 npm publish');
100
+ if (process.env.NPM_TOKEN) {
101
+ try {
102
+ run(`npm publish --//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}`, { inherit: true });
103
+ ok('npm: beast-agent@' + next);
104
+ } catch (e) {
105
+ warn('npm publish başarısız (sürüm zaten var olabilir): ' + String(e).slice(0, 200));
106
+ }
107
+ } else {
108
+ warn('NPM_TOKEN env yok — npm adımı atlandı.');
109
+ warn('Elle: set NPM_TOKEN=<token> && npm publish');
110
+ }
111
+
112
+ /* ---------- 5) OneDrive kaynak yedeği ---------- */
113
+ step('5/5 OneDrive yedek (beast-v' + next + ')');
114
+ try {
115
+ const dest = path.join(ONE_DRIVE_DIR, 'beast-v' + next);
116
+ fs.mkdirSync(dest, { recursive: true });
117
+ /* robocopy 0-7 arası TÜM çıkış kodları başarıdır (1 = dosya kopyalandı);
118
+ execSync 0 dışını hata sanır — kodu burada yut, gerçek hatada (>7) dur */
119
+ try {
120
+ execSync(
121
+ `robocopy "${ROOT}" "${dest}" /E /XD node_modules dist "beast agent web" .git /NFL /NDL /NJH`,
122
+ { cwd: ROOT, stdio: 'pipe' }
123
+ );
124
+ } catch (e) {
125
+ const code = e && e.status;
126
+ if (!(typeof code === 'number' && code < 8)) throw e;
127
+ }
128
+ const info = path.join(dest, `YEDEK-BILGI-v${next}.txt`);
129
+ fs.writeFileSync(info, `BEAST AGENT v${next} ${new Date().toLocaleString('tr-TR')}\nKaynak: ${ROOT}\nGitHub: https://github.com/algokodcom/beast-agent/releases/tag/${tag}\nnpm: https://www.npmjs.com/package/beast-agent\n`);
130
+ ok(dest);
131
+ } catch (e) {
132
+ warn('OneDrive yedeği atlandı: ' + String(e).slice(0, 160));
133
+ }
134
+
135
+ console.log(`\n\x1b[1m\x1b[32m✓ v${next} dağıtımı tamam.\x1b[0m`);
136
+ console.log(' GitHub : https://github.com/algokodcom/beast-agent/releases/tag/' + tag);
137
+ console.log(' npm : https://www.npmjs.com/package/beast-agent');
@@ -1,40 +1,40 @@
1
- 'use strict';
2
-
3
- /* electron yer değiştirici:
4
- - `deps` : electron'u devDependencies → dependencies taşır (npm publish öncesi;
5
- global kurulumda electron runtime'ı inmesi için)
6
- - `devdeps`: geri taşır (electron-builder yalnız devDependencies kabul eder;
7
- repo normal durumu budur)
8
- npm lifecycle: prepublishOnly → deps, postpublish → devdeps */
9
-
10
- const fs = require('fs');
11
- const path = require('path');
12
-
13
- const mode = process.argv[2];
14
- const pkgPath = path.join(__dirname, '..', 'package.json');
15
- const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
16
- const VER = pkg.devDependencies && pkg.devDependencies.electron
17
- ? pkg.devDependencies.electron
18
- : (pkg.dependencies && pkg.dependencies.electron);
19
-
20
- if (!VER) {
21
- console.error('electron sürümü package.json içinde bulunamadı');
22
- process.exit(1);
23
- }
24
-
25
- if (mode === 'deps') {
26
- delete pkg.devDependencies.electron;
27
- pkg.dependencies = pkg.dependencies || {};
28
- pkg.dependencies.electron = VER;
29
- console.log('electron → dependencies (' + VER + ')');
30
- } else if (mode === 'devdeps') {
31
- delete pkg.dependencies.electron;
32
- pkg.devDependencies = pkg.devDependencies || {};
33
- pkg.devDependencies.electron = VER;
34
- console.log('electron → devDependencies (' + VER + ')');
35
- } else {
36
- console.error('kullanım: node scripts/swap-electron.js deps|devdeps');
37
- process.exit(1);
38
- }
39
-
40
- fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 4) + '\n');
1
+ 'use strict';
2
+
3
+ /* electron yer değiştirici:
4
+ - `deps` : electron'u devDependencies → dependencies taşır (npm publish öncesi;
5
+ global kurulumda electron runtime'ı inmesi için)
6
+ - `devdeps`: geri taşır (electron-builder yalnız devDependencies kabul eder;
7
+ repo normal durumu budur)
8
+ npm lifecycle: prepublishOnly → deps, postpublish → devdeps */
9
+
10
+ const fs = require('fs');
11
+ const path = require('path');
12
+
13
+ const mode = process.argv[2];
14
+ const pkgPath = path.join(__dirname, '..', 'package.json');
15
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
16
+ const VER = pkg.devDependencies && pkg.devDependencies.electron
17
+ ? pkg.devDependencies.electron
18
+ : (pkg.dependencies && pkg.dependencies.electron);
19
+
20
+ if (!VER) {
21
+ console.error('electron sürümü package.json içinde bulunamadı');
22
+ process.exit(1);
23
+ }
24
+
25
+ if (mode === 'deps') {
26
+ delete pkg.devDependencies.electron;
27
+ pkg.dependencies = pkg.dependencies || {};
28
+ pkg.dependencies.electron = VER;
29
+ console.log('electron → dependencies (' + VER + ')');
30
+ } else if (mode === 'devdeps') {
31
+ delete pkg.dependencies.electron;
32
+ pkg.devDependencies = pkg.devDependencies || {};
33
+ pkg.devDependencies.electron = VER;
34
+ console.log('electron → devDependencies (' + VER + ')');
35
+ } else {
36
+ console.error('kullanım: node scripts/swap-electron.js deps|devdeps');
37
+ process.exit(1);
38
+ }
39
+
40
+ fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 4) + '\n');