natureco-cli 5.48.0 → 5.49.1

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 CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to NatureCo CLI will be documented in this file.
4
4
 
5
+ ## [5.49.1] - 2026-07-10 — "FIX: ajan kendi skill/araç envanterini yanlış anlatıyordu"
6
+
7
+ ### Fixed
8
+ - **"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.
9
+
10
+ ## [5.49.0] - 2026-07-10 — "Yerleşik skill/araçlar artık ~/.natureco altında görünür"
11
+
12
+ ### Added
13
+ - **`~/.natureco/skills-builtin` ve `~/.natureco/tools` bağlantıları** (`src/utils/builtin-links.js`): Yerleşik skill'ler ve araç kaynakları npm paketinin içinde yaşar ve oradan çalışır; ama kullanıcılar `~/.natureco`'ya bakıp "yok" sanıyordu. CLI artık her açılışta dizin bağlantısı kurar (Windows: junction — yönetici gerektirmez; macOS/Linux: symlink). Kopya yok: paket güncellenince içerik otomatik günceldir. Kırık/yanlış hedefli bağlantı onarılır; bağlantı olmayan GERÇEK klasöre asla dokunulmaz (kullanıcı verisi korunur). 5 yeni test.
14
+ - `natureco skills list` başlığı üç konumu da gösterir: yerleşikler (`skills-builtin`), kişiseller (`skills`), araçlar (`tools`).
15
+
16
+ ### Notes
17
+ - Skill keşfi bu bağlantıları taramaz — çift sayım olmaz; işlevsel yol değişmedi, bu salt görünürlük/gezilebilirlik.
18
+
5
19
  ## [5.48.0] - 2026-07-10 — "Güncelleme bildirimi + skill/araç görünürlüğü"
6
20
 
7
21
  ### Context
package/bin/natureco.js CHANGED
@@ -8,6 +8,8 @@ require('../src/utils/process-errors').install();
8
8
  // Yeni sürüm bildirimi (önbellekten senkron basar; ağı arka planda, engellemeden tazeler).
9
9
  // Eski sürümde kalan kullanıcılar yeni skill/araçlardan haberdar olsun diye eklendi.
10
10
  try { require('../src/utils/update-check').maybeNotify(packageJson.version); } catch { /* asla komutu bozma */ }
11
+ // Yerleşik skill/araçları ~/.natureco altında görünür yap (junction/symlink; kopya yok)
12
+ try { require('../src/utils/builtin-links').ensureBuiltinLinks(); } catch { /* asla komutu bozma */ }
11
13
  const login = require('../src/commands/login');
12
14
  const logout = require('../src/commands/logout');
13
15
  const bots = require('../src/commands/bots');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "natureco-cli",
