vantuz 3.4.1 β 3.5.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/LICENSE +45 -45
- package/admin-keygen.js +51 -0
- package/cli.js +685 -585
- package/config.js +733 -733
- package/core/agent-loop.js +190 -190
- package/core/ai-provider.js +298 -261
- package/core/automation.js +523 -523
- package/core/brand-analyst.js +101 -0
- package/core/channels.js +167 -167
- package/core/dashboard.js +230 -230
- package/core/database.js +135 -36
- package/core/eia-monitor.js +3 -1
- package/core/engine.js +648 -636
- package/core/gateway.js +447 -447
- package/core/learning.js +214 -214
- package/core/license.js +113 -0
- package/core/marketplace-adapter.js +168 -168
- package/core/memory.js +190 -190
- package/core/migrations/001-initial-schema.sql +1 -1
- package/core/queue.js +120 -120
- package/core/self-healer.js +314 -314
- package/core/unified-product.js +214 -214
- package/core/vision-service.js +113 -113
- package/index.js +217 -174
- package/modules/crm/sentiment-crm.js +231 -231
- package/modules/healer/listing-healer.js +201 -201
- package/modules/oracle/predictor.js +214 -214
- package/modules/researcher/agent.js +169 -169
- package/modules/team/agents/base.js +92 -92
- package/modules/team/agents/dev.js +33 -33
- package/modules/team/agents/josh.js +40 -40
- package/modules/team/agents/marketing.js +33 -33
- package/modules/team/agents/milo.js +36 -36
- package/modules/team/index.js +78 -78
- package/modules/team/shared-memory.js +87 -87
- package/modules/war-room/competitor-tracker.js +250 -250
- package/modules/war-room/pricing-engine.js +308 -308
- package/nodes/warehouse.js +238 -238
- package/onboard.js +1 -1
- package/package.json +7 -6
- package/platforms/pttavm.js +14 -14
- package/plugins/vantuz/index.js +528 -528
- package/plugins/vantuz/memory/hippocampus.js +465 -464
- package/plugins/vantuz/package.json +20 -20
- package/plugins/vantuz/platforms/_template.js +118 -118
- package/plugins/vantuz/platforms/amazon.js +236 -236
- package/plugins/vantuz/platforms/ciceksepeti.js +166 -166
- package/plugins/vantuz/platforms/hepsiburada.js +180 -180
- package/plugins/vantuz/platforms/index.js +165 -165
- package/plugins/vantuz/platforms/n11.js +229 -229
- package/plugins/vantuz/platforms/pazarama.js +154 -154
- package/plugins/vantuz/platforms/pttavm.js +127 -127
- package/plugins/vantuz/platforms/trendyol.js +326 -326
- package/plugins/vantuz/services/alerts.js +253 -253
- package/plugins/vantuz/services/license.js +34 -34
- package/plugins/vantuz/services/scheduler.js +232 -232
- package/plugins/vantuz/tools/analytics.js +152 -152
- package/plugins/vantuz/tools/crossborder.js +187 -187
- package/plugins/vantuz/tools/nl-parser.js +211 -211
- package/plugins/vantuz/tools/product.js +110 -110
- package/plugins/vantuz/tools/quick-report.js +175 -175
- package/plugins/vantuz/tools/repricer.js +314 -314
- package/plugins/vantuz/tools/sentiment.js +115 -115
- package/plugins/vantuz/tools/vision.js +257 -257
- package/private.pem +28 -0
- package/public.pem +9 -0
- package/server/app.js +260 -260
- package/server/public/index.html +514 -514
- package/start.bat +33 -33
- package/vantuz.sqlite +0 -0
package/cli.js
CHANGED
|
@@ -1,585 +1,685 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* π VANTUZ CLI v3.2
|
|
5
|
-
* Vantuz Gateway entegrasyonlu komut satΔ±rΔ± arayΓΌzΓΌ
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import path from 'path';
|
|
9
|
-
import os from 'os';
|
|
10
|
-
import fs from 'fs';
|
|
11
|
-
import readline from 'readline';
|
|
12
|
-
import { log, getLogs, clearLogs } from './core/ai-provider.js';
|
|
13
|
-
import { getEngine } from './core/engine.js';
|
|
14
|
-
import { getGateway } from './core/gateway.js';
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
content.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
rl.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
βββ
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
console.log(c('
|
|
125
|
-
console.log(c('dim', '
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
//
|
|
142
|
-
//
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
console.log(
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
console.log(c('
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
console.log(c('
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
console.log(c('
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
if (
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
const
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
if (
|
|
363
|
-
console.log(c('
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
console.log(
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
console.log(c('
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
const
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
const
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* π VANTUZ CLI v3.2
|
|
5
|
+
* Vantuz Gateway entegrasyonlu komut satΔ±rΔ± arayΓΌzΓΌ
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import os from 'os';
|
|
10
|
+
import fs from 'fs';
|
|
11
|
+
import readline from 'readline';
|
|
12
|
+
import { log, getLogs, clearLogs } from './core/ai-provider.js';
|
|
13
|
+
import { getEngine } from './core/engine.js';
|
|
14
|
+
import { getGateway } from './core/gateway.js';
|
|
15
|
+
import { licenseManager } from './core/license.js'; // Lisans yΓΆneticisi
|
|
16
|
+
import { Configurator } from './config.js'; // Import the new Configurator
|
|
17
|
+
|
|
18
|
+
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
19
|
+
// CONFIG
|
|
20
|
+
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
21
|
+
|
|
22
|
+
const VANTUZ_HOME = path.join(os.homedir(), '.vantuz');
|
|
23
|
+
const CONFIG_PATH = path.join(VANTUZ_HOME, '.env');
|
|
24
|
+
const CONFIG_JSON = path.join(VANTUZ_HOME, 'config.json');
|
|
25
|
+
|
|
26
|
+
if (!fs.existsSync(VANTUZ_HOME)) {
|
|
27
|
+
fs.mkdirSync(VANTUZ_HOME, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
31
|
+
// HELPERS
|
|
32
|
+
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
33
|
+
|
|
34
|
+
const colors = {
|
|
35
|
+
reset: '\x1b[0m', bold: '\x1b[1m', dim: '\x1b[2m',
|
|
36
|
+
red: '\x1b[31m', green: '\x1b[32m', yellow: '\x1b[33m',
|
|
37
|
+
cyan: '\x1b[36m', blue: '\x1b[34m', magenta: '\x1b[35m'
|
|
38
|
+
};
|
|
39
|
+
const c = (color, text) => `${colors[color]}${text}${colors.reset}`;
|
|
40
|
+
|
|
41
|
+
function loadEnv() {
|
|
42
|
+
const env = {};
|
|
43
|
+
try {
|
|
44
|
+
if (fs.existsSync(CONFIG_PATH)) {
|
|
45
|
+
const content = fs.readFileSync(CONFIG_PATH, 'utf-8');
|
|
46
|
+
content.split('\n').forEach(line => {
|
|
47
|
+
const match = line.match(/^([^=]+)=(.*)$/);
|
|
48
|
+
if (match) env[match[1].trim()] = match[2].trim();
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
} catch (e) { }
|
|
52
|
+
return env;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function loadConfigJson() {
|
|
56
|
+
try {
|
|
57
|
+
if (fs.existsSync(CONFIG_JSON)) {
|
|
58
|
+
return JSON.parse(fs.readFileSync(CONFIG_JSON, 'utf-8'));
|
|
59
|
+
}
|
|
60
|
+
} catch (e) {
|
|
61
|
+
console.log(c('red', `Config okunamadΔ±: ${e.message}`));
|
|
62
|
+
}
|
|
63
|
+
return {};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function saveConfigJson(config) {
|
|
67
|
+
try {
|
|
68
|
+
fs.writeFileSync(CONFIG_JSON, JSON.stringify(config, null, 2));
|
|
69
|
+
return true;
|
|
70
|
+
} catch (e) {
|
|
71
|
+
console.log(c('red', `Config yazΔ±lamadΔ±: ${e.message}`));
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function clearScreen() {
|
|
77
|
+
process.stdout.write('\x1Bc');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function promptInput(question) {
|
|
81
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
82
|
+
const answer = await new Promise(resolve => rl.question(question, resolve));
|
|
83
|
+
rl.close();
|
|
84
|
+
return answer.trim();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function normalizePhone(input) {
|
|
88
|
+
if (!input) return '';
|
|
89
|
+
const cleaned = input.replace(/[\s-]/g, '');
|
|
90
|
+
return cleaned.startsWith('+') ? cleaned : `+${cleaned}`;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function loadOpenclawConfig(configPath) {
|
|
94
|
+
try {
|
|
95
|
+
if (fs.existsSync(configPath)) {
|
|
96
|
+
return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
97
|
+
}
|
|
98
|
+
} catch (e) {
|
|
99
|
+
console.log(c('red', `Gateway config okunamadΔ±: ${e.message}`));
|
|
100
|
+
}
|
|
101
|
+
return {};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function saveOpenclawConfig(configPath, config) {
|
|
105
|
+
try {
|
|
106
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
107
|
+
return true;
|
|
108
|
+
} catch (e) {
|
|
109
|
+
console.log(c('red', `Gateway config yazΔ±lamadΔ±: ${e.message}`));
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function printHeader() {
|
|
115
|
+
const version = JSON.parse(fs.readFileSync(new URL('./package.json', import.meta.url), 'utf-8')).version;
|
|
116
|
+
console.log(c('cyan', `
|
|
117
|
+
βββ βββ ββββββ ββββ βββββββββββββββ βββββββββββ
|
|
118
|
+
βββ ββββββββββββββββ βββββββββββββββ βββββββββββ
|
|
119
|
+
βββ βββββββββββββββββ βββ βββ βββ βββ βββββ
|
|
120
|
+
ββββ ββββββββββββββββββββββ βββ βββ βββ βββββ
|
|
121
|
+
βββββββ βββ ββββββ ββββββ βββ βββββββββββββββββ
|
|
122
|
+
βββββ βββ ββββββ βββββ βββ βββββββ ββββββββ
|
|
123
|
+
`));
|
|
124
|
+
console.log(c('magenta', ` Enterprise E-Commerce Management System v${version}`));
|
|
125
|
+
console.log(c('dim', ' Powered by nca'));
|
|
126
|
+
console.log(c('dim', ' ----------------------------------------------------------\n'));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
async function showSpinner(text, duration = 1000) {
|
|
130
|
+
const frames = ['β ', 'β ', 'β Ή', 'β Έ', 'β Ό', 'β ΄', 'β ¦', 'β §', 'β ', 'β '];
|
|
131
|
+
let i = 0;
|
|
132
|
+
const interval = setInterval(() => {
|
|
133
|
+
process.stdout.write(`\r${c('cyan', frames[i])} ${text}...`);
|
|
134
|
+
i = (i + 1) % frames.length;
|
|
135
|
+
}, 80);
|
|
136
|
+
await new Promise(r => setTimeout(r, duration));
|
|
137
|
+
clearInterval(interval);
|
|
138
|
+
process.stdout.write(`\r${c('green', 'β')} ${text} TamamlandΔ±\n`);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
142
|
+
// COMMANDS
|
|
143
|
+
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
144
|
+
|
|
145
|
+
async function runTUI() {
|
|
146
|
+
clearScreen();
|
|
147
|
+
printHeader();
|
|
148
|
+
|
|
149
|
+
// Lisans KontrolΓΌ
|
|
150
|
+
const license = licenseManager.check();
|
|
151
|
+
if (!license.valid) {
|
|
152
|
+
console.log(c('red', `\nπ ERΔ°ΕΔ°M ENGELLENDΔ°: ${license.message}`));
|
|
153
|
+
console.log(c('yellow', 'LΓΌtfen geΓ§erli bir lisans anahtarΔ± girin.'));
|
|
154
|
+
|
|
155
|
+
const key = await promptInput(c('cyan', 'Lisans AnahtarΔ± (VTZ-XXXX): '));
|
|
156
|
+
const result = licenseManager.activate(key);
|
|
157
|
+
|
|
158
|
+
if (!result.success) {
|
|
159
|
+
console.log(c('red', `Hata: ${result.message}`));
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
console.log(c('green', `β ${result.message}`));
|
|
163
|
+
await new Promise(r => setTimeout(r, 1000));
|
|
164
|
+
clearScreen();
|
|
165
|
+
printHeader();
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
await showSpinner('Sistem Γ§ekirdeΔi yΓΌkleniyor', 500);
|
|
169
|
+
await showSpinner('Vantuz Gateway kontrol ediliyor', 400);
|
|
170
|
+
await showSpinner('Pazaryeri baΔlantΔ±larΔ± kontrol ediliyor', 800);
|
|
171
|
+
|
|
172
|
+
const engine = await getEngine();
|
|
173
|
+
const status = engine.getStatus();
|
|
174
|
+
|
|
175
|
+
// Gateway durumu
|
|
176
|
+
if (status.gateway?.connected) {
|
|
177
|
+
console.log(`${c('green', 'β')} Vantuz Gateway ${c('green', 'BaΔlΔ±')} ${c('dim', `(${status.gateway.url})`)}`);
|
|
178
|
+
} else {
|
|
179
|
+
console.log(`${c('yellow', 'β')} Vantuz Gateway ${c('yellow', 'BaΔlΔ± DeΔil')} ${c('dim', '(direkt mod)')}`);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
console.log(`${c('green', 'β')} Sistem Aktif ${c('dim', `(${status.connectedCount}/${status.totalPlatforms} Platform BaΔlΔ±)`)}`);
|
|
183
|
+
console.log(`${c('blue', 'βΉ')} AI SaΔlayΔ±cΔ±: ${c('bold', status.aiProvider || 'Gemini')}`);
|
|
184
|
+
console.log(`${c('yellow', 'β‘')} Komutlar: ${c('cyan', '/stok, /siparis, /rapor, /analiz, /durum, /temizle, /exit')}\n`);
|
|
185
|
+
|
|
186
|
+
const rl = readline.createInterface({
|
|
187
|
+
input: process.stdin,
|
|
188
|
+
output: process.stdout,
|
|
189
|
+
prompt: c('magenta', 'Vantuz> ')
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
rl.prompt();
|
|
193
|
+
|
|
194
|
+
rl.on('line', async (line) => {
|
|
195
|
+
const input = line.trim();
|
|
196
|
+
if (input === '/exit') process.exit(0);
|
|
197
|
+
if (input === '/temizle') {
|
|
198
|
+
clearScreen();
|
|
199
|
+
printHeader();
|
|
200
|
+
rl.prompt();
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (input) {
|
|
205
|
+
try {
|
|
206
|
+
if (input.startsWith('/')) {
|
|
207
|
+
const [cmd, ...cmdArgs] = input.split(' ');
|
|
208
|
+
switch (cmd) {
|
|
209
|
+
case '/help':
|
|
210
|
+
console.log(c('yellow', '\nKullanΔ±labilir Komutlar:'));
|
|
211
|
+
console.log(` ${c('cyan', '/stok')} - TΓΌm pazaryerlerindeki stok durumunu gΓΆsterir`);
|
|
212
|
+
console.log(` ${c('cyan', '/siparis')} - Son sipariΕleri listeler`);
|
|
213
|
+
console.log(` ${c('cyan', '/durum')} - Sistem durumunu gΓΆsterir`);
|
|
214
|
+
console.log(` ${c('cyan', '/temizle')} - EkranΔ± temizler`);
|
|
215
|
+
console.log(` ${c('cyan', '/exit')} - ΓΔ±kΔ±Ε\n`);
|
|
216
|
+
break;
|
|
217
|
+
case '/stok':
|
|
218
|
+
console.log(c('dim', 'Stok verileri Γ§ekiliyor...'));
|
|
219
|
+
const stocks = await engine.getStock();
|
|
220
|
+
if (stocks.length === 0) console.log(c('yellow', 'BaΔlΔ± platform bulunamadΔ±.'));
|
|
221
|
+
stocks.forEach(s => {
|
|
222
|
+
console.log(`\n${s.icon} ${c('bold', s.platform.toUpperCase())}`);
|
|
223
|
+
s.products.slice(0, 5).forEach(p => {
|
|
224
|
+
console.log(` - ${p.title}: ${c('green', p.stock)} Adet | ${c('yellow', p.price)} TL`);
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
break;
|
|
228
|
+
case '/analiz':
|
|
229
|
+
process.stdout.write(c('dim', 'Analiz hazΔ±rlanΔ±yor... '));
|
|
230
|
+
const analysis = await engine.chat('satΔ±Ε ve stok analiz raporu hazΔ±rla');
|
|
231
|
+
process.stdout.write('\r' + ' '.repeat(30) + '\r');
|
|
232
|
+
console.log(`\n${analysis}\n`);
|
|
233
|
+
break;
|
|
234
|
+
case '/siparis':
|
|
235
|
+
console.log(c('dim', 'SipariΕler Γ§ekiliyor...'));
|
|
236
|
+
const orders = await engine.getOrders({ size: 50, allStatuses: true });
|
|
237
|
+
const activeOrders = Array.isArray(orders)
|
|
238
|
+
? orders.filter(o => ['Created', 'Picking', 'UnPacked'].includes(String(o.status || o.shipmentPackageStatus || o.orderStatus)))
|
|
239
|
+
: [];
|
|
240
|
+
const visible = activeOrders.slice(0, 5);
|
|
241
|
+
if (!Array.isArray(orders) || visible.length === 0) {
|
|
242
|
+
console.log(c('yellow', 'Son sipariΕ bulunamadΔ±.'));
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
visible.forEach(o => {
|
|
246
|
+
const names = Array.isArray(o.lines)
|
|
247
|
+
? o.lines.map(l => l?.productName || l?.name).filter(Boolean)
|
|
248
|
+
: [];
|
|
249
|
+
const namePart = names.length > 0 ? ` | ${names.join(', ')}` : '';
|
|
250
|
+
console.log(`${o._icon} [#${o.orderNumber || o.id}] ${c('bold', o.customerName || 'MΓΌΕteri')}: ${c('green', o.totalPrice ?? o.totalAmount ?? o.total ?? 'β')} TL (${o._platform})${namePart}`);
|
|
251
|
+
});
|
|
252
|
+
break;
|
|
253
|
+
case '/durum':
|
|
254
|
+
const s = engine.getStatus();
|
|
255
|
+
console.log(c('yellow', '\nββ Sistem Durumu ββ'));
|
|
256
|
+
console.log(` Engine: ${s.engine === 'active' ? c('green', 'β Aktif') : c('red', 'β Pasif')}`);
|
|
257
|
+
console.log(` Gateway: ${s.gateway?.connected ? c('green', 'β BaΔlΔ±') : c('yellow', 'β BaΔlΔ± DeΔil')}`);
|
|
258
|
+
console.log(` AI: ${c('cyan', s.aiProvider || 'gemini')}`);
|
|
259
|
+
console.log(` Platformlar: ${c('bold', `${s.connectedCount}/${s.totalPlatforms}`)}`);
|
|
260
|
+
console.log('');
|
|
261
|
+
break;
|
|
262
|
+
default:
|
|
263
|
+
console.log(c('red', `[HATA] Bilinmeyen komut: ${cmd}. /help yazΔ±n.`));
|
|
264
|
+
}
|
|
265
|
+
} else {
|
|
266
|
+
process.stdout.write(c('dim', 'DΓΌΕΓΌnΓΌyor... '));
|
|
267
|
+
const response = await engine.handleMessage(input, { channel: 'local', from: 'local' });
|
|
268
|
+
process.stdout.write('\r' + ' '.repeat(20) + '\r');
|
|
269
|
+
console.log(`\n${c('cyan', 'π Vantuz:')}\n${response}\n`);
|
|
270
|
+
}
|
|
271
|
+
} catch (e) {
|
|
272
|
+
console.log(c('red', `\n[HATA] ${e.message}`));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
rl.prompt();
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
async function runConfig(args) {
|
|
280
|
+
const sub = args[1]?.toLowerCase();
|
|
281
|
+
const config = loadConfigJson(); // config.json operations
|
|
282
|
+
|
|
283
|
+
if (sub === 'init') {
|
|
284
|
+
const configurator = new Configurator();
|
|
285
|
+
await configurator.run();
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
if (sub === 'init' || !sub) { // If sub is 'init' OR no sub-command is provided
|
|
290
|
+
const configurator = new Configurator();
|
|
291
|
+
await configurator.run();
|
|
292
|
+
return; // IMPORTANT: Return after running the configurator
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (sub === 'get') { // Handle 'get' sub-command
|
|
296
|
+
printHeader();
|
|
297
|
+
if (args[2]) {
|
|
298
|
+
const key = args[2];
|
|
299
|
+
const value = config?.[key];
|
|
300
|
+
console.log(value === undefined ? '' : String(value));
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
console.log(JSON.stringify(config, null, 2));
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (sub === 'set') {
|
|
308
|
+
const key = args[2];
|
|
309
|
+
const value = args.slice(3).join(' ');
|
|
310
|
+
if (!key) {
|
|
311
|
+
console.log(c('red', 'KullanΔ±m: vantuz config set <key> <value>'));
|
|
312
|
+
process.exitCode = 2;
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
config[key] = value;
|
|
316
|
+
const ok = saveConfigJson(config);
|
|
317
|
+
if (ok) {
|
|
318
|
+
console.log(c('green', '[OK] Config gΓΌncellendi'));
|
|
319
|
+
} else {
|
|
320
|
+
process.exitCode = 1;
|
|
321
|
+
}
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
console.log(c('red', 'GeΓ§ersiz config komutu. KullanΔ±m: vantuz config [init | get [key] | set <key> <value>]'));
|
|
326
|
+
process.exitCode = 2;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
async function runLogs(args) {
|
|
330
|
+
const sub = args[1]?.toLowerCase();
|
|
331
|
+
if (sub === 'clear' || sub === 'temizle') {
|
|
332
|
+
const ok = clearLogs();
|
|
333
|
+
if (ok) console.log(c('green', '[OK] Loglar temizlendi'));
|
|
334
|
+
else {
|
|
335
|
+
console.log(c('red', '[HATA] Loglar temizlenemedi'));
|
|
336
|
+
process.exitCode = 1;
|
|
337
|
+
}
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const nRaw = args[1];
|
|
342
|
+
const n = nRaw && /^\d+$/.test(nRaw) ? Number(nRaw) : 50;
|
|
343
|
+
printHeader();
|
|
344
|
+
console.log(getLogs(n));
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
async function runGateway(args) {
|
|
348
|
+
const sub = args[1]?.toLowerCase();
|
|
349
|
+
const gw = await getGateway();
|
|
350
|
+
const info = gw.getInfo();
|
|
351
|
+
|
|
352
|
+
if (!sub || sub === 'status') {
|
|
353
|
+
printHeader();
|
|
354
|
+
console.log(c('yellow', 'ββ Vantuz Gateway ββ\n'));
|
|
355
|
+
console.log(` URL: ${c('cyan', info.url)}`);
|
|
356
|
+
console.log(` Durum: ${info.connected ? c('green', 'β BaΔlΔ±') : c('red', 'β BaΔlΔ± DeΔil')}`);
|
|
357
|
+
console.log(` Token: ${info.hasToken ? c('green', 'β YapΔ±landΔ±rΔ±lmΔ±Ε') : c('yellow', 'β Eksik')}`);
|
|
358
|
+
console.log(` Config: ${info.configFound ? c('green', 'β Bulundu') : c('yellow', 'β BulunamadΔ±')}`);
|
|
359
|
+
if (info.version) console.log(` SΓΌrΓΌm: ${c('dim', info.version)}`);
|
|
360
|
+
console.log('');
|
|
361
|
+
|
|
362
|
+
if (!info.connected) {
|
|
363
|
+
console.log(c('dim', ' Gateway baΕlatmak iΓ§in: vantuz gateway run'));
|
|
364
|
+
console.log(c('dim', ' Veya: start.bat\n'));
|
|
365
|
+
}
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (sub === 'health') {
|
|
370
|
+
const result = await gw.health();
|
|
371
|
+
if (result.success) {
|
|
372
|
+
console.log(c('green', 'β Gateway saΔlΔ±klΔ±'));
|
|
373
|
+
if (result.data) console.log(JSON.stringify(result.data, null, 2));
|
|
374
|
+
} else {
|
|
375
|
+
console.log(c('red', `β Gateway eriΕilemez: ${result.error}`));
|
|
376
|
+
}
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
if (sub === 'models') {
|
|
381
|
+
const result = await gw.getModels();
|
|
382
|
+
if (result.success) {
|
|
383
|
+
console.log(c('yellow', 'ββ AI Modelleri ββ\n'));
|
|
384
|
+
const models = result.data?.data || result.data || [];
|
|
385
|
+
if (Array.isArray(models)) {
|
|
386
|
+
models.forEach(m => {
|
|
387
|
+
console.log(` ${c('cyan', m.id || m.name)} ${c('dim', m.description || '')}`);
|
|
388
|
+
});
|
|
389
|
+
} else {
|
|
390
|
+
console.log(JSON.stringify(models, null, 2));
|
|
391
|
+
}
|
|
392
|
+
} else {
|
|
393
|
+
console.log(c('red', `Modeller alΔ±namadΔ±: ${result.error}`));
|
|
394
|
+
}
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
if (sub === 'run' || sub === 'start') {
|
|
399
|
+
console.log(c('cyan', 'Gateway baΕlatΔ±lΔ±yor...'));
|
|
400
|
+
const result = await gw.start();
|
|
401
|
+
if (result.success) {
|
|
402
|
+
console.log(c('green', 'β Gateway arka planda baΕlatΔ±ldΔ±.'));
|
|
403
|
+
console.log(c('dim', 'BirkaΓ§ saniye iΓ§inde hazΔ±r olacak.'));
|
|
404
|
+
console.log(c('dim', 'Kontrol iΓ§in: vantuz gateway status'));
|
|
405
|
+
} else {
|
|
406
|
+
console.log(c('red', result.error || 'Gateway baΕlatΔ±lamadΔ±'));
|
|
407
|
+
}
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
console.log(c('red', 'KullanΔ±m: vantuz gateway [status|health|models|run]'));
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
async function runDoctor() {
|
|
415
|
+
printHeader();
|
|
416
|
+
console.log(c('yellow', 'ββ Sistem SaΔlΔ±k KontrolΓΌ ββ\n'));
|
|
417
|
+
|
|
418
|
+
await showSpinner('Kontroller yapΔ±lΔ±yor', 800);
|
|
419
|
+
|
|
420
|
+
const engine = await getEngine();
|
|
421
|
+
const report = await engine.doctor();
|
|
422
|
+
|
|
423
|
+
// Engine
|
|
424
|
+
console.log(` Engine: ${report.engine ? c('green', 'β Aktif') : c('red', 'β Pasif')}`);
|
|
425
|
+
|
|
426
|
+
// Gateway
|
|
427
|
+
const gw = report.gateway;
|
|
428
|
+
const gwIcon = gw.status === 'healthy' ? c('green', 'β') :
|
|
429
|
+
gw.status === 'not_configured' ? c('yellow', 'β') : c('red', 'β');
|
|
430
|
+
console.log(` Gateway: ${gwIcon} ${gw.status === 'healthy' ? 'SaΔlΔ±klΔ±' : gw.status === 'not_configured' ? 'YapΔ±landΔ±rΔ±lmamΔ±Ε' : 'EriΕilemez'}`);
|
|
431
|
+
|
|
432
|
+
// AI
|
|
433
|
+
const ai = report.ai;
|
|
434
|
+
console.log(` AI: ${c('cyan', ai.provider)} ${ai.keyConfigured ? c('green', 'β Key OK') : c('red', 'β Key Eksik')} ${ai.gatewayFallback ? c('dim', '(gateway fallback var)') : ''}`);
|
|
435
|
+
|
|
436
|
+
// Platformlar
|
|
437
|
+
const platformEntries = Object.entries(report.platforms).filter(([k]) => k !== 'openclaw-gateway');
|
|
438
|
+
if (platformEntries.length > 0) {
|
|
439
|
+
console.log(`\n ${c('bold', 'Platformlar:')}`);
|
|
440
|
+
platformEntries.forEach(([name, connected]) => {
|
|
441
|
+
console.log(` ${connected ? c('green', 'β') : c('red', 'β')} ${name}`);
|
|
442
|
+
});
|
|
443
|
+
} else {
|
|
444
|
+
console.log(` Platformlar: ${c('yellow', 'HiΓ§biri baΔlΔ± deΔil')}`);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// Kanallar
|
|
448
|
+
const ch = report.channels;
|
|
449
|
+
if (ch) {
|
|
450
|
+
console.log(`\n ${c('bold', 'Kanallar:')}`);
|
|
451
|
+
for (const [name, data] of Object.entries(ch)) {
|
|
452
|
+
console.log(` ${data.connected ? c('green', 'β') : c('yellow', 'β')} ${name}: ${data.info || ''}`);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
console.log('');
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
async function runChannels(args) {
|
|
460
|
+
const sub = args[1]?.toLowerCase();
|
|
461
|
+
if (sub === 'login') {
|
|
462
|
+
printHeader();
|
|
463
|
+
console.log(c('yellow', 'ββ WhatsApp Login ββ\n'));
|
|
464
|
+
|
|
465
|
+
const openclawDir = path.join(os.homedir(), '.openclaw');
|
|
466
|
+
const configPath = path.join(openclawDir, 'openclaw.json');
|
|
467
|
+
|
|
468
|
+
if (!fs.existsSync(openclawDir)) {
|
|
469
|
+
fs.mkdirSync(openclawDir, { recursive: true });
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
const rawPhone = await promptInput('WhatsApp numaranΔ±z (E.164, ΓΆrn: +905551112233): ');
|
|
473
|
+
const phone = normalizePhone(rawPhone);
|
|
474
|
+
if (!phone || phone === '+') {
|
|
475
|
+
console.log(c('red', 'GeΓ§erli bir numara girilmedi.'));
|
|
476
|
+
process.exitCode = 2;
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
const config = loadOpenclawConfig(configPath);
|
|
481
|
+
if (!config.channels) config.channels = {};
|
|
482
|
+
if (!config.channels.whatsapp) config.channels.whatsapp = {};
|
|
483
|
+
|
|
484
|
+
if (!config.channels.whatsapp.dmPolicy) {
|
|
485
|
+
config.channels.whatsapp.dmPolicy = 'allowlist';
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
const allowFrom = Array.isArray(config.channels.whatsapp.allowFrom)
|
|
489
|
+
? config.channels.whatsapp.allowFrom
|
|
490
|
+
: [];
|
|
491
|
+
if (!allowFrom.includes(phone)) {
|
|
492
|
+
allowFrom.push(phone);
|
|
493
|
+
}
|
|
494
|
+
config.channels.whatsapp.allowFrom = allowFrom;
|
|
495
|
+
|
|
496
|
+
const saved = saveOpenclawConfig(configPath, config);
|
|
497
|
+
if (!saved) {
|
|
498
|
+
process.exitCode = 1;
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
console.log(c('green', 'β Gateway config gΓΌncellendi.'));
|
|
503
|
+
console.log(c('dim', 'Εimdi QR iΓ§in login baΕlatΔ±lΔ±yor...\n'));
|
|
504
|
+
|
|
505
|
+
try {
|
|
506
|
+
const { spawn } = await import('child_process');
|
|
507
|
+
const child = spawn('openclaw', ['channels', 'login'], {
|
|
508
|
+
stdio: 'inherit',
|
|
509
|
+
shell: true
|
|
510
|
+
});
|
|
511
|
+
await new Promise((resolve, reject) => {
|
|
512
|
+
child.on('exit', code => (code === 0 ? resolve() : reject(new Error(`gateway exit ${code}`))));
|
|
513
|
+
child.on('error', reject);
|
|
514
|
+
});
|
|
515
|
+
console.log(c('green', '\nβ QR eΕleΕtirme tamamlandΔ±.'));
|
|
516
|
+
console.log(c('dim', 'Gateway baΕlatmak iΓ§in: vantuz gateway run'));
|
|
517
|
+
} catch (e) {
|
|
518
|
+
console.log(c('red', `Login Γ§alΔ±ΕtΔ±rΔ±lamadΔ±: ${e.message}`));
|
|
519
|
+
}
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
printHeader();
|
|
524
|
+
console.log(c('yellow', 'ββ Δ°letiΕim KanallarΔ± ββ\n'));
|
|
525
|
+
|
|
526
|
+
const engine = await getEngine();
|
|
527
|
+
const status = engine.getStatus();
|
|
528
|
+
const channels = status.channels || {};
|
|
529
|
+
|
|
530
|
+
for (const [name, data] of Object.entries(channels)) {
|
|
531
|
+
const icon = data.connected ? c('green', 'β') : c('yellow', 'β');
|
|
532
|
+
const mode = data.mode === 'gateway' ? c('dim', '[gateway]') : c('dim', '[local]');
|
|
533
|
+
console.log(` ${icon} ${c('bold', name.toUpperCase())} ${mode}`);
|
|
534
|
+
if (data.info) console.log(` ${c('dim', data.info)}`);
|
|
535
|
+
console.log('');
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
if (!status.gateway?.connected) {
|
|
539
|
+
console.log(c('dim', ' WhatsApp baΔlantΔ±sΔ± iΓ§in gateway gereklidir.'));
|
|
540
|
+
console.log(c('dim', ' Gateway baΕlatmak iΓ§in: start.bat\n'));
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
async function runTeam(args) {
|
|
545
|
+
const sub = args[1]?.toLowerCase();
|
|
546
|
+
const engine = await getEngine();
|
|
547
|
+
|
|
548
|
+
if (!engine.initialized) {
|
|
549
|
+
await showSpinner('AI TakΔ±mΔ± hazΔ±rlanΔ±yor', 500);
|
|
550
|
+
await engine.initialize();
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
if (!engine.team) {
|
|
554
|
+
console.log(c('red', 'Multi-Agent Team modΓΌlΓΌ aktif deΔil.'));
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
if (!sub || sub === 'status') {
|
|
559
|
+
printHeader();
|
|
560
|
+
console.log(c('yellow', 'ββ Yapay Zeka TakΔ±mΔ± ββ\n'));
|
|
561
|
+
const agents = engine.team.agents;
|
|
562
|
+
|
|
563
|
+
if (Object.keys(agents).length === 0) {
|
|
564
|
+
console.log(c('dim', ' HenΓΌz ajan yΓΌklenmedi.'));
|
|
565
|
+
} else {
|
|
566
|
+
for (const [name, agent] of Object.entries(agents)) {
|
|
567
|
+
console.log(` ${c('green', 'β')} ${c('bold', agent.displayName)}: ${c('dim', agent.role)}`);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
console.log('');
|
|
571
|
+
console.log(c('dim', ' Komutlar:'));
|
|
572
|
+
console.log(c('dim', ' vantuz team chat <isim> "mesaj"'));
|
|
573
|
+
console.log(c('dim', ' vantuz team broadcast "duyuru"'));
|
|
574
|
+
console.log('');
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
if (sub === 'chat') {
|
|
579
|
+
const agentName = args[2];
|
|
580
|
+
const message = args.slice(3).join(' ');
|
|
581
|
+
if (!agentName || !message) {
|
|
582
|
+
console.log(c('red', 'KullanΔ±m: vantuz team chat <agent> <mesaj>'));
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
585
|
+
console.log(c('dim', `${agentName} dΓΌΕΓΌnΓΌyor...`));
|
|
586
|
+
try {
|
|
587
|
+
const response = await engine.team.chat(agentName, message);
|
|
588
|
+
console.log(`\n${c('cyan', agentName + ':')} ${response}\n`);
|
|
589
|
+
} catch (e) {
|
|
590
|
+
console.log(c('red', `Hata: ${e.message}`));
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
if (sub === 'broadcast') {
|
|
595
|
+
const message = args.slice(2).join(' ');
|
|
596
|
+
if (!message) {
|
|
597
|
+
console.log(c('red', 'KullanΔ±m: vantuz team broadcast <mesaj>'));
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
console.log(c('dim', 'TΓΌm takΔ±ma iletiliyor...'));
|
|
601
|
+
try {
|
|
602
|
+
const results = await engine.team.broadcast(message);
|
|
603
|
+
for (const [name, resp] of Object.entries(results)) {
|
|
604
|
+
console.log(`\n${c('bold', name.toUpperCase())}: ${resp}`);
|
|
605
|
+
}
|
|
606
|
+
} catch (e) {
|
|
607
|
+
console.log(c('red', `Hata: ${e.message}`));
|
|
608
|
+
}
|
|
609
|
+
console.log('');
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
614
|
+
// MAIN
|
|
615
|
+
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
616
|
+
|
|
617
|
+
const args = process.argv.slice(2);
|
|
618
|
+
const command = args[0]?.toLowerCase();
|
|
619
|
+
|
|
620
|
+
async function main() {
|
|
621
|
+
switch (command) {
|
|
622
|
+
case 'tui':
|
|
623
|
+
case 'chat':
|
|
624
|
+
await runTUI();
|
|
625
|
+
break;
|
|
626
|
+
|
|
627
|
+
case 'config':
|
|
628
|
+
await runConfig(args);
|
|
629
|
+
break;
|
|
630
|
+
|
|
631
|
+
case 'logs':
|
|
632
|
+
await runLogs(args);
|
|
633
|
+
break;
|
|
634
|
+
|
|
635
|
+
case 'gateway':
|
|
636
|
+
case 'gw':
|
|
637
|
+
await runGateway(args);
|
|
638
|
+
break;
|
|
639
|
+
|
|
640
|
+
case 'doctor':
|
|
641
|
+
case 'check':
|
|
642
|
+
await runDoctor();
|
|
643
|
+
break;
|
|
644
|
+
|
|
645
|
+
case 'channels':
|
|
646
|
+
case 'ch':
|
|
647
|
+
await runChannels(args);
|
|
648
|
+
break;
|
|
649
|
+
|
|
650
|
+
case 'status':
|
|
651
|
+
printHeader();
|
|
652
|
+
const lic = licenseManager.getInfo();
|
|
653
|
+
if (lic.valid) {
|
|
654
|
+
console.log(`Lisans Durumu: ${c('green', 'Aktif')} (${lic.type})`);
|
|
655
|
+
console.log(`Kalan SΓΌre: ${c('yellow', lic.daysLeft + ' GΓΌn')}`);
|
|
656
|
+
} else {
|
|
657
|
+
console.log(`Lisans Durumu: ${c('red', 'Pasif/SΓΌresi DolmuΕ')}`);
|
|
658
|
+
}
|
|
659
|
+
const gw = await getGateway();
|
|
660
|
+
const gwInfo = gw.getInfo();
|
|
661
|
+
console.log(`Vantuz Gateway: ${gwInfo.connected ? c('green', 'β BaΔlΔ±') : c('yellow', 'β BaΔlΔ± DeΔil')}`);
|
|
662
|
+
break;
|
|
663
|
+
|
|
664
|
+
case 'team':
|
|
665
|
+
await runTeam(args);
|
|
666
|
+
break;
|
|
667
|
+
|
|
668
|
+
default:
|
|
669
|
+
printHeader();
|
|
670
|
+
console.log('KullanΔ±m:\n');
|
|
671
|
+
console.log(` ${c('cyan', 'vantuz tui')} - Sohbet arayΓΌzΓΌ`);
|
|
672
|
+
console.log(` ${c('cyan', 'vantuz status')} - Durum kontrolΓΌ`);
|
|
673
|
+
console.log(` ${c('cyan', 'vantuz team')} - Yapay Zeka TakΔ±mΔ±`);
|
|
674
|
+
console.log(` ${c('cyan', 'vantuz gateway')} - Gateway yΓΆnetimi`);
|
|
675
|
+
console.log(` ${c('cyan', 'vantuz doctor')} - Sistem saΔlΔ±k kontrolΓΌ`);
|
|
676
|
+
console.log(` ${c('cyan', 'vantuz channels')} - Δ°letiΕim kanallarΔ±`);
|
|
677
|
+
console.log(` ${c('cyan', 'vantuz channels login')} - WhatsApp QR login`);
|
|
678
|
+
console.log(` ${c('cyan', 'vantuz config')} - AyarlarΔ± gΓΆster/gΓΌncelle`);
|
|
679
|
+
console.log(` ${c('cyan', 'vantuz logs')} - LoglarΔ± gΓΆster`);
|
|
680
|
+
console.log(`\nKurulum ve baΕlangΔ±Γ§ ayarlarΔ± iΓ§in: ${c('cyan', 'vantuz config init')}`);
|
|
681
|
+
process.exitCode = command ? 2 : 0;
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
main();
|