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.
- package/package.json +1 -1
- package/src/commands/admin-rpc.js +7 -5
- package/src/commands/approvals.js +20 -18
- package/src/commands/audit.js +26 -24
- package/src/commands/backup.js +7 -5
- package/src/commands/bonjour.js +20 -18
- package/src/commands/capability.js +5 -3
- package/src/commands/channel-helper.js +7 -5
- package/src/commands/code.js +95 -87
- package/src/commands/code_v5.js +58 -56
- package/src/commands/commitments.js +18 -16
- package/src/commands/daemon.js +3 -1
- package/src/commands/device-pair.js +14 -12
- package/src/commands/devices.js +13 -11
- package/src/commands/directory.js +15 -13
- package/src/commands/dns.js +4 -2
- package/src/commands/nodes.js +4 -2
- package/src/commands/oc-path.js +13 -11
- package/src/commands/open-prose.js +5 -3
- package/src/commands/path.js +8 -6
- package/src/commands/policy.js +32 -30
- package/src/commands/proxy.js +3 -1
- package/src/commands/qr.js +4 -2
- package/src/commands/sandbox.js +6 -4
- package/src/commands/secrets.js +6 -4
- package/src/commands/security.js +24 -22
- package/src/commands/system.js +3 -1
- package/src/commands/terminal.js +16 -14
- package/src/commands/thread-ownership.js +12 -10
- package/src/commands/tools.js +11 -9
- package/src/commands/transcripts.js +6 -4
- package/src/commands/vydra.js +3 -1
package/src/commands/security.js
CHANGED
|
@@ -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:
|
|
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:
|
|
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
|
}
|
package/src/commands/system.js
CHANGED
|
@@ -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
|
|
package/src/commands/terminal.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
package/src/commands/tools.js
CHANGED
|
@@ -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
|
|
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
|
|
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;
|
package/src/commands/vydra.js
CHANGED
|
@@ -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
|
|