3
- "version": "5.48.0",
3
+ "version": "5.49.1",
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"
@@ -207,7 +207,7 @@ async function listSkills() {
207
207
 
208
208
  console.log(chalk.gray('\n ' + '─'.repeat(48)));
209
209
  console.log(chalk.cyan.bold('\n Yüklü Skill\'ler') + chalk.gray(` — toplam ${allSkills.length} (${builtinCount} yerleşik${userCount ? `, ${userCount} kişisel` : ''})`));
210
- console.log(chalk.gray(' Yerleşik skill\'ler paketle birlikte gelir; kişisel skill\'ler ~/.natureco/skills altında yaşar.\n'));
210
+ console.log(chalk.gray(' Yerleşikler: ~/.natureco/skills-builtin · Kişiseller: ~/.natureco/skills · Araçlar: ~/.natureco/tools\n'));
211
211
 
212
212
  if (allSkills.length === 0) {
213
213
  // Yerleşikler pakette gelir; bu duruma normalde ancak paket bozulursa düşülür
@@ -250,10 +250,24 @@ 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
+ } catch { /* sayilamazsa satiri atla */ }
266
+
253
267
  const sysMsg = [
254
268
  'Sen NatureCo adli, arac kullanabilen bir yapay zeka ajanisin. Kullanicinin istegini SADECE anlatarak degil, ARACLARI cagirarak fiilen gerceklestir.',
255
269
  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(),
270
+ '\n\nOrtam:\n- Isletim sistemi: ' + process.platform + '\n- Kullanici home: ' + os.homedir() + '\n- Masaustu: ' + desktop + '\n- Calisma dizini: ' + process.cwd() + selfInfo,
257
271
  '\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
272
  '\n\nKullanabilecegin araclar:',
259
273
  '- write_file: dosya olustur/uzerine yaz. parametreler: path (TAM yol), content (dosyanin TAM icerigi). Kod/oyun/site isteniyorsa TUM icerigi content icine yaz, kisaltma.',
@@ -0,0 +1,59 @@
1
+ /**
2
+ * builtin-links — yerleşik skill ve araçları ~/.natureco altında GÖRÜNÜR yapar.
3
+ *
4
+ * Saha raporu (v5.48 sonrası): "~/.natureco içinde skill/araç yok". Yerleşikler
5
+ * npm paketinin içinde yaşar (node_modules/natureco-cli/...) ve işlevsel olarak
6
+ * çalışırlar; ama kullanıcı "sistem dosyalarında" göremiyor. Kopyalamak yerine
7
+ * dizin bağlantısı kurulur (Windows: junction — yönetici GEREKTİRMEZ; unix: symlink):
8
+ *
9
+ * ~/.natureco/skills-builtin → <paket>/skills (yerleşik skill'ler)
10
+ * ~/.natureco/tools → <paket>/src/tools (araç kaynakları)
11
+ *
12
+ * Kazanımlar: gezinilebilir + paket güncellenince otomatik güncel + sıfır kopya.
13
+ * Skill keşfi bu bağlantıları TARAMAZ (çift sayım olmaz) — bu salt görünürlük.
14
+ * Kullanıcının kendi skill'leri ~/.natureco/skills'te yaşamaya devam eder.
15
+ */
16
+
17
+ const fs = require('fs');
18
+ const path = require('path');
19
+ const os = require('os');
20
+
21
+ const LINKS = [
22
+ { name: 'skills-builtin', target: path.join(__dirname, '..', '..', 'skills') },
23
+ { name: 'tools', target: path.join(__dirname, '..', 'tools') },
24
+ ];
25
+
26
+ /**
27
+ * Bağlantıları kurar/onarır. Hızlıdır (birkaç lstat) — her CLI açılışında çağrılır.
28
+ * @param {string} [baseDir] test için ~/.natureco yerine kullanılacak dizin
29
+ */
30
+ function ensureBuiltinLinks(baseDir) {
31
+ const base = baseDir || path.join(os.homedir(), '.natureco');
32
+ for (const { name, target } of LINKS) {
33
+ try {
34
+ if (!fs.existsSync(target)) continue; // paket bozuksa sessiz geç
35
+ const linkPath = path.join(base, name);
36
+
37
+ let st = null;
38
+ try { st = fs.lstatSync(linkPath); } catch { /* yok — kurulacak */ }
39
+
40
+ if (st) {
41
+ if (st.isSymbolicLink()) {
42
+ // Mevcut bağlantı doğru hedefe mi işaret ediyor? (npm prefix değişmiş olabilir)
43
+ let ok = false;
44
+ try { ok = fs.realpathSync(linkPath) === fs.realpathSync(target); } catch { /* kırık link */ }
45
+ if (ok) continue;
46
+ fs.unlinkSync(linkPath); // yanlış/kırık — yeniden kur
47
+ } else {
48
+ // Gerçek dosya/klasör (bağlantı değil): kullanıcı verisi olabilir — DOKUNMA
49
+ continue;
50
+ }
51
+ }
52
+
53
+ fs.mkdirSync(base, { recursive: true });
54
+ fs.symlinkSync(target, linkPath, process.platform === 'win32' ? 'junction' : 'dir');
55
+ } catch { /* bağlantı kurulamazsa komutu bozma — görünürlük kritik işlev değil */ }
56
+ }
57
+ }
58
+
59
+ module.exports = { ensureBuiltinLinks, _internal: { LINKS } };