beast-agent 1.7.0 → 1.8.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/bin/beast-agent.js +12 -0
- package/package.json +1 -1
- package/src/agent/engine.js +7 -7
- package/src/agent/llm.js +46 -34
- package/src/agent/scripts/stealthsearch.py +30 -0
- package/src/agent/searxng.js +325 -0
- package/src/agent/seeds/brainstorming/SKILL.md +90 -0
- package/src/agent/seeds/dispatching-parallel-agents/SKILL.md +120 -0
- package/src/agent/seeds/executing-plans/SKILL.md +60 -0
- package/src/agent/seeds/subagent-driven-development/SKILL.md +167 -0
- package/src/agent/seeds/systematic-debugging/SKILL.md +131 -0
- package/src/agent/seeds/test-driven-development/SKILL.md +152 -0
- package/src/agent/seeds/verification-before-completion/SKILL.md +63 -0
- package/src/agent/seeds/writing-plans/SKILL.md +162 -0
- package/src/agent/seeds/writing-skills/SKILL.md +229 -0
- package/src/agent/skills.js +39 -9
- package/src/agent/tools.js +2340 -2273
- package/src/main.js +7048 -7106
- package/src/preload.js +188 -192
- package/src/renderer/i18n.js +1186 -1226
- package/src/renderer/index.html +0 -6
- package/src/renderer/renderer.js +7389 -7480
- package/src/renderer/style.css +3383 -3430
- package/src/agent/obscura.js +0 -292
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: verification-before-completion
|
|
3
|
+
description: İşin bitti/düştü/geçti diye bildirmeden ÖNCE kullan — herhangi bir tamamlama iddiasından hemen önce; komutu çalıştırıp çıktısıyla kanıtlamadan başarı beyanı yasak.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Tamamlamadan Önce Doğrulama
|
|
7
|
+
|
|
8
|
+
## Çekirdek ilke
|
|
9
|
+
|
|
10
|
+
**Kanıt önce gelir, iddia sonra. Her zaman.**
|
|
11
|
+
|
|
12
|
+
**Kuralın harfini ihlal etmek, kuralın ruhunu ihlal etmektir.**
|
|
13
|
+
|
|
14
|
+
## Demir Kanun
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
TAZE DOĞRULAMA KANITI OLMADAN TAMAMLAMA İDDİASI YOK
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Bu tur içinde doğrulama komutunu çalıştırmadıysan, geçtiğini söyleyemezsin.
|
|
21
|
+
|
|
22
|
+
## Kapı Fonksiyonu
|
|
23
|
+
|
|
24
|
+
Herhangi bir durum beyan etmeden / memnuniyet göstermeden ÖNCE:
|
|
25
|
+
|
|
26
|
+
1. **BELİRLE:** Bu iddiayı kanıtlayan komut nedir?
|
|
27
|
+
2. **ÇALIŞTIR:** Komutu TAM ve TAZE çalıştır (run_command) — önceki turun çıktısı geçersiz
|
|
28
|
+
3. **OKU:** Çıktının tamamını oku, exit code'a bak, hata sayısını say
|
|
29
|
+
4. **DOĞRULA:** Çıktı iddiayı destekliyor mu?
|
|
30
|
+
- Hayır → gerçek durumu kanıtıyla bildir
|
|
31
|
+
- Evet → iddiayı KANITLA birlikte bildir
|
|
32
|
+
5. **ANCAK O ZAMAN:** iddiada bulun
|
|
33
|
+
|
|
34
|
+
Bir adımı atlarsan doğrulamış değilsin, yalan söylüyorsundur.
|
|
35
|
+
|
|
36
|
+
## Yaygın İddia → Gerekli Kanıt
|
|
37
|
+
|
|
38
|
+
| İddia | Gerekli kanıt | Yetmez |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| Testler geçti | Test çıktısı: 0 failure | Önceki tur, "geçer herhalde" |
|
|
41
|
+
| Linter temiz | Linter çıktısı: 0 hata | Kısmi kontrol, çıkarım |
|
|
42
|
+
| Build başarılı | run_command: exit 0 | Linter geçti, loglar iyi görünüyor |
|
|
43
|
+
| Bug düzeltildi | Orijinal belirtinin testi: geçti | Kod değişti, düzeldi varsayımı |
|
|
44
|
+
| Ajan işi bitirdi | diff / tasks_list raporu eşleşiyor | Ajan "başarılı" dedi |
|
|
45
|
+
| Gereksinimler karşılandı | Madde madde kontrol listesi | Testler geçti |
|
|
46
|
+
|
|
47
|
+
## Kırmızı Bayraklar — DUR
|
|
48
|
+
|
|
49
|
+
- "Zaten çalıştırdım" (bu turda DEĞİLSE sayılmaz)
|
|
50
|
+
- "Geçmesi lazım", "kesin çalışır"
|
|
51
|
+
- Kodu değiştirip testi TEKRAR çalıştırmadan "düzeldi" demek
|
|
52
|
+
- Kısmi çıktıyla ("testlerin çoğu geçti") tamamlama iddiası
|
|
53
|
+
- Ajanın kendi "başarılı" raporunu doğrulamadan kullanıcıya aktarmak
|
|
54
|
+
- Çıktıyı okumadan exit code'a güvenmek
|
|
55
|
+
|
|
56
|
+
**Hepsi aynı anlama gelir: komutu çalıştır, çıktıyı oku, öyle bildir.**
|
|
57
|
+
|
|
58
|
+
## Paralel Ajan Notu
|
|
59
|
+
|
|
60
|
+
run_background ile devrettiğin işin raporu geldiğinde bu skill ÇİFT GEÇERLİ:
|
|
61
|
+
ajanın raporu bir iddiadır, kanıt değil. İddia görevle eşleşiyor mu?
|
|
62
|
+
Dosyalar gerçekten oluşmuş mu (list_dir/glob), komut gerçekten geçmiş mi
|
|
63
|
+
(task_status çıktısı)? Doğrulamadan kullanıcıya "bitti" deme.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: writing-plans
|
|
3
|
+
description: Çok adımlı bir iş için spec/gereksinim hazır olduğunda, KODA DOKUNMADAN ÖNCE kullan — implementasyon planı yazılacak her durumda.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Plan Yazma
|
|
7
|
+
|
|
8
|
+
## Genel Bakış
|
|
9
|
+
|
|
10
|
+
Sıfır bağlama sahip, zevki şüpheli bir mühendisin takip edebileceği kapsamlı
|
|
11
|
+
implementasyon planı yaz. Her görevin hangi dosyalara dokunacağını, kodu,
|
|
12
|
+
testi, nasıl test edileceğini belgele. Planı ısırık büyüklüğünde adımlara böl.
|
|
13
|
+
DRY. YAGNI. TDD. Sık commit.
|
|
14
|
+
|
|
15
|
+
Yetenekli ama arac setini ve problem alanını neredeyse hiç bilmeyen biri
|
|
16
|
+
olduğunu varsay. Plan o kişinin eline tek başına geçmeli.
|
|
17
|
+
|
|
18
|
+
**Planları buraya kaydet:** `<workspace>/docs/plans/YYYY-MM-DD-<özellik-adı>.md`
|
|
19
|
+
(write_file ile; klasör yoksa oluşur)
|
|
20
|
+
|
|
21
|
+
## Kapsam Kontrolü
|
|
22
|
+
|
|
23
|
+
Spec birden fazla bağımsız alt sistemi kapsıyorsa ayrı planlara böl — her biri
|
|
24
|
+
tek başına çalışan, test edilebilir yazılım üretmeli.
|
|
25
|
+
|
|
26
|
+
## Dosya Yapısı
|
|
27
|
+
|
|
28
|
+
Görevleri tanımlamadan önce hangi dosyaların oluşacağı/değişeceğinin ve
|
|
29
|
+
her birinin sorumluluğunun haritasını çıkar. Kararlar burada kilitlenir:
|
|
30
|
+
|
|
31
|
+
- Net sınırlı, tek sorumlu dosyalar; birlikte değişenler yan yana
|
|
32
|
+
- Küçük odaklı dosyalar tercih et — bağlamında tutabildiğin ve edit'inin
|
|
33
|
+
güvenilir olduğu yapı budur
|
|
34
|
+
- Mevcut kod tabanında yerleşik deseni takip et; tek taraflı yeniden yapılandırma
|
|
35
|
+
|
|
36
|
+
## Görev Ölçüsü
|
|
37
|
+
|
|
38
|
+
Görev = kendi test döngüsünü taşıyan, bağımsız doğrulanabilir en küçük birim.
|
|
39
|
+
Kurulum/scaffolding adımlarını, çıktısı onlara ihtiyaç duyan görevin içine kat.
|
|
40
|
+
İki görevi ayır: birinci reddedilirken ikincisi onaylanabilir mi?
|
|
41
|
+
|
|
42
|
+
## Isırık Büyüklüğünde Adımlar
|
|
43
|
+
|
|
44
|
+
Her adım TEK eylem (2-5 dakika):
|
|
45
|
+
|
|
46
|
+
- "Başarısız testi yaz" — adım
|
|
47
|
+
- "Çalıştır, fail olduğunu gör" — adım
|
|
48
|
+
- "Testi geçecek minimal kodu yaz" — adım
|
|
49
|
+
- "Testleri çalıştır, geçtiğini gör" — adım
|
|
50
|
+
- "Commit" — adım
|
|
51
|
+
|
|
52
|
+
## Plan Dosyası Başlığı
|
|
53
|
+
|
|
54
|
+
**Her plan bu başlıkla başlamalı:**
|
|
55
|
+
|
|
56
|
+
```markdown
|
|
57
|
+
# [Özellik Adı] Implementasyon Planı
|
|
58
|
+
|
|
59
|
+
> **Ajan işçiler için:** GÖREV BAŞINA taze alt-ajan: subagent-driven-development
|
|
60
|
+
> (önerilen, CEO modunda) veya executing-plans kullan. Adımlar checkbox (- [ ])
|
|
61
|
+
> sözdizimiyle takip edilir.
|
|
62
|
+
|
|
63
|
+
**Hedef:** [Bu planın ürettiği şey — tek cümle]
|
|
64
|
+
|
|
65
|
+
**Mimari:** [Yaklaşım — 2-3 cümle]
|
|
66
|
+
|
|
67
|
+
**Teknoloji:** [Önemli teknoloji/kütüphaneler]
|
|
68
|
+
|
|
69
|
+
**Spec:** [Varsa spec/design dosyasının yolu — plan spec'ten hareket eder]
|
|
70
|
+
|
|
71
|
+
## Global Kısıtlar
|
|
72
|
+
|
|
73
|
+
[Proje geneli şartlar — sürüm sınırları, bağımlılık sınırları, isim kuralları,
|
|
74
|
+
platform şartları — spec'ten BİREBİR kopyalanmış değerlerle, her biri tek satır.
|
|
75
|
+
Her görev bu bölümü örtük olarak içerir.]
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Görev Yapısı
|
|
81
|
+
|
|
82
|
+
````markdown
|
|
83
|
+
### Görev N: [Bileşen Adı]
|
|
84
|
+
|
|
85
|
+
**Dosyalar:**
|
|
86
|
+
- Oluştur: `tam/yol/dosya.js`
|
|
87
|
+
- Değiştir: `tam/yol/mevcut.js:123-145`
|
|
88
|
+
- Test: `tests/tam/yol/dosya.test.js`
|
|
89
|
+
|
|
90
|
+
**Arayüzler:**
|
|
91
|
+
- Tüketir: [önceki görevlerden kullandığı — tam imzalar]
|
|
92
|
+
- Üretir: [sonraki görevlerin dayandığı — tam fonksiyon adları, parametre ve
|
|
93
|
+
dönüş tipleri. Bir görevin implementeri SADECE kendi görevini görür;
|
|
94
|
+
komşu görevlerin adlarını/tiplerini buradan öğrenir.]
|
|
95
|
+
|
|
96
|
+
- [ ] **Adım 1: Başarısız testi yaz**
|
|
97
|
+
|
|
98
|
+
```js
|
|
99
|
+
test('boş e-postayı reddeder', () => {
|
|
100
|
+
expect(submitForm({ email: '' }).error).toBe('Email gerekli');
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
- [ ] **Adım 2: Fail olduğunu doğrula**
|
|
105
|
+
|
|
106
|
+
Çalıştır: `node --test tests/dosya.test.js`
|
|
107
|
+
Beklenen: FAIL — "submitForm is not defined"
|
|
108
|
+
|
|
109
|
+
- [ ] **Adım 3: Minimal implementasyon**
|
|
110
|
+
|
|
111
|
+
```js
|
|
112
|
+
function submitForm(data) {
|
|
113
|
+
if (!data.email?.trim()) return { error: 'Email gerekli' };
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
- [ ] **Adım 4: Geçtiğini doğrula**
|
|
118
|
+
|
|
119
|
+
Çalıştır: `node --test tests/dosya.test.js`
|
|
120
|
+
Beklenen: PASS
|
|
121
|
+
|
|
122
|
+
- [ ] **Adım 5: Commit**
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
git add tests/dosya.test.js src/dosya.js
|
|
126
|
+
git commit -m "feat: boş e-postayı reddet"
|
|
127
|
+
```
|
|
128
|
+
````
|
|
129
|
+
|
|
130
|
+
## Placeholder YASAK
|
|
131
|
+
|
|
132
|
+
Her adım mühendisin ihtiyacı olan GERÇEK içeriği taşır. Bunlar **plan
|
|
133
|
+
hatasıdır** — asla yazma:
|
|
134
|
+
|
|
135
|
+
- "TBD", "TODO", "sonra doldur", "detayları tamamla"
|
|
136
|
+
- "Uygun hata yönetimi ekle" / "kenar durumları handle et"
|
|
137
|
+
- "Yukarıdakine test yaz" (test kodu olmadan)
|
|
138
|
+
- "Görev N'ye benzer" (kodun kendisini yaz — mühendis görevleri sırasız okuyabilir)
|
|
139
|
+
- Ne yapılacağını söyleyip nasılını göstermeyen adımlar (kod adımı = kod bloğu)
|
|
140
|
+
- Hiçbir görevde tanımlanmamış tip/fonksiyon referansı
|
|
141
|
+
|
|
142
|
+
## Öz-Denetim
|
|
143
|
+
|
|
144
|
+
Planı bitirince spec'i taze gözle kontrol et (kendi checklist'in):
|
|
145
|
+
|
|
146
|
+
1. **Spec kapsamı:** Spec'in her bölümü için hangi görev implemente ediyor?
|
|
147
|
+
Boşlukları listele, görev ekle.
|
|
148
|
+
2. **Placeholder taraması:** Yukarıdaki kırmızı desenleri kendi planında ara, düzelt.
|
|
149
|
+
3. **Tip tutarlılığı:** Görev 3'te `clearLayers()` diye çağırdığın şey Görev 7'de
|
|
150
|
+
`clearFullLayers()` olmasın. İmzalar birebir eşleşmeli.
|
|
151
|
+
|
|
152
|
+
Sorun bulursan yerinde düzelt, tekrar tekrar dolaşma.
|
|
153
|
+
|
|
154
|
+
## Teslim
|
|
155
|
+
|
|
156
|
+
Plan kaydedildikten sonra yürütme seçeneği sun:
|
|
157
|
+
|
|
158
|
+
**"Plan `<yol>`'e kaydedildi. İki seçenek:**
|
|
159
|
+
**1. Alt-Ajan Destekli (önerilen)** — her görev için taze paralel ajan
|
|
160
|
+
(run_background), görevler arası inceleme; CEO modunda birebir
|
|
161
|
+
**2. Satır İçi** — bu oturumda executing-plans ile, checkpoint'li seri yürütme
|
|
162
|
+
**Hangisi?"**
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: writing-skills
|
|
3
|
+
description: Yeni skill oluştururken, mevcut skill düzenlerken veya deploy öncesi doğrularken kullan — %APPDATA%\beast\skills altına SKILL.md yazılacak/herhangi bir edit olacaksa.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill Yazma
|
|
7
|
+
|
|
8
|
+
## Genel Bakış
|
|
9
|
+
|
|
10
|
+
**Skill yazmak, süreç dokümantasyonuna uygulanan TDD'dir.**
|
|
11
|
+
|
|
12
|
+
Test senaryoları yaz (paralel ajanla baskı senaryosu), fail izle (baseline
|
|
13
|
+
davranış), skill'i yaz (doküman), geçiş izle (ajan artık uyuyor), refactor
|
|
14
|
+
(loophole kapat).
|
|
15
|
+
|
|
16
|
+
**Çekirdek ilke:** Skill'siz ajanın fail ettiğini izlemediysen, skill'in
|
|
17
|
+
doğru şeyi öğrettiğini bilmezsin.
|
|
18
|
+
|
|
19
|
+
**ZORUNLU TEMEL:** test-driven-development skill'ini anlıyor olmalısın —
|
|
20
|
+
o RED-GREEN-REFACTOR'ü tanımlar, bu skill onu dokümana uyarlar.
|
|
21
|
+
|
|
22
|
+
## Skill Nedir?
|
|
23
|
+
|
|
24
|
+
**Skill:** Kanıtlanmış teknik, desen veya araç için referans rehber.
|
|
25
|
+
**Skill'dir:** Yeniden kullanılabilir teknik/pattern/araç/rehber.
|
|
26
|
+
**Skill değildir:** Bir problemi bir kez nasıl çözdüğüne dair hikâye.
|
|
27
|
+
|
|
28
|
+
## Ne Zaman Skill Yaratılır
|
|
29
|
+
|
|
30
|
+
**Yarat:**
|
|
31
|
+
- Teknik sana sezgisel gelmediyse
|
|
32
|
+
- Projeler arası tekrar referans edeceksen
|
|
33
|
+
- Desen genelse (proje-özel değilse)
|
|
34
|
+
|
|
35
|
+
**Yaratma:**
|
|
36
|
+
- Tek seferlik çözümler için
|
|
37
|
+
- Başka yerde iyi dokümante edilmiş standart pratikler için
|
|
38
|
+
- Proje-özel konvansiyonlar (onlar AGENTS.md'ye/proje talimatına)
|
|
39
|
+
- Regex/validasyonla zorlanabilir mekanik kısıtlar (otomatikleştir —
|
|
40
|
+
dokümanı yargı gerektiren kararlara sakla)
|
|
41
|
+
|
|
42
|
+
## Beast'te Skill Yapısı
|
|
43
|
+
|
|
44
|
+
Yer: `%APPDATA%\beast\skills\<slug>\SKILL.md` (write_file ile yaz; slug
|
|
45
|
+
küçük-harf-tire). Isim+açıklama HER SOHBETE system prompta girer — gövde
|
|
46
|
+
sadece ilgiliyken read_file ile okunur.
|
|
47
|
+
|
|
48
|
+
```markdown
|
|
49
|
+
---
|
|
50
|
+
name: skill-adi
|
|
51
|
+
description: [TETİKLEYİCİ — ne zaman okunmalı; aşağıya bak]
|
|
52
|
+
version: 1.0.0
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
# Skill Adı
|
|
56
|
+
|
|
57
|
+
## Genel Bakış
|
|
58
|
+
Bu ne? Çekirdek ilke 1-2 cümle.
|
|
59
|
+
|
|
60
|
+
## Ne Zaman
|
|
61
|
+
Belirtiler ve kullanım durumları; ne zaman KULLANILMAZ
|
|
62
|
+
|
|
63
|
+
## Çekirdek Desen
|
|
64
|
+
Önce/sonra karşılaştırması veya adımlar
|
|
65
|
+
|
|
66
|
+
## Hızlı Referans
|
|
67
|
+
Sık işlemler için tablo
|
|
68
|
+
|
|
69
|
+
## Yaygın Hatalar
|
|
70
|
+
Ne yanlış gider + fix
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Frontmatter kuralları:**
|
|
74
|
+
- `name`: harf, rakam, tire (özel karakter yok)
|
|
75
|
+
- `description`: üçüncü şahıs, SADECE ne zaman kullanılacağını anlatır
|
|
76
|
+
|
|
77
|
+
## Skill Keşif Optimizasyonu (SDO)
|
|
78
|
+
|
|
79
|
+
**description = NE ZAMAN, ne YAPDIĞI değil.**
|
|
80
|
+
|
|
81
|
+
Test şunu gösterdi: description workflow'u özetlerse ajan TÜM skill'i
|
|
82
|
+
okumadan description'daki kısayolu uygular. Gövde, ajanın atladığı
|
|
83
|
+
dokümana döner.
|
|
84
|
+
|
|
85
|
+
```yaml
|
|
86
|
+
# ❌ KÖTÜ: workflow özetler — ajan gövdeyi okumadan bunu takip eder
|
|
87
|
+
description: Plan yürütürken kullan — görev başına alt-ajan devreder, aralarında inceleme yapar
|
|
88
|
+
|
|
89
|
+
# ✅ İYİ: sadece tetikleyici koşullar
|
|
90
|
+
description: Bağımsız görevlere bölünmüş implementasyon planı yürütülürken kullan
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
- Somut tetikleyiciler, belirtiler ve durumlar yaz
|
|
94
|
+
- Sorunu tarif et (race condition, tutarsız davranış), dile özgü belirtiyi değil
|
|
95
|
+
- Arama kelimeleri kullan: hata mesajları, belirtiler ("flaky", "takılıyor"),
|
|
96
|
+
araç adları
|
|
97
|
+
- Üçüncü şahıs yaz (system prompta enjekte edilir)
|
|
98
|
+
|
|
99
|
+
## Demir Kanun (TDD ile aynı)
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
FAILING TEST OLMADAN SKILL YOK
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Bu YENİ skill'ler VE mevcut skill EDİTLERİ için geçerli. Test etmeden
|
|
106
|
+
skill yazdıysan: sil, baştan başla. "Basit ekleme" istisnası yok.
|
|
107
|
+
|
|
108
|
+
## RED-GREEN-REFACTOR (skill için)
|
|
109
|
+
|
|
110
|
+
### RED: Başarısız Test (Baseline)
|
|
111
|
+
|
|
112
|
+
Skill'siz ajanla baskı senaryosu çalıştır (run_background ile taze ajan —
|
|
113
|
+
sistem promptu skill'in yaşayacağı gerçek bağlam, kullanıcı mesajı hataya
|
|
114
|
+
çekecek görev olsun). Birebir belgele:
|
|
115
|
+
- Hangi seçimleri yaptı?
|
|
116
|
+
- Hangi bahaneleri kullandı (verbatim)?
|
|
117
|
+
- Hangi baskılar ihlale yol açtı?
|
|
118
|
+
|
|
119
|
+
### GREEN: Minimal Skill Yaz
|
|
120
|
+
|
|
121
|
+
Baseline'da belgelenen SPESİFİK bahaneleri karşılayan skill yaz. Hayali
|
|
122
|
+
durumlar için ekstra içerik EKLEME. Aynı senaryoyu skill ile tekrar koştur —
|
|
123
|
+
ajan artık uymalı.
|
|
124
|
+
|
|
125
|
+
### REFACTOR: Loophole Kapat
|
|
126
|
+
|
|
127
|
+
Ajan YENİ bahane buldu? Açık karşı-argüman ekle. Bulletproof olana kadar
|
|
128
|
+
tekrar test et.
|
|
129
|
+
|
|
130
|
+
**Mikro-test:** tam senaryo pahalıysa önce kelimelik test — tek taze örnek +
|
|
131
|
+
rehberli vs kontrolsüz (rehbersiz) karşılaştırma, 5+ tekrar, her eşleşmeyi
|
|
132
|
+
elle oku. Kontrol grupta hata YOKSA yazılacak rehber de yok — dur.
|
|
133
|
+
|
|
134
|
+
## Uyum Sağlamayı Ezberle (Disiplin Skill'leri)
|
|
135
|
+
|
|
136
|
+
Kural bilen ajan baskı altında atlarsa:
|
|
137
|
+
|
|
138
|
+
**Her loophole'u açıkça kapat** — kuralı söylemek yetmez, workaround'ları
|
|
139
|
+
tek tek yasakla:
|
|
140
|
+
|
|
141
|
+
```markdown
|
|
142
|
+
Testten önce kod yazdıysan: SİL. Baştan başla.
|
|
143
|
+
|
|
144
|
+
**İstisna yok:**
|
|
145
|
+
- "Referans olarak" tutma
|
|
146
|
+
- Testleri yazarken uyarlama
|
|
147
|
+
- Silmek silmektir
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**"Ruh vs harf" argümanını baştan kes:**
|
|
151
|
+
|
|
152
|
+
```markdown
|
|
153
|
+
**Kuralın harfini ihlal etmek, kuralın ruhunu ihlal etmektir.**
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Bahane tablosu kur** — baseline testten çıkan HER bahane:
|
|
157
|
+
|
|
158
|
+
```markdown
|
|
159
|
+
| Bahane | Gerçek |
|
|
160
|
+
|---|---|
|
|
161
|
+
| "Test etmek için çok basit" | Basit kod da kırılır. Test 30 saniye. |
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Kırmızı bayrak listesi** — ajanın kendini kontrolü kolay olsun:
|
|
165
|
+
|
|
166
|
+
```markdown
|
|
167
|
+
## Kırmızı Bayraklar — DUR
|
|
168
|
+
- "Sadece bu sefer" bahanesi
|
|
169
|
+
- "Elle test ettim zaten"
|
|
170
|
+
|
|
171
|
+
**Hepsi: kodu sil, TDD ile baştan başla.**
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Kalıbı Hatanın Türüne Eşle
|
|
175
|
+
|
|
176
|
+
| Baseline hatası | Doğru kalıp | Yanlış kalıp |
|
|
177
|
+
|---|---|---|
|
|
178
|
+
| Baskı altında kuralı atlıyor | Yasak + bahane tablosu + kırmızı bayraklar | Yumuşak yönlendirme ("tercih et", "düşün") |
|
|
179
|
+
| Uyuyor ama çıktı yanlış biçimde | Pozitif reçete: çıktı NE — parçaları ve sırasıyla | Yasak listesi |
|
|
180
|
+
| Zaten ürettiği şeyden eleman eksitiyor | Şablon REQUIRED alanı | Şablon yanına prose hatırlatma |
|
|
181
|
+
| Davranış koşula bağlı olmalı | Gözlenebilir koşullu ("brief varsa ona atıf yap") | Koşulsuz kural + istisna cümleleri |
|
|
182
|
+
|
|
183
|
+
Yasaklar, şekillendirme sorunlarında TERS TEPER — "X yapma" pazarlığa
|
|
184
|
+
açık kalır; reçete pazarlık bırakmaz: çıktı ya söylenen kalıptadır ya değil.
|
|
185
|
+
|
|
186
|
+
**Seçtiğin kalıp için:** nüans cümlesi YOK ("X yapma, önemliyse hariç"
|
|
187
|
+
pazarlığı yeniden açar).
|
|
188
|
+
|
|
189
|
+
## Token Verimliliği (Kritik)
|
|
190
|
+
|
|
191
|
+
Skill gövdesi okunduğunda bağlama girer:
|
|
192
|
+
|
|
193
|
+
- Sık yüklenen skill'ler: <200 kelime hedef
|
|
194
|
+
- Diğerleri: <500 kelime (yine de öz ol)
|
|
195
|
+
- Detayları araç yardımına bırak; cross-referans kullan ("ZORUNLU:
|
|
196
|
+
test-driven-development skill'ini kullan" — içerik tekrarı yok)
|
|
197
|
+
- Tek mükemmel örnek, çok vasat örnekten iyi
|
|
198
|
+
- Yeniden kullanılabilir ağır referans (100+ satır) ayrı dosyaya
|
|
199
|
+
(`SKILL.md` yanına `referans.md`), inline ilkeler/prensipler kalır
|
|
200
|
+
|
|
201
|
+
## Anti-Desenler
|
|
202
|
+
|
|
203
|
+
- ❌ **Hikâye anlatımı:** "2025-10-03 oturumunda empty projectDir yüzünden..."
|
|
204
|
+
— çok spesifik, yeniden kullanılamaz
|
|
205
|
+
- ❌ **Çok-dil sulandırma:** example-js.js + example-py.py + example-go.go
|
|
206
|
+
- ❌ **Anlamsız etiketler:** helper1, step3, pattern4
|
|
207
|
+
|
|
208
|
+
## Test Türüne Göre
|
|
209
|
+
|
|
210
|
+
| Skill türü | Test yöntemi | Başarı kriteri |
|
|
211
|
+
|---|---|---|
|
|
212
|
+
| Disiplin (kural dayatır: TDD, verification) | Baskı senaryosu: zaman+sunk cost+baskı birleşik; bahaneleri yakala | Maksimum baskıda kurala uyar |
|
|
213
|
+
| Teknik (nasıl-yapılır) | Uygulama + varyasyon + eksik bilgi senaryoları | Tekniği yeni senaryoya doğru uygular |
|
|
214
|
+
| Desen (zihinsel model) | Tanıma + uygulama + karşı-örnek | Ne zaman uygulanacağını doğru bulur |
|
|
215
|
+
| Referans (API/komut dokümanı) | Erişim + uygulama + boşluk testi | Doğru bilgiyi bulur ve uygular |
|
|
216
|
+
|
|
217
|
+
## Deploy Etmeden ÖNCE
|
|
218
|
+
|
|
219
|
+
Her skill için (toplu üretimde her biri AYRI test edilmeden sonrakine geçme):
|
|
220
|
+
|
|
221
|
+
- [ ] Baseline (skill'siz) davranış birebir belgelendi
|
|
222
|
+
- [ ] description "ne zaman" tarzında, workflow özetlemiyor
|
|
223
|
+
- [ ] name kurallara uygun, dosya `%APPDATA%\beast\skills\<slug>\SKILL.md`
|
|
224
|
+
- [ ] Skill ile senaryo artık geçiyor
|
|
225
|
+
- [ ] Yeni bahaneler bulunduysa karşıları eklendi, tekrar test edildi
|
|
226
|
+
- [ ] Bahane tablosu + kırmızı bayraklar var (disiplin skill'i ise)
|
|
227
|
+
- [ ] `/skills` listesinde görünüyor, okunabilirlik kontrol edildi
|
|
228
|
+
|
|
229
|
+
Deploy edilmemiş skill = deploy edilmemiş kod. Test et, sonra konuşlandır.
|
package/src/agent/skills.js
CHANGED
|
@@ -102,7 +102,7 @@ Get-Content "$env:APPDATA\\beast\\sessions\\bg-jobs.json" | ConvertFrom-Json | %
|
|
|
102
102
|
| Yol | Ne İşe Yarar |
|
|
103
103
|
|---|---|
|
|
104
104
|
| \`config.yaml\` + \`.env\` | Model sağlayıcıları + API anahtarları (\`providers.<id>.base_url/key_env/models\`, aktif: \`model.provider/default\`) |
|
|
105
|
-
| \`settings.json\` | App ayarları: theme, workspace, modelOverride, customProviders, roleModels, deletedModels, fallout, waTts, email, waAllow, **searchChain (web arama sırası)**,
|
|
105
|
+
| \`settings.json\` | App ayarları: theme, workspace, modelOverride, customProviders, roleModels, deletedModels, fallout, waTts, email, waAllow, **searchChain (web arama sırası)**, activeBotId |
|
|
106
106
|
| \`sessions\\*.jsonl\` | Sohbet oturumları (satır JSON: t:meta kod, t:meta2 paralel-ajan işareti, t:msg mesaj, t:todo, t:notes) |
|
|
107
107
|
| \`sessions\\bg-jobs.json\` | Paralel ajan iş kayıtları: id, title, status(queued/running/done/error/aborted), error=İPTAL SEBEBİ, groupId |
|
|
108
108
|
| \`memories\\\` | SOUL.md (kişilik), MEMORY.md (uzun hafıza), USER.md (kullanıcı) |
|
|
@@ -112,7 +112,7 @@ Get-Content "$env:APPDATA\\beast\\sessions\\bg-jobs.json" | ConvertFrom-Json | %
|
|
|
112
112
|
| \`whitelist.json\`, \`wa-auth\\\`, \`wa-chats.json\`, \`wa.log\` | WhatsApp izin listesi, Baileys auth (SİLME), sohbet eşlemesi, log |
|
|
113
113
|
| \`cron.json\`, \`watchers.json\`, \`bus.json\` | Zamanlanmış görevler, web/batarya izleyicileri, olay abonelikleri |
|
|
114
114
|
| \`scripts\\\` | Python scriptleri (websearch.py, news.py) |
|
|
115
|
-
| \`
|
|
115
|
+
| \`searxng\\settings.yml\` | SearXNG yerel arama motoru ayarları (127.0.0.1:8888 — \`beast searxng\` ile kurulur/başlatılır) |
|
|
116
116
|
| \`py\\python.exe\` | Gömülü Python runtime (makinede Python olmasa bile python_run çalışır) |
|
|
117
117
|
| \`usage.json\`, \`logs\\\` | Kullanım sayaçları, çalışma logları |
|
|
118
118
|
| Masaüstü\\Beast-Backups | Şifreli yedekler (.beastbak) — /backup ile alınır |
|
|
@@ -121,14 +121,14 @@ Get-Content "$env:APPDATA\\beast\\sessions\\bg-jobs.json" | ConvertFrom-Json | %
|
|
|
121
121
|
|
|
122
122
|
| Dosya | Sorumluluk |
|
|
123
123
|
|---|---|
|
|
124
|
-
| \`main.js\` | Electron ana süreç: tüm IPC, WhatsApp/Telegram/Discord entegrasyonları, onay kapısı (/approve), /stop /restart, splash, gizli araştırma
|
|
124
|
+
| \`main.js\` | Electron ana süreç: tüm IPC, WhatsApp/Telegram/Discord entegrasyonları, onay kapısı (/approve), /stop /restart, splash, gizli araştırma tarayıcısı |
|
|
125
125
|
| \`agent/engine.js\` | OTURUM MOTORU: send/_run tur döngüsü, paralel ajanlar (run_background, run_background_many, tasks_list, task_status, task_cancel — task_cancel reason ZORUNLU), superyorizon (takılan işi zorla kapatır), iptal sebep disiplini, flushPendingReports |
|
|
126
126
|
| \`agent/tools.js\` | Araçlar + web_search SIRALI ZİNCİRİ (searchChain: 1 dahili tarayıcı(Google) → 2 Obscura(stealth→DuckDuckGo) → 3 TinyFish(anahtarsa) → 4 python çoklu-motor; sıra Ayarlar→Web Arama'dan değişir), run_command, read/write_file, python_run, http_fetch, deep_search |
|
|
127
127
|
| \`agent/llm.js\` | Sağlayıcı çağrısı + retry: ağ kopmasında 6 deneme + internet dönene kadar bekler; akış ortası kopmada kaldığı yerden devam |
|
|
128
128
|
| \`agent/agentdefs.js\` | Özel ajan tanımları: %APPDATA%\beast\agents\\*.md (frontmatter: model/tools/steps/mode + prompt gövdesi); /agent ile bağlanır, run_background(agent:) ile paralel ajana verilir |
|
|
129
|
-
| \`agent/
|
|
129
|
+
| \`agent/searxng.js\` | SearXNG entegrasyonu: gömülü Python'a kurulum + 127.0.0.1:8888 başlatıcı + JSON arama motoru |
|
|
130
130
|
| \`agent/bots.js\` | Bot CRUD, 5 haneli bot kodu, izolasyon; ad-ilk-harf doğrulaması |
|
|
131
|
-
| \`agent/skills.js\` | Builtin tohumlar (help, email, python-web-search, pdf, gold-trading) + SKILL.md taraması + taslaklar |
|
|
131
|
+
| \`agent/skills.js\` | Builtin tohumlar (help, email, python-web-search, pdf, gold-trading + superpowers metodoloji paketi: brainstorming/writing-plans/executing-plans/TDD/paralel-ajan/alt-ajan-geliştirme/sistematik-debugging/doğrulama/skill-yazma) + SKILL.md taraması + taslaklar |
|
|
132
132
|
| \`agent/memory.js\`, \`agent/kb.js\` | Kalıcı hafıza + bilgi bankası |
|
|
133
133
|
| \`cron.js\` (src kökü), \`agent/watchers.js\`, \`agent/bus.js\` | Cron, izleyici, olay merkezi — /stop bunlara DOKUNMAZ |
|
|
134
134
|
| \`agent/usage.js\` | Token/maliyet sayaçları |
|
|
@@ -235,9 +235,9 @@ web_search aracı çağrıldığında zincir OTOMATİK çalışır — elle moto
|
|
|
235
235
|
|
|
236
236
|
Gerçek Chromium olduğu için Google'a bot koruması uygulamaz. Arama aep=1 ile açılır: Google'ın KENDİ AI cevabı yanıtın 'ai' alanında HAZIR gelir — "kimdir/nedir" sorularında önce onu kullan, kaynak linkleri de 'results' alanında gelir. Sağ panelde açılır, kullanıcı da görebilir. CAPTCHA/trafik uyarısı gelirse tarayıcı 10 dk atlanır, sıradaki motor devreye girer.
|
|
237
237
|
|
|
238
|
-
## 2.
|
|
238
|
+
## 2. SearXNG (yerel metasearch — otomatik öncelik)
|
|
239
239
|
|
|
240
|
-
|
|
240
|
+
Ücretsiz, sınırsız, anahtarsız. \`beast searxng\` ile gömülü Python'a kurulur ve 127.0.0.1:8888'de arka planda çalışır. AYAKTAYSA zincirde nerede olursa olsun OTOMATİK ÖNE alınır (çok kaynaklı: Google/Bing/DDG…); kapalıysa sessizce atlanır.
|
|
241
241
|
|
|
242
242
|
## 3. TinyFish API (anahtar varsa)
|
|
243
243
|
|
|
@@ -452,16 +452,45 @@ function writeSeed(seed) {
|
|
|
452
452
|
} catch {}
|
|
453
453
|
}
|
|
454
454
|
|
|
455
|
+
/* Dosya tohumları: src/agent/seeds/<klasör>/SKILL.md — Superpowers metodoloji
|
|
456
|
+
paketi gibi kod dışı taşınan builtin skill'ler. Hepsi force: her açılışta
|
|
457
|
+
app sürümüyle güncellenir (kullanıcı düzenlemesi korunmaz, builtin'dir). */
|
|
458
|
+
function fileSeedsDir() {
|
|
459
|
+
return path.join(__dirname, 'seeds');
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
function loadFileSeeds() {
|
|
463
|
+
const out = [];
|
|
464
|
+
let entries;
|
|
465
|
+
try {
|
|
466
|
+
entries = fs.readdirSync(fileSeedsDir(), { withFileTypes: true });
|
|
467
|
+
} catch {
|
|
468
|
+
return out;
|
|
469
|
+
}
|
|
470
|
+
for (const e of entries) {
|
|
471
|
+
if (!e.isDirectory()) continue;
|
|
472
|
+
try {
|
|
473
|
+
out.push({
|
|
474
|
+
folder: e.name,
|
|
475
|
+
force: true,
|
|
476
|
+
body: fs.readFileSync(path.join(fileSeedsDir(), e.name, 'SKILL.md'), 'utf8'),
|
|
477
|
+
});
|
|
478
|
+
} catch {}
|
|
479
|
+
}
|
|
480
|
+
return out;
|
|
481
|
+
}
|
|
482
|
+
|
|
455
483
|
/* Kaldırılan eski tohumlar: kullanıcı makinesinden de silinir */
|
|
456
484
|
const RETIRED_SEEDS = ['free-web-search'];
|
|
457
485
|
|
|
458
486
|
function seedIfEmpty() {
|
|
487
|
+
const seeds = SEEDS.concat(loadFileSeeds());
|
|
459
488
|
if (!scan().length) {
|
|
460
|
-
for (const seed of
|
|
489
|
+
for (const seed of seeds) writeSeed(seed);
|
|
461
490
|
} else {
|
|
462
491
|
/* force tohumlar her açılışta güncellenir: varsayılan web arama skill'inin
|
|
463
492
|
içeriği hep güncel kalır (mevcut kurulum dahil) */
|
|
464
|
-
for (const seed of
|
|
493
|
+
for (const seed of seeds) {
|
|
465
494
|
if (seed.force) writeSeed(seed);
|
|
466
495
|
}
|
|
467
496
|
}
|
|
@@ -612,6 +641,7 @@ module.exports = {
|
|
|
612
641
|
scan,
|
|
613
642
|
seedIfEmpty,
|
|
614
643
|
parseFrontmatter,
|
|
644
|
+
loadFileSeeds,
|
|
615
645
|
addDraft,
|
|
616
646
|
listDrafts,
|
|
617
647
|
acceptDraft,
|