natureco-cli 5.49.0 → 5.50.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/CHANGELOG.md +12 -0
- package/SELF.md +116 -0
- package/package.json +2 -1
- package/src/tools/workflow.js +18 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to NatureCo CLI will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [5.50.0] - 2026-07-10 — "ÖZ-BİLGİ: ajan kendi evini tanıyor ve kendini onarabiliyor"
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **`SELF.md` — ajanın öz-bilgi haritası** (paket köküne eklenir, pakete dahil): mimari harita (chat→repl→workflow→agentic-runner akışı, gateway/tek-beyin, hafıza sistemi, skill sistemi, güvenlik katmanları, ~/.natureco veri haritası), dosya-görev tablosu ve **kendini onarma protokolü** (belirtiyi netleştir → haritadan dosyayı bul → read_file → edit_file → node --check ile doğrula → dürüstçe raporla → "kurulu paketteki düzeltme güncellemede ezilir" uyarısı).
|
|
9
|
+
- Sistem mesajındaki öz-bilgi bloğu SELF.md'ye işaret eder: kullanıcı "kendini incele / şu özelliğin bozuk / kendini onar / nasıl çalışıyorsun" dediğinde ajan önce haritayı okur, sonra ilgili kaynak dosyada çalışır. Token maliyeti düşük tutuldu (harita sysMsg'e GÖMÜLMEZ, istek üzerine okunur — progressive disclosure).
|
|
10
|
+
- E2E doğrulandı: "hafıza sistemin hangi dosyalarda, Türkçe arama sorununu hangi dosya çözüyor, kendini nasıl onarırsın?" → doğru dosyalar (`memory_tree.js`, `tr-text.js`...) + SELF.md protokol adımları.
|
|
11
|
+
|
|
12
|
+
## [5.49.1] - 2026-07-10 — "FIX: ajan kendi skill/araç envanterini yanlış anlatıyordu"
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
- **"Kaç skill'in var?" sorusuna ajan 9 diyordu (gerçek: 319).** Ajan kendi kurulumunu bilmediğinden dosya sistemini keşfe çıkıyor ve `~/.natureco/skills`'i (yalnız KULLANICI skill'leri) sayıp yanlış cevap veriyordu; yerleşiklerin paket içinde yaşadığından habersizdi. Sistem mesajına öz-bilgi eklendi: gerçek skill/araç sayıları + yerleşiklerin konumu + "~/.natureco/skills yerleşikleri içermez" notu. E2E doğrulandı: "kaç skillin var?" → "319 skill ve 90 araç" + doğru konum.
|
|
16
|
+
|
|
5
17
|
## [5.49.0] - 2026-07-10 — "Yerleşik skill/araçlar artık ~/.natureco altında görünür"
|
|
6
18
|
|
|
7
19
|
### Added
|
package/SELF.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# SELF.md — NatureCo CLI Öz-Bilgi Haritası
|
|
2
|
+
|
|
3
|
+
> Bu dosya AJANIN KENDİSİ içindir: kendi evinin haritası. Kullanıcı "şu özelliğin
|
|
4
|
+
> bozuldu / kendini incele / şunu onar" dediğinde ÖNCE burayı oku, ilgili dosyayı
|
|
5
|
+
> bul, `read_file` ile incele, `edit_file` ile onar, sonra doğrula.
|
|
6
|
+
> Şüphede kalırsan harita değil KAYNAK KOD doğrudur — dosyayı aç ve oku.
|
|
7
|
+
|
|
8
|
+
## Kimlik ve konum
|
|
9
|
+
|
|
10
|
+
- Ben `natureco-cli` npm paketiyim. Kurulum kökümü bu dosyanın bulunduğu klasörden bilirsin.
|
|
11
|
+
- Giriş noktası: `bin/natureco.js` (commander tabanlı komut yönlendirici; açılışta
|
|
12
|
+
güncelleme bildirimi `src/utils/update-check.js` ve `~/.natureco` bağlantıları
|
|
13
|
+
`src/utils/builtin-links.js` çalışır).
|
|
14
|
+
- Kullanıcı verileri KODDAN AYRIDIR: `~/.natureco/` (config.json, memory/, sessions,
|
|
15
|
+
crons.json, channel-history/, gateway.log...). Kod güncellenince veri korunur.
|
|
16
|
+
|
|
17
|
+
## Ana akışlar (bir özellik bozulduğunda önce akışı bul)
|
|
18
|
+
|
|
19
|
+
### 1. Sohbet: `natureco chat` → repl → workflow → agentic-runner
|
|
20
|
+
- `src/commands/chat.js` → `src/commands/repl.js`'i çağırır (Phase 9 TUI).
|
|
21
|
+
- `repl.js`: girdi okuma, oturum yönetimi, hafıza yükleme (`loadMemory`), her mesajı
|
|
22
|
+
`workflow` aracına gönderir, yanıtı model-adı temizliğinden geçirir
|
|
23
|
+
(MiniMax/Claude → bot adı), oturum sonunda `extractPreferenceFacts` ile korumalı
|
|
24
|
+
otomatik hafıza kaydı yapar (ajan zaten yazdıysa atlanır).
|
|
25
|
+
- `src/tools/workflow.js`: ORKESTRATÖR. `execute({action:'run', task, conversationHistory})`.
|
|
26
|
+
- Tool-calling desteklemeyen sağlayıcılar (MiniMax/Gemini/Groq/Ollama) →
|
|
27
|
+
`src/tools/agentic-runner.js` (XML `<invoke>` protokolünü parse edip araçları
|
|
28
|
+
çalıştıran sınırlı döngü, maxIterations 15, DEFAULT_ALLOWED allowlist).
|
|
29
|
+
- Sistem mesajı burada kurulur: kullanıcı hafızası + ağaç-hafıza digest +
|
|
30
|
+
skill index (`src/utils/skill-index.js`) + araç tanıtımları + öz-bilgi.
|
|
31
|
+
- YENİ ARAÇ EKLERKEN 3 YER: `src/tools/<ad>.js` dosyası + agentic-runner
|
|
32
|
+
DEFAULT_ALLOWED + workflow.js sysMsg tanıtımı. Biri eksikse araç "phantom"
|
|
33
|
+
olur (var ama ajan çağıramaz) — geçmişte cron/web_search/todo bu yüzden bozuktu.
|
|
34
|
+
- `src/utils/api.js`: OpenAI/Anthropic tool_calls yolu (`sendMessage`,
|
|
35
|
+
`sendMessageToProvider`) + konuşma kalıcılığı + MCP istemcileri.
|
|
36
|
+
|
|
37
|
+
### 2. Mesajlaşma kanalları: `natureco gateway start`
|
|
38
|
+
- `src/commands/gateway.js` (başlat/durdur) → `src/commands/gateway-server.js`
|
|
39
|
+
(worker; Telegram/WhatsApp/Signal/IRC/Mattermost/iMessage/SMS sağlayıcıları).
|
|
40
|
+
- TEK BEYİN: güvenilir (allow-list'teki) gönderen `src/utils/channel-brain.js`
|
|
41
|
+
üzerinden terminaldekiyle AYNI workflow ajanına gider (aynı kişilik + hafıza).
|
|
42
|
+
Kanal-içi kısa geçmiş: `~/.natureco/channel-history/<kanal>_<sohbet>.json`.
|
|
43
|
+
- Güvenlik: `channelGate(config, kanal, gönderen)` — allow-list doluysa dışındakiler
|
|
44
|
+
engellenir; boşsa yanıt verilir ama hafızasız + araçsız (`noTools`).
|
|
45
|
+
|
|
46
|
+
### 3. Hafıza (en kritik özellik — "yanlış hatırlamak hiç hatırlamamaktan kötü")
|
|
47
|
+
- Düz hafıza: `~/.natureco/memory/<kullanıcı>.json` (+ eski `default.json` birleşir).
|
|
48
|
+
Araç: `src/tools/memory_write.js`. Okuyucu: workflow `loadUserMemory`.
|
|
49
|
+
- Ağaç hafıza: `~/.natureco/memory/tree/<kullanıcı>/` (1-kisisel/2-teknik/3-kararlar
|
|
50
|
+
→ ## dal → yaprak). Araç: `src/tools/memory_tree.js` (index|read|search|append|remove;
|
|
51
|
+
yazma-anı dedup/çelişki uyarısı içerir). Digest her istekte sysMsg'e gömülür.
|
|
52
|
+
- Türkçe arama: `src/utils/tr-text.js` `foldTr` (İ/I/ı/i tek form — JS toLowerCase
|
|
53
|
+
Türkçe'de GÜVENİLMEZ). Hafıza hijyeni: `src/utils/memory-lint.js` (`natureco memory lint`).
|
|
54
|
+
- Bekleyen işler: 3-kararlar/"Bekleyen İşler" dalı; repl açılışta hatırlatır.
|
|
55
|
+
|
|
56
|
+
### 4. Skill sistemi
|
|
57
|
+
- Yerleşikler: paket kökünde `skills/` (her biri `<ad>/SKILL.md`, YAML frontmatter).
|
|
58
|
+
Kullanıcınınkiler: `~/.natureco/skills/`. Proje: `./.natureco/skills/`.
|
|
59
|
+
- İndeks: `src/utils/skill-index.js` (`_discoverSkills`, `buildSkillIndex` — 60+
|
|
60
|
+
skill'de KOMPAKT isim listesi üretir, token şişmesin diye; `NATURECO_SKILL_INDEX` env).
|
|
61
|
+
- Yükleme: ajan `skill_view` aracıyla (progressive disclosure). CLI: `src/commands/skills.js`
|
|
62
|
+
+ `src/utils/skills.js` (list/install/remove; indirme allowlist'i `skills-allowlist.json`).
|
|
63
|
+
- Görünürlük bağlantıları: `~/.natureco/skills-builtin` ve `~/.natureco/tools`
|
|
64
|
+
(junction/symlink, `src/utils/builtin-links.js`).
|
|
65
|
+
|
|
66
|
+
### 5. Güvenlik katmanları (GEVŞETME — bilinçli tasarım)
|
|
67
|
+
- `src/utils/exec-policy.js` + `src/commands/exec-policy.js`: bash komutları için
|
|
68
|
+
deny-by-default allowlist; yıkıcı komutlar (`rm -rf /` vb.) agentic yolda HER
|
|
69
|
+
modda bloklu (`isDangerousCommand`, agentic-runner içinde).
|
|
70
|
+
- Tam mod: `config set agentExec full` → tüm ~90 araç açılır; yıkıcılar yine bloklu.
|
|
71
|
+
- Her araç KENDİ güvenliğini uygular (allowlist'e güvenme) — tool_calls yolu
|
|
72
|
+
(api.js) tüm src/tools/*.js'i yükleyebilir. Shell çağrısı `execFileSync`
|
|
73
|
+
(shell:false) tercih edilir; string + execSync = komut enjeksiyonu riski.
|
|
74
|
+
- Kanal/webhook: gönderen doğrulama + imza kontrolü. Admin RPC: 127.0.0.1 + bearer token.
|
|
75
|
+
|
|
76
|
+
### 6. Diğer önemli parçalar
|
|
77
|
+
- `src/commands/cron.js` + cron_create aracı: zamanlanmış görevler `~/.natureco/crons.json`;
|
|
78
|
+
fiilen çalışması için daemon gerekir (`natureco daemon start|install`).
|
|
79
|
+
- `src/commands/status.js`: sürüm/gateway/provider/skill/araç özeti (teşhis için ilk bakılacak yer).
|
|
80
|
+
- `src/commands/memory-cmd.js`: `natureco memory lint|search`.
|
|
81
|
+
- `src/utils/config.js`: `~/.natureco/config.json` okuma/yazma (0600 izin).
|
|
82
|
+
- `src/utils/tui.js` + `src/utils/branding.js`: TUI bileşenleri + ASCII logo.
|
|
83
|
+
- `src/commands/tools.js`: araç kataloğunu listeler. Araç kaynakları: `src/tools/*.js`
|
|
84
|
+
(~90 dosya; her modül `{name, description, inputSchema, execute}` dışa verir).
|
|
85
|
+
|
|
86
|
+
## Kendini onarma protokolü
|
|
87
|
+
|
|
88
|
+
1. Belirtiyi netleştir: hangi komut/özellik, hata mesajı ne, `natureco status` çıktısı.
|
|
89
|
+
2. Bu haritadan ilgili akışı ve dosyayı bul; `read_file` ile oku (önce oku, sonra düzelt).
|
|
90
|
+
3. `grep_search` ile ilgili fonksiyon/hata metnini kaynakta ara (kurulum kökünde).
|
|
91
|
+
4. Düzeltmeyi `edit_file` ile hedefli yap (dosyayı komple yeniden yazma).
|
|
92
|
+
5. Doğrula: `node --check <dosya>` (sözdizimi) ve mümkünse ilgili komutu çalıştır.
|
|
93
|
+
Test paketi kurulum kökünde: `npm test` (vitest; dev bağımlılıkları global
|
|
94
|
+
kurulumda olmayabilir — yoksa node --check + elle deneme yeterlidir).
|
|
95
|
+
6. Kullanıcıya NE bozuktu, NEYİ değiştirdin, NASIL doğruladın — dürüstçe söyle.
|
|
96
|
+
7. ÖNEMLİ: kurulu paketteki düzeltmeler bir sonraki `npm install -g natureco-cli`
|
|
97
|
+
güncellemesinde ezilir. Kalıcı çözüm için kullanıcıya "bu düzeltme geçici;
|
|
98
|
+
kalıcısı yeni sürümde yayınlanmalı" de.
|
|
99
|
+
|
|
100
|
+
## Veri haritası (~/.natureco)
|
|
101
|
+
|
|
102
|
+
| Yol | İçerik |
|
|
103
|
+
|---|---|
|
|
104
|
+
| `config.json` | sağlayıcı, bot adı, kullanıcı adı, kanal tokenları (0600) |
|
|
105
|
+
| `memory/<kullanıcı>.json` | düz hafıza fact'leri |
|
|
106
|
+
| `memory/tree/<kullanıcı>/` | ağaç hafıza (kalıcı bilgi) |
|
|
107
|
+
| `sessions/`, `sessions.json` | REPL oturumları |
|
|
108
|
+
| `channel-history/` | kanal başına kısa konuşma geçmişi |
|
|
109
|
+
| `crons.json` | zamanlanmış görevler |
|
|
110
|
+
| `skills/` | kullanıcının kendi skill'leri |
|
|
111
|
+
| `skills-builtin` → paket | yerleşik skill bağlantısı |
|
|
112
|
+
| `tools` → paket | araç kaynakları bağlantısı |
|
|
113
|
+
| `gateway.log`, `gateway.pid` | kanal sunucusu |
|
|
114
|
+
| `update-check.json` | sürüm bildirimi önbelleği |
|
|
115
|
+
| `exec-approvals.json`, `perm-approvals.json` | izin kayıtları |
|
|
116
|
+
| `audit/` | denetim logları |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "natureco-cli",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.50.0",
|
|
4
4
|
"description": "OpenClaw'dan daha güvenli, daha hızlı, daha ucuz AI agent CLI. Multi-agent, self-evolving skills, audit log, maliyet optimizasyonu ve NatureCo platform-native.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"natureco": "bin/natureco.js"
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"scripts/",
|
|
12
12
|
"skills/",
|
|
13
13
|
"README.md",
|
|
14
|
+
"SELF.md",
|
|
14
15
|
"CHANGELOG.md",
|
|
15
16
|
"AUDIT.md",
|
|
16
17
|
"SECURITY_AUDIT_SUMMARY.md",
|
package/src/tools/workflow.js
CHANGED
|
@@ -250,10 +250,27 @@ async function workflow(params) {
|
|
|
250
250
|
'\nTum arac listesi (isimle cagir; parametre yanlissa <tool_results> duzeltir): ' + allNames.join(', '),
|
|
251
251
|
].join('\n');
|
|
252
252
|
}
|
|
253
|
+
// Oz-bilgi: ajan "kac skill'in/aracin var, nerede kayitli" sorularinda dosya
|
|
254
|
+
// sistemini kesfe cikip YANLIS sayiyordu (~/.natureco/skills yalniz kullanici
|
|
255
|
+
// skill'leridir; yerlesikler paketin icindedir). Gercek sayilari ve konumlari
|
|
256
|
+
// sistem mesajina gomuyoruz ki ajan kendi kurulumunu dogru anlatsin.
|
|
257
|
+
let selfInfo = '';
|
|
258
|
+
try {
|
|
259
|
+
const skillCount = require('../utils/skill-index')._discoverSkills().length;
|
|
260
|
+
const pkgRoot = path.join(__dirname, '..', '..');
|
|
261
|
+
selfInfo = '\n\nKendi kurulumun (kullanici sorarsa BU bilgiyi kullan, dosya sayarak tahmin etme):'
|
|
262
|
+
+ '\n- Toplam skill: ' + skillCount + ' (yerlesikler paketle gelir: ' + path.join(pkgRoot, 'skills') + ' — ~/.natureco/skills-builtin baglantisi da ayni yere acilir)'
|
|
263
|
+
+ '\n- Toplam arac: ' + tools.length + ' (kaynaklari: ' + path.join(pkgRoot, 'src', 'tools') + ' — ~/.natureco/tools baglantisi)'
|
|
264
|
+
+ '\n- ~/.natureco/skills SADECE kullanicinin kendi ekledigi skill\'lerdir; yerlesikleri ICERMEZ.'
|
|
265
|
+
+ '\n- OZ-BILGI HARITAN: ' + path.join(pkgRoot, 'SELF.md') + ' — kendi mimarin, dosya haritasi ve KENDINI ONARMA protokolun.'
|
|
266
|
+
+ ' Kullanici "kendini incele / su ozelligin bozuk / kendini onar / nasil calisiyorsun" derse ONCE bu dosyayi read_file ile oku,'
|
|
267
|
+
+ ' ilgili kaynak dosyayi bul-oku, gerekirse edit_file ile onar, node --check ile dogrula ve yaptigini durustce anlat.';
|
|
268
|
+
} catch { /* sayilamazsa satiri atla */ }
|
|
269
|
+
|
|
253
270
|
const sysMsg = [
|
|
254
271
|
'Sen NatureCo adli, arac kullanabilen bir yapay zeka ajanisin. Kullanicinin istegini SADECE anlatarak degil, ARACLARI cagirarak fiilen gerceklestir.',
|
|
255
272
|
memCtx ? '\nKullanici bilgisi:\n' + memCtx : '',
|
|
256
|
-
'\n\nOrtam:\n- Isletim sistemi: ' + process.platform + '\n- Kullanici home: ' + os.homedir() + '\n- Masaustu: ' + desktop + '\n- Calisma dizini: ' + process.cwd(),
|
|
273
|
+
'\n\nOrtam:\n- Isletim sistemi: ' + process.platform + '\n- Kullanici home: ' + os.homedir() + '\n- Masaustu: ' + desktop + '\n- Calisma dizini: ' + process.cwd() + selfInfo,
|
|
257
274
|
'\n\nArac cagirmak icin TAM olarak su formati kullan:\n<minimax:tool_call>\n<invoke name="ARAC_ADI">\n<parameter name="PARAM">DEGER</parameter>\n</invoke>\n</minimax:tool_call>',
|
|
258
275
|
'\n\nKullanabilecegin araclar:',
|
|
259
276
|
'- write_file: dosya olustur/uzerine yaz. parametreler: path (TAM yol), content (dosyanin TAM icerigi). Kod/oyun/site isteniyorsa TUM icerigi content icine yaz, kisaltma.',
|