natureco-cli 5.60.0 → 5.62.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.
@@ -1,4 +1,6 @@
1
- const chalk = require('chalk');
1
+ const chalk = require('chalk');
2
+ const { getLang: _gl } = require('../utils/i18n');
3
+ const L = (tr, en) => (_gl() === 'en' ? en : tr);
2
4
  const fs = require('fs');
3
5
  const path = require('path');
4
6
  const os = require('os');
@@ -17,8 +19,8 @@ async function security(args) {
17
19
 
18
20
  if (action === 'secrets') return scanSecrets(args);
19
21
 
20
- console.log(chalk.red(`\n ❌ Bilinmeyen komut: ${action}\n`));
21
- console.log(chalk.gray(' Kullanım: natureco security [audit|allowlist|policy|secrets]\n'));
22
+ console.log(chalk.red(`\n ❌ ${L('Bilinmeyen komut', 'Unknown command')}: ${action}\n`));
23
+ console.log(chalk.gray(L(' Kullanım: natureco security [audit|allowlist|policy|secrets]\n', ' Usage: natureco security [audit|allowlist|policy|secrets]\n')));
22
24
  process.exit(1);
23
25
  }
24
26
 
@@ -58,7 +60,7 @@ async function allowlistAction(args) {
58
60
  return;
59
61
  }
60
62
 
61
- console.log(chalk.gray('\n Kullanım:'));
63
+ console.log(chalk.gray(L('\n Kullanım:', '\n Usage:')));
62
64
  console.log(chalk.gray(' natureco security allowlist list'));
63
65
  console.log(chalk.gray(' natureco security allowlist add "<command>"'));
64
66
  console.log(chalk.gray(' natureco security allowlist remove <id>\n'));
@@ -79,7 +81,7 @@ async function policyAction(args) {
79
81
  return;
80
82
  }
81
83
 
82
- console.log(chalk.gray('\n Kullanım:'));
84
+ console.log(chalk.gray(L('\n Kullanım:', '\n Usage:')));
83
85
  console.log(chalk.gray(' natureco security policy set deny|allowlist|full'));
84
86
  console.log(chalk.gray('\n Policy levels:'));
85
87
  console.log(chalk.gray(' deny - Block all command execution'));
@@ -140,11 +142,11 @@ async function audit(args) {
140
142
  if (process.platform !== 'win32' && mode !== '600' && mode !== '644') {
141
143
  issues.push({
142
144
  id: 'config-permissions',
143
- msg: `Config dosyası izinleri geniş: ${mode} (önerilen: 600)`,
145
+ msg: `${L('Config dosyası izinleri geniş', 'Config file permissions too broad')}: ${mode} ${L('(önerilen: 600)', '(recommended: 600)')}`,
144
146
  fix: () => fs.chmodSync(CONFIG_FILE, 0o600),
145
147
  });
146
148
  } else {
147
- ok.push('Config dosyası izinleri');
149
+ ok.push(L('Config dosyası izinleri', 'Config file permissions'));
148
150
  }
149
151
  } catch {}
150
152
  }
@@ -153,7 +155,7 @@ async function audit(args) {
153
155
  const config = getConfig();
154
156
  if (config.providerApiKey) {
155
157
  if (config.providerApiKey.length < 10) {
156
- issues.push({ id: 'weak-api-key', msg: 'API key çok kısa görünüyor' });
158
+ issues.push({ id: 'weak-api-key', msg: L('API key çok kısa görünüyor', 'API key looks too short') });
157
159
  } else {
158
160
  ok.push('API key formatı');
159
161
  }
@@ -161,9 +163,9 @@ async function audit(args) {
161
163
 
162
164
  // 3. Debug mode
163
165
  if (config.debug === true) {
164
- warnings.push({ id: 'debug-mode', msg: 'Debug modu açık — API key\'ler loglara yazılabilir' });
166
+ warnings.push({ id: 'debug-mode', msg: L('Debug modu açık — API key\'ler loglara yazılabilir', 'Debug mode on — API keys may be written to logs') });
165
167
  } else {
166
- ok.push('Debug modu kapalı');
168
+ ok.push(L('Debug modu kapalı', 'Debug mode off'));
167
169
  }
168
170
 
169
171
  // 4. WhatsApp session dosyaları
@@ -171,9 +173,9 @@ async function audit(args) {
171
173
  if (fs.existsSync(waDir)) {
172
174
  const sessions = fs.readdirSync(waDir);
173
175
  if (sessions.length > 3) {
174
- warnings.push({ id: 'old-wa-sessions', msg: `${sessions.length} WhatsApp session var — eskiler temizlenebilir` });
176
+ warnings.push({ id: 'old-wa-sessions', msg: `${sessions.length} WhatsApp ${L('session var — eskiler temizlenebilir', 'sessions — old ones can be cleaned')}` });
175
177
  } else {
176
- ok.push('WhatsApp session sayısı');
178
+ ok.push(L('WhatsApp session sayısı', 'WhatsApp session count'));
177
179
  }
178
180
  }
179
181
 
@@ -183,9 +185,9 @@ async function audit(args) {
183
185
  const stat = fs.statSync(logFile);
184
186
  const sizeMB = stat.size / (1024 * 1024);
185
187
  if (sizeMB > 50) {
186
- warnings.push({ id: 'large-log', msg: `Gateway log dosyası büyük: ${sizeMB.toFixed(1)}MB` });
188
+ warnings.push({ id: 'large-log', msg: `${L('Gateway log dosyası büyük', 'Gateway log file large')}: ${sizeMB.toFixed(1)}MB` });
187
189
  } else {
188
- ok.push('Gateway log boyutu');
190
+ ok.push(L('Gateway log boyutu', 'Gateway log size'));
189
191
  }
190
192
  }
191
193
 
@@ -194,9 +196,9 @@ async function audit(args) {
194
196
  if (fs.existsSync(convDir)) {
195
197
  const convFiles = fs.readdirSync(convDir).filter(f => f.endsWith('.json'));
196
198
  if (convFiles.length > 20) {
197
- warnings.push({ id: 'old-conversations', msg: `${convFiles.length} konuşma dosyası var — eskiler temizlenebilir` });
199
+ warnings.push({ id: 'old-conversations', msg: `${convFiles.length} ${L('konuşma dosyası var — eskiler temizlenebilir', 'conversation files — old ones can be cleaned')}` });
198
200
  } else {
199
- ok.push('Konuşma dosyası sayısı');
201
+ ok.push(L('Konuşma dosyası sayısı', 'Conversation file count'));
200
202
  }
201
203
  }
202
204
 
@@ -245,7 +247,7 @@ async function audit(args) {
245
247
 
246
248
  console.log('');
247
249
  console.log(chalk.gray(' ' + '─'.repeat(48)));
248
- console.log(chalk.cyan.bold('\n Güvenlik Denetimi\n'));
250
+ console.log(chalk.cyan.bold(L('\n Güvenlik Denetimi\n', '\n Security Audit\n')));
249
251
 
250
252
  ok.forEach(msg => console.log(chalk.green(' ✓ ') + chalk.gray(msg)));
251
253
 
@@ -263,11 +265,11 @@ async function audit(args) {
263
265
  console.log(chalk.gray(' ' + '─'.repeat(48)));
264
266
 
265
267
  if (issues.length === 0 && warnings.length === 0) {
266
- console.log(chalk.green(' ✓ Güvenlik sorunu bulunamadı\n'));
268
+ console.log(chalk.green(L(' ✓ Güvenlik sorunu bulunamadı\n', ' ✓ No security issues found\n')));
267
269
  return;
268
270
  }
269
271
 
270
- console.log(chalk.gray(` ${ok.length} geçti · ${warnings.length} uyarı · ${issues.length} sorun`));
272
+ console.log(chalk.gray(` ${ok.length} ${L('geçti', 'passed')} · ${warnings.length} ${L('uyarı', 'warnings')} · ${issues.length} ${L('sorun', 'issues')}`));
271
273
 
272
274
  if (fix && issues.length > 0) {
273
275
  console.log('');
@@ -275,14 +277,14 @@ async function audit(args) {
275
277
  if (i.fix) {
276
278
  try {
277
279
  i.fix();
278
- console.log(chalk.green(` ✓ Düzeltildi: ${i.id}`));
280
+ console.log(chalk.green(` ✓ ${L('Düzeltildi', 'Fixed')}: ${i.id}`));
279
281
  } catch (e) {
280
- console.log(chalk.red(` ❌ Düzeltilemedi: ${i.id} — ${e.message}`));
282
+ console.log(chalk.red(` ❌ ${L('Düzeltilemedi', 'Could not fix')}: ${i.id} — ${e.message}`));
281
283
  }
282
284
  }
283
285
  });
284
286
  } else if (issues.length > 0) {
285
- console.log(chalk.gray('\n Otomatik düzeltmek için: ') + chalk.cyan('natureco security audit --fix'));
287
+ console.log(chalk.gray(L('\n Otomatik düzeltmek için: ', '\n To auto-fix: ')) + chalk.cyan('natureco security audit --fix'));
286
288
  }
287
289
  console.log('');
288
290
  }
@@ -1,5 +1,7 @@
1
1
  const chalk = require('chalk');
2
2
  const os = require('os');
3
+ const { getLang: _gl } = require('../utils/i18n');
4
+ const L = (tr, en) => (_gl() === 'en' ? en : tr);
3
5
 
4
6
  function system(args) {
5
7
  const [action, ...params] = args || [];
@@ -9,7 +11,7 @@ function system(args) {
9
11
  if (action === 'presence') return systemPresence();
10
12
 
11
13
  console.log(chalk.red(`\n ❌ Bilinmeyen komut: ${action}\n`));
12
- console.log(chalk.gray(' Kullanım: natureco system [status|events|presence]\n'));
14
+ console.log(chalk.gray(L(' Kullanım: natureco system [status|events|presence]\n', ' Usage: natureco system [status|events|presence]\n')));
13
15
  process.exit(1);
14
16
  }
15
17
 
@@ -1,5 +1,7 @@
1
1
  const chalk = require('chalk');
2
2
  const fs = require('fs');
3
+ const { getLang: _gl } = require('../utils/i18n');
4
+ const L = (tr, en) => (_gl() === 'en' ? en : tr);
3
5
  const path = require('path');
4
6
  const os = require('os');
5
7
  const { execSync, spawn } = require('child_process');
@@ -30,14 +32,14 @@ function terminal(args) {
30
32
  if (action === 'list') return listSessions();
31
33
 
32
34
  console.log(chalk.red(`\n ❌ Bilinmeyen komut: ${action}\n`));
33
- console.log(chalk.gray(' Kullanım: natureco terminal [exec|connect|disconnect|list]\n'));
35
+ console.log(chalk.gray(L(' Kullanım: natureco terminal [exec|connect|disconnect|list]\n', ' Usage: natureco terminal [exec|connect|disconnect|list]\n')));
34
36
  process.exit(1);
35
37
  }
36
38
 
37
39
  function execCmd(cmd) {
38
40
  if (!cmd) {
39
- console.log(chalk.red('\n ❌ Komut gerekli\n'));
40
- console.log(chalk.gray(' Örnek: natureco terminal exec "ls -la"\n'));
41
+ console.log(chalk.red(L('\n ❌ Komut gerekli\n', '\n ❌ Command required\n')));
42
+ console.log(chalk.gray(L(' Örnek: natureco terminal exec "ls -la"\n', ' Example: natureco terminal exec "ls -la"\n')));
41
43
  process.exit(1);
42
44
  }
43
45
  console.log(chalk.cyan(`\n 🖥️ $ ${cmd}\n`));
@@ -45,24 +47,24 @@ function execCmd(cmd) {
45
47
  try {
46
48
  const output = execSync(cmd, { encoding: 'utf8', timeout: 30000, maxBuffer: 1024 * 1024 });
47
49
  if (output) console.log(output);
48
- console.log(chalk.green(`\n ✅ Komut başarıyla tamamlandı (${output.length} bytes)\n`));
50
+ console.log(chalk.green(`\n ✅ ${L('Komut başarıyla tamamlandı', 'Command completed successfully')} (${output.length} bytes)\n`));
49
51
  } catch (err) {
50
52
  if (err.stdout) console.log(err.stdout.toString());
51
53
  if (err.stderr) console.log(chalk.red(err.stderr.toString()));
52
- console.log(chalk.red(`\n ❌ Hata: ${err.message}\n`));
54
+ console.log(chalk.red(`\n ❌ ${L('Hata', 'Error')}: ${err.message}\n`));
53
55
  }
54
56
  }
55
57
 
56
58
  function connectSession(target, cmd) {
57
59
  if (!target) {
58
- console.log(chalk.red('\n ❌ Hedef gerekli (örn: local, ssh://user@host)\n'));
60
+ console.log(chalk.red(L('\n ❌ Hedef gerekli (örn: local, ssh://user@host)\n', '\n ❌ Target required (e.g. local, ssh://user@host)\n')));
59
61
  process.exit(1);
60
62
  }
61
63
 
62
64
  const sessions = loadSessions();
63
65
  const existing = sessions.find(s => s.target === target && s.status === 'active');
64
66
  if (existing) {
65
- console.log(chalk.yellow(`\n ⚠️ ${target} üzerinde zaten aktif oturum var: ${existing.id}\n`));
67
+ console.log(chalk.yellow(`\n ⚠️ ${target} ${L('üzerinde zaten aktif oturum var', 'already has an active session')}: ${existing.id}\n`));
66
68
  return;
67
69
  }
68
70
 
@@ -70,21 +72,21 @@ function connectSession(target, cmd) {
70
72
  sessions.push(session);
71
73
  saveSessions(sessions);
72
74
 
73
- console.log(chalk.green(`\n ✅ Oturum başlatıldı: ${session.id}\n`));
75
+ console.log(chalk.green(`\n ✅ ${L('Oturum başlatıldı', 'Session started')}: ${session.id}\n`));
74
76
  console.log(` ${chalk.white('Target:')} ${target}`);
75
77
  console.log(` ${chalk.white('Shell:')} ${session.cmd}`);
76
78
  console.log();
77
79
 
78
80
  if (target === 'local' || target.startsWith('local')) {
79
81
  const shell = session.cmd;
80
- console.log(chalk.gray(` ${shell} başlatılıyor... (Ctrl+D çıkış)\n`));
82
+ console.log(chalk.gray(` ${shell} ${L('başlatılıyor... (Ctrl+D çıkış)', 'starting... (Ctrl+D to exit)')}\n`));
81
83
  try {
82
84
  const child = spawn(shell, [], { stdio: 'inherit', shell: true });
83
85
  child.on('exit', () => {
84
86
  session.status = 'closed';
85
87
  session.endedAt = new Date().toISOString();
86
88
  saveSessions(sessions);
87
- console.log(chalk.gray(`\n Oturum sonlandı: ${session.id}\n`));
89
+ console.log(chalk.gray(`\n ${L('Oturum sonlandı', 'Session ended')}: ${session.id}\n`));
88
90
  });
89
91
  } catch (err) {
90
92
  console.log(chalk.red(`\n ❌ ${err.message}\n`));
@@ -92,17 +94,17 @@ function connectSession(target, cmd) {
92
94
  return;
93
95
  }
94
96
 
95
- console.log(chalk.gray(` Uzak oturum: ssh veya winrm ile ${target} bağlanın\n`));
97
+ console.log(chalk.gray(` ${L('Uzak oturum: ssh veya winrm ile', 'Remote session: connect via ssh or winrm to')} ${target}${L(' bağlanın', '')}\n`));
96
98
  }
97
99
 
98
100
  function disconnectSession(id) {
99
101
  const sessions = loadSessions();
100
102
  const idx = sessions.findIndex(s => s.id === id);
101
- if (idx === -1) { console.log(chalk.red(`\n ❌ Oturum bulunamadı: ${id}\n`)); process.exit(1); }
103
+ if (idx === -1) { console.log(chalk.red(`\n ❌ ${L('Oturum bulunamadı', 'Session not found')}: ${id}\n`)); process.exit(1); }
102
104
  sessions[idx].status = 'closed';
103
105
  sessions[idx].endedAt = new Date().toISOString();
104
106
  saveSessions(sessions);
105
- console.log(chalk.gray(`\n 🛑 Oturum sonlandı: ${id} — ${sessions[idx].target}\n`));
107
+ console.log(chalk.gray(`\n 🛑 ${L('Oturum sonlandı', 'Session ended')}: ${id} — ${sessions[idx].target}\n`));
106
108
  }
107
109
 
108
110
  function listSessions() {
@@ -110,7 +112,7 @@ function listSessions() {
110
112
  console.log(chalk.cyan('\n 📋 Terminal Sessions\n'));
111
113
  console.log(chalk.gray(' ' + '─'.repeat(48)));
112
114
  if (sessions.length === 0) {
113
- console.log(chalk.gray(' Oturum bulunamadı.\n'));
115
+ console.log(chalk.gray(L(' Oturum bulunamadı.\n', ' No sessions found.\n')));
114
116
  return;
115
117
  }
116
118
  for (const s of sessions.sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt))) {
@@ -1,5 +1,7 @@
1
1
  const chalk = require('chalk');
2
2
  const { getConfig, saveConfig } = require('../utils/config');
3
+ const { getLang: _gl } = require('../utils/i18n');
4
+ const L = (tr, en) => (_gl() === 'en' ? en : tr);
3
5
 
4
6
  const MENTION_TTL_MS = 300 * 1000;
5
7
 
@@ -14,7 +16,7 @@ function threadOwnership(args) {
14
16
  if (action === 'agent') return setDefaultAgent(params[0]);
15
17
 
16
18
  console.log(chalk.red(`\n ❌ Bilinmeyen komut: ${action}\n`));
17
- console.log(chalk.gray(' Kullanım: natureco thread-ownership [status|list|assign|release|check|agent]\n'));
19
+ console.log(chalk.gray(L(' Kullanım: natureco thread-ownership [status|list|assign|release|check|agent]\n', ' Usage: natureco thread-ownership [status|list|assign|release|check|agent]\n')));
18
20
  process.exit(1);
19
21
  }
20
22
 
@@ -49,7 +51,7 @@ function listOwnership() {
49
51
  console.log(chalk.gray(' ' + '─'.repeat(48)));
50
52
 
51
53
  if (entries.length === 0) {
52
- console.log(chalk.gray(' Atanmış thread yok.\n'));
54
+ console.log(chalk.gray(L(' Atanmış thread yok.\n', ' No threads assigned.\n')));
53
55
  return;
54
56
  }
55
57
 
@@ -67,7 +69,7 @@ function listOwnership() {
67
69
 
68
70
  function assignOwnership(threadId, agentName, channel) {
69
71
  if (!threadId || !agentName) {
70
- console.log(chalk.red('\n ❌ threadId ve agentName gerekli\n'));
72
+ console.log(chalk.red(L('\n ❌ threadId ve agentName gerekli\n', '\n ❌ threadId and agentName required\n')));
71
73
  console.log(chalk.cyan(' natureco thread-ownership assign C012345 "agent-bob" slack\n'));
72
74
  process.exit(1);
73
75
  }
@@ -82,7 +84,7 @@ function assignOwnership(threadId, agentName, channel) {
82
84
 
83
85
  function releaseOwnership(threadId, channel) {
84
86
  if (!threadId) {
85
- console.log(chalk.red('\n ❌ threadId gerekli\n'));
87
+ console.log(chalk.red(L('\n ❌ threadId gerekli\n', '\n ❌ threadId required\n')));
86
88
  process.exit(1);
87
89
  }
88
90
 
@@ -99,12 +101,12 @@ function releaseOwnership(threadId, channel) {
99
101
  }
100
102
 
101
103
  saveConfig(config);
102
- console.log(chalk.gray(`\n 🔓 Thread ${threadId} serbest bırakıldı\n`));
104
+ console.log(chalk.gray(`\n 🔓 Thread ${threadId} ${L('serbest bırakıldı', 'released')}\n`));
103
105
  }
104
106
 
105
107
  function checkOwnership(threadId, channel, agentName) {
106
108
  if (!threadId || !channel || !agentName) {
107
- console.log(chalk.red('\n ❌ threadId, channel ve agentName gerekli\n'));
109
+ console.log(chalk.red(L('\n ❌ threadId, channel ve agentName gerekli\n', '\n ❌ threadId, channel and agentName required\n')));
108
110
  console.log(chalk.cyan(' natureco thread-ownership check C012345 slack agent-bob\n'));
109
111
  process.exit(1);
110
112
  }
@@ -118,7 +120,7 @@ function checkOwnership(threadId, channel, agentName) {
118
120
  });
119
121
 
120
122
  if (!entry) {
121
- console.log(chalk.green(`\n ✅ Thread ${threadId} sahipsiz — ${agentName} alabilir\n`));
123
+ console.log(chalk.green(`\n ✅ Thread ${threadId} ${L('sahipsiz', 'unowned')} — ${agentName} ${L('alabilir', 'can take it')}\n`));
122
124
  return;
123
125
  }
124
126
 
@@ -127,13 +129,13 @@ function checkOwnership(threadId, channel, agentName) {
127
129
  const since = typeof data === 'string' ? '-' : data.since ? new Date(data.since).toLocaleString() : '-';
128
130
 
129
131
  if (owner === agentName) {
130
- console.log(chalk.green(`\n ✅ Thread ${threadId} zaten ${agentName}'e ait\n`));
132
+ console.log(chalk.green(`\n ✅ Thread ${threadId} ${L('zaten', 'already belongs to')} ${agentName}${L("'e ait", '')}\n`));
131
133
  return;
132
134
  }
133
135
 
134
136
  const expired = data.since ? (Date.now() - new Date(data.since).getTime() > MENTION_TTL_MS) : false;
135
137
  if (expired) {
136
- console.log(chalk.yellow(`\n ⚠️ Thread ${threadId} süresi dolmuş (${owner}), ${agentName} alabilir\n`));
138
+ console.log(chalk.yellow(`\n ⚠️ Thread ${threadId} ${L('süresi dolmuş', 'expired')} (${owner}), ${agentName} ${L('alabilir', 'can take it')}\n`));
137
139
  return;
138
140
  }
139
141
 
@@ -142,7 +144,7 @@ function checkOwnership(threadId, channel, agentName) {
142
144
 
143
145
  function setDefaultAgent(name) {
144
146
  if (!name) {
145
- console.log(chalk.red('\n ❌ Agent adı gerekli\n'));
147
+ console.log(chalk.red(L('\n ❌ Agent adı gerekli\n', '\n ❌ Agent name required\n')));
146
148
  process.exit(1);
147
149
  }
148
150
 
@@ -9,6 +9,8 @@
9
9
  */
10
10
 
11
11
  const chalk = require('chalk');
12
+ const { getLang: _gl } = require('../utils/i18n');
13
+ const L = (tr, en) => (_gl() === 'en' ? en : tr);
12
14
  const tui = require('../utils/tui');
13
15
  const { loadToolDefinitions, EMOJI_MAP, TOOLSET_MAP } = require('../utils/tools');
14
16
  const { getConfig, setConfigValue } = require('../utils/config');
@@ -24,11 +26,11 @@ function main(args) {
24
26
  case 'disable':
25
27
  return cmdDisable(args[1]);
26
28
  default:
27
- console.log(chalk.yellow('Kullanım:'));
29
+ console.log(chalk.yellow(L('Kullanım:', 'Usage:')));
28
30
  console.log(chalk.gray(' natureco tools Grup listesi'));
29
- console.log(chalk.gray(' natureco tools list Detaylı liste'));
30
- console.log(chalk.gray(' natureco tools enable <name> Tool etkinleştir'));
31
- console.log(chalk.gray(' natureco tools disable <name> Tool devre dışı'));
31
+ console.log(chalk.gray(L(' natureco tools list Detaylı liste', ' natureco tools list Detailed list')));
32
+ console.log(chalk.gray(L(' natureco tools enable <name> Tool etkinleştir', ' natureco tools enable <name> Enable tool')));
33
+ console.log(chalk.gray(L(' natureco tools disable <name> Tool devre dışı', ' natureco tools disable <name> Disable tool')));
32
34
  console.log('');
33
35
  }
34
36
  }
@@ -56,9 +58,9 @@ function cmdList() {
56
58
  console.log(' ' + line);
57
59
  }
58
60
 
59
- console.log(chalk.gray('\n Toplam: ' + total + ' aktif tool'));
61
+ console.log(chalk.gray(L('\n Toplam: ', '\n Total: ') + total + ' aktif tool'));
60
62
  if (disabled.size > 0) {
61
- console.log(chalk.yellow(' Devre dışı: ' + [...disabled].join(', ')));
63
+ console.log(chalk.yellow(L(' Devre dışı: ', ' Disabled: ') + [...disabled].join(', ')));
62
64
  }
63
65
  console.log('');
64
66
  }
@@ -69,7 +71,7 @@ function getDisabledTools() {
69
71
  }
70
72
 
71
73
  function cmdEnable(name) {
72
- if (!name) return console.log(chalk.red('Tool adı gerekli: natureco tools enable <name>'));
74
+ if (!name) return console.log(chalk.red(L('Tool adı gerekli: natureco tools enable <name>', 'Tool name required: natureco tools enable <name>')));
73
75
  const disabled = getDisabledTools();
74
76
  if (!disabled.has(name)) return console.log(chalk.yellow(name + ' zaten etkin.'));
75
77
  disabled.delete(name);
@@ -78,10 +80,10 @@ function cmdEnable(name) {
78
80
  }
79
81
 
80
82
  function cmdDisable(name) {
81
- if (!name) return console.log(chalk.red('Tool adı gerekli: natureco tools disable <name>'));
83
+ if (!name) return console.log(chalk.red(L('Tool adı gerekli: natureco tools disable <name>', 'Tool name required: natureco tools disable <name>')));
82
84
  const allTools = loadToolDefinitions();
83
85
  const tool = allTools.find(t => t.name === name);
84
- if (!tool) return console.log(chalk.red('Tool bulunamadı: ' + name));
86
+ if (!tool) return console.log(chalk.red(L('Tool bulunamadı: ', 'Tool not found: ') + name));
85
87
  const disabled = getDisabledTools();
86
88
  if (disabled.has(name)) return console.log(chalk.yellow(name + ' zaten devre dışı.'));
87
89
  disabled.add(name);
@@ -1,5 +1,7 @@
1
1
  const chalk = require('chalk');
2
2
  const fs = require('fs');
3
+ const { getLang: _gl } = require('../utils/i18n');
4
+ const L = (tr, en) => (_gl() === 'en' ? en : tr);
3
5
  const path = require('path');
4
6
  const os = require('os');
5
7
 
@@ -11,7 +13,7 @@ function transcripts(args) {
11
13
  if (action === 'delete') return deleteTranscript(params[0]);
12
14
 
13
15
  console.log(chalk.red(`\n ❌ Bilinmeyen komut: ${action}\n`));
14
- console.log(chalk.gray(' Kullanım: natureco transcripts [list|show|delete]\n'));
16
+ console.log(chalk.gray(L(' Kullanım: natureco transcripts [list|show|delete]\n', ' Usage: natureco transcripts [list|show|delete]\n')));
15
17
  process.exit(1);
16
18
  }
17
19
 
@@ -53,7 +55,7 @@ function showTranscript(id) {
53
55
  if (!fs.existsSync(file)) {
54
56
  const alt = path.join(sessionsDir, id);
55
57
  if (!fs.existsSync(alt)) {
56
- console.log(chalk.red(`\n ❌ Transcript bulunamadı: ${id}\n`));
58
+ console.log(chalk.red(`\n ❌ ${L('Transcript bulunamadı', 'Transcript not found')}: ${id}\n`));
57
59
  process.exit(1);
58
60
  }
59
61
  const content = fs.readFileSync(alt, 'utf8');
@@ -83,13 +85,13 @@ function deleteTranscript(id) {
83
85
  if (!fs.existsSync(target)) {
84
86
  target = path.join(sessionsDir, id);
85
87
  if (!fs.existsSync(target)) {
86
- console.log(chalk.red(`\n ❌ Transcript bulunamadı: ${id}\n`));
88
+ console.log(chalk.red(`\n ❌ ${L('Transcript bulunamadı', 'Transcript not found')}: ${id}\n`));
87
89
  process.exit(1);
88
90
  }
89
91
  }
90
92
 
91
93
  fs.unlinkSync(target);
92
- console.log(chalk.green(`\n 🗑️ Transcript silindi: ${id}\n`));
94
+ console.log(chalk.green(`\n 🗑️ ${L('Transcript silindi', 'Transcript deleted')}: ${id}\n`));
93
95
  }
94
96
 
95
97
  module.exports = transcripts;
@@ -1,5 +1,7 @@
1
1
  const chalk = require('chalk');
2
2
  const { getConfig, saveConfig } = require('../utils/config');
3
+ const { getLang: _gl } = require('../utils/i18n');
4
+ const L = (tr, en) => (_gl() === 'en' ? en : tr);
3
5
 
4
6
  const VYDRA_ENDPOINTS = {
5
7
  'vydra-image': {
@@ -27,7 +29,7 @@ function vydra(args) {
27
29
  if (action === 'test') return testVydra();
28
30
 
29
31
  console.log(chalk.red(`\n ❌ Bilinmeyen komut: ${action}\n`));
30
- console.log(chalk.gray(' Kullanım: natureco vydra [status|configure|test]\n'));
32
+ console.log(chalk.gray(L(' Kullanım: natureco vydra [status|configure|test]\n', ' Usage: natureco vydra [status|configure|test]\n')));
31
33
  process.exit(1);
32
34
  }
33
35