vantuz 3.3.1 → 3.3.2
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/cli.js +185 -70
- package/core/agent.js +82 -0
- package/core/ai-provider.js +26 -6
- package/core/automation.js +504 -0
- package/core/channels.js +2 -2
- package/core/engine.js +319 -90
- package/core/gateway.js +68 -16
- package/core/migrations/001-initial-schema.sql +20 -0
- package/core/openclaw-bridge.js +191 -0
- package/package.json +83 -89
- package/platforms/amazon.js +5 -3
- package/platforms/ciceksepeti.js +4 -2
- package/platforms/hepsiburada.js +6 -4
- package/platforms/n11.js +5 -3
- package/platforms/pazarama.js +4 -2
- package/platforms/trendyol.js +3 -3
- package/plugins/vantuz/package.json +2 -2
- package/plugins/vantuz/platforms/index.js +34 -7
- package/plugins/vantuz/platforms/n11.js +75 -26
- package/server/app.js +29 -12
- package/server/public/index.html +2 -2
- package/.openclaw/completions/openclaw.bash +0 -227
- package/.openclaw/completions/openclaw.fish +0 -1552
- package/.openclaw/completions/openclaw.ps1 +0 -1966
- package/.openclaw/completions/openclaw.zsh +0 -3571
- package/.openclaw/gateway.cmd +0 -10
- package/.openclaw/identity/device.json +0 -7
- package/.openclaw/openclaw.json +0 -32
- package/DOCS_TR.md +0 -298
- package/onboard.js +0 -322
package/.openclaw/gateway.cmd
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
@echo off
|
|
2
|
-
rem OpenClaw Gateway (v2026.2.9)
|
|
3
|
-
set PATH=C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\java8path;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Python27\python.exe;C:\Python27\Scripts;C:\Program Files (x86)\Nmap\;c:\Users\OSMBILISIM\AppData\Local\Programs\cursor\resources\app\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\CMake\bin;C:\Program Files\Docker\Docker\resources\bin;C:\Program Files\PostgreSQL\15\bin;C:\Users\Osmbilisimsatis\AppData\Roaming\npm;C:\Users\OSMBILISIM\scoop\shims;C:\Users\OSMBILISIM\AppData\Local\Programs\Python\Python310\Scripts\;C:\Users\OSMBILISIM\AppData\Local\Programs\Python\Python310\;C:\Users\OSMBILISIM\AppData\Local\Microsoft\WindowsApps;C:\Users\OSMBILISIM\AppData\Local\Programs\Git\cmd;C:\Users\OSMBILISIM\AppData\Roaming\npm;C:\Users\OSMBILISIM\AppData\Local\Programs\Windsurf\bin;C:\Users\OSMBILISIM\AppData\Local\Programs\cursor\resources\app\bin;c:\Users\OSMBILISIM\AppData\Local\Programs\cursor\resources\app\bin;C:\Program Files\GitHub CLI\;C:\Program Files\Void\bin;C:\Users\OSMBILISIM\Downloads\flutter\bin;C:\Users\OSMBILISIM\Downloads\php-8.4.11-nts-Win32-vs17-x64;C:\Users\OSMBILISIM\Downloads\flutter\bin;C:\xampp\php;C:\ProgramData\ComposerSetup\bin;C:\Ruby34-x64\msys64\ucrt64\bin;C:\Ruby34-x64\bin;C:\Users\OSMBILISIM\AppData\Local\Programs\Python\Python310\python.exe;C:\Users\OSMBILISIM\go\bin;C:\Program Files\Go\bin;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Program Files\nodejs\;C:\Program Files\dotnet\;C:\Program Files\cursor\resources\app\bin;C:\Program Files\Tailscale\;C:\Python27\python.exe;C:\Python27\Scripts;C:\Program Files (x86)\Nmap\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\CMake\bin;C:\Program Files\Docker\Docker\resources\bin;C:\Program Files\PostgreSQL\15\bin;C:\Users\Osmbilisimsatis\AppData\Roaming\npm;C:\Users\OSMBILISIM\scoop\shims;C:\Users\OSMBILISIM\AppData\Local\Programs\Python\Python310\Scripts\;C:\Users\OSMBILISIM\AppData\Local\Programs\Python\Python310\;C:\Users\OSMBILISIM\AppData\Local\Microsoft\WindowsApps;C:\Users\OSMBILISIM\AppData\Local\Programs\Git\cmd;C:\Users\OSMBILISIM\AppData\Local\Programs\Windsurf\bin;C:\Program Files\GitHub CLI\;C:\Program Files;C:\Users\OSMBILISIM\go\bin;C:\Users\OSMBILISIM\AppData\Local\Programs\Qoder\bin;C:\Users\OSMBILISIM\AppData\Roaming\npm;C:\Users\OSMBILISIM\AppData\Local\Programs\Antigravity\bin;C:\Users\OSMBILISIM\AppData\Local\Programs\Ollama
|
|
4
|
-
set OPENCLAW_GATEWAY_PORT=18789
|
|
5
|
-
set OPENCLAW_GATEWAY_TOKEN=e432e1210dcfb65a16122ce44ccaabeb6fefac299759b841
|
|
6
|
-
set OPENCLAW_SYSTEMD_UNIT=openclaw-gateway.service
|
|
7
|
-
set OPENCLAW_SERVICE_MARKER=openclaw
|
|
8
|
-
set OPENCLAW_SERVICE_KIND=gateway
|
|
9
|
-
set OPENCLAW_SERVICE_VERSION=2026.2.9
|
|
10
|
-
call npx openclaw gateway --port 18789 --allow-unconfigured
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 1,
|
|
3
|
-
"deviceId": "b37c08a4ffb5fb274c735d5c4a9dafa001447d8ac18b05102129e2cafed4307c",
|
|
4
|
-
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA/WoKlAj3d+1nj3EEJaiCy+N4drHLu3/+q00EJeNDXtk=\n-----END PUBLIC KEY-----\n",
|
|
5
|
-
"privateKeyPem": "-----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEIGk9gpUGGch4gQg/ozBZf0R63/MXlTqQju9U6IuZQpaB\n-----END PRIVATE KEY-----\n",
|
|
6
|
-
"createdAtMs": 1770715930222
|
|
7
|
-
}
|
package/.openclaw/openclaw.json
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"messages": {
|
|
3
|
-
"ackReactionScope": "group-mentions"
|
|
4
|
-
},
|
|
5
|
-
"agents": {
|
|
6
|
-
"defaults": {
|
|
7
|
-
"maxConcurrent": 4,
|
|
8
|
-
"subagents": {
|
|
9
|
-
"maxConcurrent": 8
|
|
10
|
-
},
|
|
11
|
-
"compaction": {
|
|
12
|
-
"mode": "safeguard"
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
"gateway": {
|
|
17
|
-
"auth": {
|
|
18
|
-
"mode": "token",
|
|
19
|
-
"token": "e432e1210dcfb65a16122ce44ccaabeb6fefac299759b841"
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"wizard": {
|
|
23
|
-
"lastRunAt": "2026-02-10T09:32:30.166Z",
|
|
24
|
-
"lastRunVersion": "2026.2.9",
|
|
25
|
-
"lastRunCommand": "doctor",
|
|
26
|
-
"lastRunMode": "local"
|
|
27
|
-
},
|
|
28
|
-
"meta": {
|
|
29
|
-
"lastTouchedVersion": "2026.2.9",
|
|
30
|
-
"lastTouchedAt": "2026-02-10T09:32:30.181Z"
|
|
31
|
-
}
|
|
32
|
-
}
|
package/DOCS_TR.md
DELETED
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
# 🐙 Vantuz AI - Türkçe Teknik Dokümantasyon
|
|
2
|
-
|
|
3
|
-
## İçindekiler
|
|
4
|
-
|
|
5
|
-
1. [Mimari Genel Bakış](#mimari)
|
|
6
|
-
2. [Plugin Yapısı](#plugin-yapısı)
|
|
7
|
-
3. [Tools (Araçlar)](#tools)
|
|
8
|
-
4. [Commands (Komutlar)](#commands)
|
|
9
|
-
5. [Services (Servisler)](#services)
|
|
10
|
-
6. [Hippocampus Hafıza](#hippocampus)
|
|
11
|
-
7. [Yapılandırma](#yapılandırma)
|
|
12
|
-
8. [API Referansı](#api-referansı)
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Mimari
|
|
17
|
-
|
|
18
|
-
Vantuz, **OpenClaw Gateway** üzerine inşa edilmiş bir plugin sistemidir.
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
22
|
-
│ OpenClaw Gateway │
|
|
23
|
-
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
24
|
-
│ │ WhatsApp │ │ Telegram │ │ Discord │ │
|
|
25
|
-
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
|
|
26
|
-
│ │ │ │ │
|
|
27
|
-
│ └─────────────┼─────────────┘ │
|
|
28
|
-
│ ▼ │
|
|
29
|
-
│ ┌─────────────┐ │
|
|
30
|
-
│ │ Vantuz Core │ │
|
|
31
|
-
│ │ Plugin │ │
|
|
32
|
-
│ └─────┬───────┘ │
|
|
33
|
-
│ │ │
|
|
34
|
-
│ ┌───────┬───────┼───────┬───────┐ │
|
|
35
|
-
│ ▼ ▼ ▼ ▼ ▼ │
|
|
36
|
-
│ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ │
|
|
37
|
-
│ │Repri-││Vision││Senti-││Cross-││Analy-│ │
|
|
38
|
-
│ │cer ││ AI ││ment ││Border││tics │ │
|
|
39
|
-
│ └──────┘└──────┘└──────┘└──────┘└──────┘ │
|
|
40
|
-
│ │ │
|
|
41
|
-
│ ┌─────▼───────┐ │
|
|
42
|
-
│ │ Hippocampus │ │
|
|
43
|
-
│ │ Memory │ │
|
|
44
|
-
│ └─────────────┘ │
|
|
45
|
-
└─────────────────────────────────────────────────────────────┘
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## Plugin Yapısı
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
plugins/vantuz/
|
|
54
|
-
├── index.js # Ana plugin entry point
|
|
55
|
-
├── package.json # Plugin manifest
|
|
56
|
-
├── tools/
|
|
57
|
-
│ ├── repricer.js # Kan Emici fiyat robotu
|
|
58
|
-
│ ├── vision.js # Fotoğraf → ürün
|
|
59
|
-
│ ├── sentiment.js # Yorum analizi
|
|
60
|
-
│ ├── crossborder.js # Sınır ötesi satış
|
|
61
|
-
│ ├── product.js # Ürün CRUD
|
|
62
|
-
│ └── analytics.js # Raporlama
|
|
63
|
-
├── services/
|
|
64
|
-
│ └── license.js # Lisans doğrulama
|
|
65
|
-
├── memory/
|
|
66
|
-
│ └── hippocampus.js # Hafıza sistemi
|
|
67
|
-
└── platforms/
|
|
68
|
-
└── index.js # Pazaryeri API stubs
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
## Tools
|
|
74
|
-
|
|
75
|
-
### vantuz.repricer
|
|
76
|
-
|
|
77
|
-
Rakip fiyatlarını analiz eder ve karar verir.
|
|
78
|
-
|
|
79
|
-
**Parametreler:**
|
|
80
|
-
| Param | Tip | Zorunlu | Açıklama |
|
|
81
|
-
|-------|-----|---------|----------|
|
|
82
|
-
| barcode | string | ✅ | Ürün barkodu/SKU |
|
|
83
|
-
| platform | string | - | trendyol, hepsiburada, amazon, n11, all |
|
|
84
|
-
| targetMargin | number | - | Hedef kar marjı % |
|
|
85
|
-
| action | string | - | analyze, apply, schedule |
|
|
86
|
-
|
|
87
|
-
**Örnek:**
|
|
88
|
-
```json
|
|
89
|
-
{
|
|
90
|
-
"name": "vantuz.repricer",
|
|
91
|
-
"parameters": {
|
|
92
|
-
"barcode": "SKU-12345",
|
|
93
|
-
"platform": "trendyol",
|
|
94
|
-
"targetMargin": 25,
|
|
95
|
-
"action": "analyze"
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
### vantuz.vision
|
|
103
|
-
|
|
104
|
-
Fotoğraftan ürün bilgisi çıkarır.
|
|
105
|
-
|
|
106
|
-
**Parametreler:**
|
|
107
|
-
| Param | Tip | Zorunlu | Açıklama |
|
|
108
|
-
|-------|-----|---------|----------|
|
|
109
|
-
| imageUrl | string | ✅ | Görsel URL veya base64 |
|
|
110
|
-
| targetPlatforms | array | - | Hedef pazaryerleri |
|
|
111
|
-
| autoPublish | boolean | - | Otomatik yayınla |
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
### vantuz.sentiment
|
|
116
|
-
|
|
117
|
-
Müşteri yorumlarını analiz eder.
|
|
118
|
-
|
|
119
|
-
**Parametreler:**
|
|
120
|
-
| Param | Tip | Zorunlu | Açıklama |
|
|
121
|
-
|-------|-----|---------|----------|
|
|
122
|
-
| productId | string | ✅ | Ürün ID/barkod |
|
|
123
|
-
| platform | string | - | Pazaryeri |
|
|
124
|
-
| period | string | - | 7d, 30d, 90d, all |
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
### vantuz.crossborder
|
|
129
|
-
|
|
130
|
-
Uluslararası satış hazırlığı yapar.
|
|
131
|
-
|
|
132
|
-
**Parametreler:**
|
|
133
|
-
| Param | Tip | Zorunlu | Açıklama |
|
|
134
|
-
|-------|-----|---------|----------|
|
|
135
|
-
| productId | string | ✅ | Kaynak ürün ID |
|
|
136
|
-
| targetMarket | string | ✅ | de, us, uk, fr |
|
|
137
|
-
| fulfillment | string | - | fba, fbm, self |
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## Commands
|
|
142
|
-
|
|
143
|
-
Kullanıcılar WhatsApp/Telegram'dan doğrudan kullanabilir:
|
|
144
|
-
|
|
145
|
-
| Komut | Açıklama | Örnek |
|
|
146
|
-
|-------|----------|-------|
|
|
147
|
-
| `/stok` | Stok özeti | `/stok trendyol` |
|
|
148
|
-
| `/fiyat` | Fiyat güncelle | `/fiyat SKU123 199` |
|
|
149
|
-
| `/rapor` | Satış raporu | `/rapor 7d` |
|
|
150
|
-
| `/rakip` | Rakip analizi | `/rakip SKU123` |
|
|
151
|
-
| `/lisans` | Lisans durumu | `/lisans` |
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## Services
|
|
156
|
-
|
|
157
|
-
### vantuz-license
|
|
158
|
-
Başlatmada lisans doğrulaması yapar. Her 24 saatte bir kontrol tekrarlanır.
|
|
159
|
-
|
|
160
|
-
### vantuz-memory
|
|
161
|
-
Hippocampus hafıza sistemini başlatır ve yönetir.
|
|
162
|
-
|
|
163
|
-
### vantuz-repricer-daemon
|
|
164
|
-
Her 15 dakikada bir otomatik fiyat kontrolü yapar.
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## Hippocampus
|
|
169
|
-
|
|
170
|
-
SQLite tabanlı gelişmiş hafıza sistemi.
|
|
171
|
-
|
|
172
|
-
### Tablolar
|
|
173
|
-
|
|
174
|
-
**Memory** - Genel hafıza
|
|
175
|
-
- type: decision, price_change, product, conversation, insight
|
|
176
|
-
- content: Hafıza içeriği
|
|
177
|
-
- importance: 0-1 önem skoru
|
|
178
|
-
- accessCount: Erişim sayısı
|
|
179
|
-
|
|
180
|
-
**PricingDecision** - Fiyat kararları
|
|
181
|
-
- barcode, previousPrice, newPrice, reason, outcome
|
|
182
|
-
|
|
183
|
-
**ProductContext** - Ürün bağlamı
|
|
184
|
-
- avgSalePrice, competitorHistory, customerSentiment
|
|
185
|
-
|
|
186
|
-
**LearnedRule** - Öğrenilen kurallar
|
|
187
|
-
- trigger, condition, action, confidence
|
|
188
|
-
|
|
189
|
-
### Özellikler
|
|
190
|
-
|
|
191
|
-
- **Konsolidasyon**: Her gece 03:00'te eski/önemsiz hafızalar temizlenir
|
|
192
|
-
- **Öğrenme**: Başarılı kararlar otomatik kural olur
|
|
193
|
-
- **Bağlamsal Hatırlama**: İlgili hafızalar sorgulanabilir
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## Yapılandırma
|
|
198
|
-
|
|
199
|
-
### .openclaw/openclaw.json
|
|
200
|
-
|
|
201
|
-
```json
|
|
202
|
-
{
|
|
203
|
-
"agents": {
|
|
204
|
-
"defaults": {
|
|
205
|
-
"workspace": "./workspace"
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
"channels": {
|
|
209
|
-
"whatsapp": { "enabled": true },
|
|
210
|
-
"telegram": {
|
|
211
|
-
"enabled": true,
|
|
212
|
-
"botToken": "${TELEGRAM_BOT_TOKEN}"
|
|
213
|
-
}
|
|
214
|
-
},
|
|
215
|
-
"models": {
|
|
216
|
-
"openai": {
|
|
217
|
-
"apiKey": "${OPENAI_API_KEY}"
|
|
218
|
-
}
|
|
219
|
-
},
|
|
220
|
-
"plugins": {
|
|
221
|
-
"load": {
|
|
222
|
-
"paths": ["./plugins/vantuz"]
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
### .env
|
|
229
|
-
|
|
230
|
-
```env
|
|
231
|
-
OPENAI_API_KEY=sk-...
|
|
232
|
-
TELEGRAM_BOT_TOKEN=123456:ABC...
|
|
233
|
-
VANTUZ_LICENSE_KEY=...
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
---
|
|
237
|
-
|
|
238
|
-
## API Referansı
|
|
239
|
-
|
|
240
|
-
### Gateway RPC
|
|
241
|
-
|
|
242
|
-
**vantuz.status**
|
|
243
|
-
```json
|
|
244
|
-
{
|
|
245
|
-
"version": "2.0.0",
|
|
246
|
-
"license": { "valid": true, "customer": "..." },
|
|
247
|
-
"memory": { "memories": 150, "decisions": 45 },
|
|
248
|
-
"platforms": { "trendyol": true, "hepsiburada": true }
|
|
249
|
-
}
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
**vantuz.config**
|
|
253
|
-
```json
|
|
254
|
-
// GET
|
|
255
|
-
{ "action": "get" }
|
|
256
|
-
|
|
257
|
-
// SET
|
|
258
|
-
{ "action": "set", "data": { "repricerInterval": 30 } }
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
---
|
|
262
|
-
|
|
263
|
-
## Geliştirme
|
|
264
|
-
|
|
265
|
-
### Yeni Tool Ekleme
|
|
266
|
-
|
|
267
|
-
```javascript
|
|
268
|
-
// plugins/vantuz/tools/myTool.js
|
|
269
|
-
export const myTool = {
|
|
270
|
-
name: 'my-tool',
|
|
271
|
-
async execute(params, context) {
|
|
272
|
-
const { api, memory, license } = context;
|
|
273
|
-
// ...
|
|
274
|
-
return { success: true, data: {} };
|
|
275
|
-
}
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
// index.js'de register et
|
|
279
|
-
api.registerTool({
|
|
280
|
-
name: 'vantuz.mytool',
|
|
281
|
-
description: '...',
|
|
282
|
-
parameters: { ... },
|
|
283
|
-
handler: (params) => myTool.execute(params, context)
|
|
284
|
-
});
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
### Yeni Command Ekleme
|
|
288
|
-
|
|
289
|
-
```javascript
|
|
290
|
-
api.registerCommand({
|
|
291
|
-
name: 'mycommand',
|
|
292
|
-
description: 'Açıklama',
|
|
293
|
-
acceptsArgs: true,
|
|
294
|
-
handler: async (ctx) => {
|
|
295
|
-
return { text: 'Yanıt' };
|
|
296
|
-
}
|
|
297
|
-
});
|
|
298
|
-
```
|
package/onboard.js
DELETED
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* VANTUZ - Profesyonel Kurulum Sihirbazı
|
|
5
|
-
* v3.2.7 - OpenClaw Gateway Entegrasyonlu
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import fs from 'fs';
|
|
9
|
-
import path from 'path';
|
|
10
|
-
import os from 'os';
|
|
11
|
-
import readline from 'readline';
|
|
12
|
-
import { fileURLToPath } from 'url';
|
|
13
|
-
|
|
14
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
15
|
-
const VANTUZ_HOME = path.join(os.homedir(), '.vantuz');
|
|
16
|
-
const CONFIG_PATH = path.join(VANTUZ_HOME, '.env');
|
|
17
|
-
|
|
18
|
-
// Colors
|
|
19
|
-
const colors = {
|
|
20
|
-
reset: '\x1b[0m', bold: '\x1b[1m', dim: '\x1b[2m',
|
|
21
|
-
red: '\x1b[31m', green: '\x1b[32m', yellow: '\x1b[33m',
|
|
22
|
-
blue: '\x1b[34m', magenta: '\x1b[35m', cyan: '\x1b[36m'
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
const c = (color, text) => `${colors[color]}${text}${colors.reset}`;
|
|
26
|
-
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
27
|
-
|
|
28
|
-
const LOGO = `
|
|
29
|
-
V A N T U Z A I
|
|
30
|
-
-----------------
|
|
31
|
-
Enterprise E-Ticaret Yönetimi
|
|
32
|
-
`;
|
|
33
|
-
|
|
34
|
-
const WELCOME_BOX = `
|
|
35
|
-
-----------------------------------------------------------------
|
|
36
|
-
HOŞ GELDİNİZ - Vantuz AI Kurulumu
|
|
37
|
-
-----------------------------------------------------------------
|
|
38
|
-
|
|
39
|
-
Bu sihirbaz kurulumu tamamlamanıza yardımcı olacak:
|
|
40
|
-
|
|
41
|
-
[ ] AI Servis Seçimi
|
|
42
|
-
[ ] Pazaryeri Bağlantıları
|
|
43
|
-
[ ] İletişim Kanalları
|
|
44
|
-
[ ] OpenClaw Gateway Yapılandırması
|
|
45
|
-
|
|
46
|
-
-----------------------------------------------------------------
|
|
47
|
-
`;
|
|
48
|
-
|
|
49
|
-
class OnboardingWizard {
|
|
50
|
-
constructor() {
|
|
51
|
-
this.envVars = {};
|
|
52
|
-
this.step = 0;
|
|
53
|
-
this.totalSteps = 6; // Updated total steps
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
async step_EIAConfig() {
|
|
57
|
-
this.step = 5; // Adjust step number
|
|
58
|
-
this.printHeader('E-TICARET YÖNETİM AJANSI (EIA) YAPILANDIRMASI');
|
|
59
|
-
|
|
60
|
-
console.log('EIA\'nın operasyonlarını optimize etmek için bazı bilgiler sağlayın.\n');
|
|
61
|
-
|
|
62
|
-
const competitorUrls = await this.prompt('Rakip Ürün URL\'leri (virgülle ayırarak): ');
|
|
63
|
-
if (competitorUrls) {
|
|
64
|
-
this.envVars.EIA_COMPETITOR_URLS = competitorUrls.trim();
|
|
65
|
-
console.log(c('green', '[OK] Rakip URL\'leri kaydedildi.\n'));
|
|
66
|
-
} else {
|
|
67
|
-
console.log(c('yellow', '[BİLGİ] Rakip URL\'leri girilmedi.\n'));
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const profitMargin = await this.prompt('Hedef Kar Marjı (%) [15]: ');
|
|
71
|
-
if (profitMargin && !isNaN(parseFloat(profitMargin))) {
|
|
72
|
-
this.envVars.EIA_TARGET_PROFIT_MARGIN = parseFloat(profitMargin);
|
|
73
|
-
console.log(c('green', '[OK] Hedef Kar Marjı kaydedildi.\n'));
|
|
74
|
-
} else {
|
|
75
|
-
this.envVars.EIA_TARGET_PROFIT_MARGIN = 15; // Default if invalid
|
|
76
|
-
console.log(c('yellow', '[BİLGİ] Geçersiz kar marjı, varsayılan %15 kullanılıyor.\n'));
|
|
77
|
-
}
|
|
78
|
-
await sleep(1000);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
clear() { console.clear(); }
|
|
82
|
-
|
|
83
|
-
async showLogo() {
|
|
84
|
-
this.clear();
|
|
85
|
-
console.log(c('cyan', LOGO));
|
|
86
|
-
await sleep(500);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
async run() {
|
|
90
|
-
try {
|
|
91
|
-
await this.showLogo();
|
|
92
|
-
await this.showWelcome();
|
|
93
|
-
console.log(c('green', '⚡ Geliştirici Modu: Lisans kontrolü atlandı.\n'));
|
|
94
|
-
await this.step1_AIProvider();
|
|
95
|
-
await this.step2_Platforms();
|
|
96
|
-
await this.step3_Channels();
|
|
97
|
-
await this.step4_Gateway();
|
|
98
|
-
await this.step_EIAConfig(); // New step
|
|
99
|
-
await this.step5_Save();
|
|
100
|
-
await this.showSuccess();
|
|
101
|
-
} catch (error) {
|
|
102
|
-
console.error('\n' + c('red', `Beklenmeyen Hata: ${error.message}`));
|
|
103
|
-
process.exit(1);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
printHeader(title) {
|
|
108
|
-
this.clear();
|
|
109
|
-
console.log(c('cyan', LOGO));
|
|
110
|
-
console.log('\n' + c('bold', `ADIM ${this.step}/${this.totalSteps}: ${title}`));
|
|
111
|
-
console.log('-'.repeat(50) + '\n');
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
async showWelcome() {
|
|
115
|
-
console.log(WELCOME_BOX);
|
|
116
|
-
await this.prompt(c('dim', 'Devam etmek için Enter\'a basın...'));
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// ADIM 1: AI PROVIDER
|
|
120
|
-
async step1_AIProvider() {
|
|
121
|
-
this.step = 1;
|
|
122
|
-
this.printHeader('YAPAY ZEKA SERVİSİ');
|
|
123
|
-
|
|
124
|
-
console.log('Kullanılacak AI modelini seçin:\n');
|
|
125
|
-
console.log(' 1. Google Gemini (Önerilen/Ücretsiz)');
|
|
126
|
-
console.log(' 2. OpenAI GPT-4o');
|
|
127
|
-
console.log(' 3. Anthropic Claude 3.5');
|
|
128
|
-
console.log(' 4. DeepSeek V3');
|
|
129
|
-
console.log(' 5. Groq (Hızlı/Ücretsiz)');
|
|
130
|
-
console.log(c('dim', ' S. Atla (Daha sonra ayarla)\n'));
|
|
131
|
-
|
|
132
|
-
const choice = await this.prompt('Seçiminiz (1-5 veya S) [1]: ') || '1';
|
|
133
|
-
|
|
134
|
-
if (choice.toLowerCase() === 's') {
|
|
135
|
-
console.log(c('yellow', '\n[ATLANDI] AI yapılandırması geçildi.\n'));
|
|
136
|
-
await sleep(1000);
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
const providers = {
|
|
141
|
-
'1': { label: 'Google Gemini', env: 'GEMINI_API_KEY' },
|
|
142
|
-
'2': { label: 'OpenAI', env: 'OPENAI_API_KEY' },
|
|
143
|
-
'3': { label: 'Anthropic', env: 'ANTHROPIC_API_KEY' },
|
|
144
|
-
'4': { label: 'DeepSeek', env: 'DEEPSEEK_API_KEY' },
|
|
145
|
-
'5': { label: 'Groq', env: 'GROQ_API_KEY' }
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
const selected = providers[choice] || providers['1'];
|
|
149
|
-
console.log(c('green', `\n[SEÇİLDİ] ${selected.label}\n`));
|
|
150
|
-
|
|
151
|
-
const key = await this.prompt(`${selected.label} API Key: `);
|
|
152
|
-
|
|
153
|
-
if (key && key.trim()) {
|
|
154
|
-
this.envVars[selected.env] = key.trim();
|
|
155
|
-
console.log(c('green', '\n[OK] API anahtarı kaydedildi.\n'));
|
|
156
|
-
} else {
|
|
157
|
-
console.log(c('yellow', '\n[BİLGİ] API anahtarı girilmedi, daha sonra ekleyebilirsiniz.\n'));
|
|
158
|
-
}
|
|
159
|
-
await sleep(1000);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// ADIM 2: PAZARYERLERİ
|
|
163
|
-
async step2_Platforms() {
|
|
164
|
-
this.step = 2;
|
|
165
|
-
this.printHeader('PAZARYERİ ENTEGRASYONLARI');
|
|
166
|
-
|
|
167
|
-
console.log('Hangi pazaryerini yapılandırmak istersiniz?\n');
|
|
168
|
-
console.log(' 1. Trendyol');
|
|
169
|
-
console.log(' 2. Hepsiburada');
|
|
170
|
-
console.log(' 3. N11');
|
|
171
|
-
console.log(' 4. Amazon');
|
|
172
|
-
console.log(c('dim', ' S. Atla (Tümünü geç)\n'));
|
|
173
|
-
|
|
174
|
-
const choice = await this.prompt('Seçiminiz (1-4 veya S) [1]: ') || '1';
|
|
175
|
-
|
|
176
|
-
if (choice.toLowerCase() === 's') return;
|
|
177
|
-
|
|
178
|
-
if (choice === '1') {
|
|
179
|
-
console.log(c('cyan', '\nTrendyol Yapılandırması\n'));
|
|
180
|
-
console.log(c('dim', '(Boş bırakıp Enter\'a basarak geçebilirsiniz)\n'));
|
|
181
|
-
|
|
182
|
-
const supplierId = await this.prompt('Supplier ID: ');
|
|
183
|
-
if (!supplierId) {
|
|
184
|
-
console.log(c('yellow', '[ATLANDI] Trendyol ayarları yapılmadı.'));
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
const apiKey = await this.prompt('API Key: ');
|
|
189
|
-
const apiSecret = await this.prompt('API Secret: ');
|
|
190
|
-
|
|
191
|
-
this.envVars.TRENDYOL_SUPPLIER_ID = supplierId;
|
|
192
|
-
this.envVars.TRENDYOL_API_KEY = apiKey;
|
|
193
|
-
this.envVars.TRENDYOL_API_SECRET = apiSecret;
|
|
194
|
-
|
|
195
|
-
console.log(c('green', '\n[OK] Trendyol bilgileri alındı.\n'));
|
|
196
|
-
await sleep(1000);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// ADIM 3: KANALLAR
|
|
201
|
-
async step3_Channels() {
|
|
202
|
-
this.step = 3;
|
|
203
|
-
this.printHeader('İLETİŞİM KANALLARI');
|
|
204
|
-
|
|
205
|
-
console.log('WhatsApp ve Telegram entegrasyonu.\n');
|
|
206
|
-
|
|
207
|
-
const setup = await this.prompt('Telegram Bot Token eklemek ister misiniz? (e/H): ');
|
|
208
|
-
|
|
209
|
-
if (setup.toLowerCase() === 'e' || setup.toLowerCase() === 'y') {
|
|
210
|
-
const token = await this.prompt('Telegram Bot Token: ');
|
|
211
|
-
if (token) {
|
|
212
|
-
this.envVars.TELEGRAM_BOT_TOKEN = token;
|
|
213
|
-
console.log(c('green', '\n[OK] Telegram token alındı.\n'));
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
console.log(c('dim', '\nNot: WhatsApp bağlantısı "openclaw channels login" ile yapılır.\n'));
|
|
218
|
-
await sleep(1500);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// ADIM 4: VANTUZ GATEWAY
|
|
222
|
-
async step4_Gateway() {
|
|
223
|
-
this.step = 4;
|
|
224
|
-
this.printHeader('VANTUZ GATEWAY');
|
|
225
|
-
|
|
226
|
-
console.log('Vantuz Gateway, AI ve kanal yönetimini güçlendirir.\n');
|
|
227
|
-
|
|
228
|
-
// .openclaw/ klasörü kontrolü
|
|
229
|
-
const openclawDir = path.join(process.cwd(), '.openclaw');
|
|
230
|
-
const openclawConfig = path.join(openclawDir, 'openclaw.json');
|
|
231
|
-
|
|
232
|
-
if (fs.existsSync(openclawConfig)) {
|
|
233
|
-
console.log(c('green', '✔ Gateway yapılandırması bulundu.'));
|
|
234
|
-
try {
|
|
235
|
-
const config = JSON.parse(fs.readFileSync(openclawConfig, 'utf-8'));
|
|
236
|
-
if (config.gateway?.auth?.token) {
|
|
237
|
-
console.log(c('green', '✔ Token ve güvenlik anahtarları hazır.'));
|
|
238
|
-
}
|
|
239
|
-
} catch (e) {
|
|
240
|
-
console.log(c('yellow', '⚠ Config okunamadı.'));
|
|
241
|
-
}
|
|
242
|
-
} else {
|
|
243
|
-
console.log(c('yellow', '⚠ Gateway yapılandırması eksik.'));
|
|
244
|
-
console.log(c('dim', '\nOtomatik olarak oluşturulacak...\n'));
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
console.log(c('dim', '\nBaşlatmak için sadece: start.bat'));
|
|
248
|
-
console.log(c('dim', 'Durum kontrolü: vantuz gateway status\n'));
|
|
249
|
-
|
|
250
|
-
await this.prompt(c('dim', 'Devam etmek için Enter\'a basın...'));
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// KAYDET
|
|
254
|
-
async step5_Save() {
|
|
255
|
-
this.step = 5;
|
|
256
|
-
this.printHeader('AYARLAR KAYDEDİLİYOR');
|
|
257
|
-
|
|
258
|
-
console.log('Yapılandırma dosyası oluşturuluyor...');
|
|
259
|
-
|
|
260
|
-
if (!fs.existsSync(VANTUZ_HOME)) {
|
|
261
|
-
fs.mkdirSync(VANTUZ_HOME, { recursive: true });
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
let envContent = '# Vantuz AI Yapılandırması\n';
|
|
265
|
-
envContent += `# Oluşturulma Tarihi: ${new Date().toISOString()}\n\n`;
|
|
266
|
-
|
|
267
|
-
for (const [key, value] of Object.entries(this.envVars)) {
|
|
268
|
-
if (value) {
|
|
269
|
-
envContent += `${key}=${value}\n`;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
fs.writeFileSync(CONFIG_PATH, envContent);
|
|
274
|
-
console.log(c('green', `[OK] Dosya kaydedildi: ${CONFIG_PATH}`));
|
|
275
|
-
await sleep(500);
|
|
276
|
-
|
|
277
|
-
// Klasörler
|
|
278
|
-
['logs', 'data', 'cache'].forEach(dir => {
|
|
279
|
-
const p = path.join(VANTUZ_HOME, dir);
|
|
280
|
-
if (!fs.existsSync(p)) fs.mkdirSync(p, { recursive: true });
|
|
281
|
-
});
|
|
282
|
-
console.log(c('green', '[OK] Veri klasörleri oluşturuldu.'));
|
|
283
|
-
await sleep(1000);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
async showSuccess() {
|
|
287
|
-
this.clear();
|
|
288
|
-
console.log('\n');
|
|
289
|
-
console.log(c('green', '=================================================='));
|
|
290
|
-
console.log(c('green', ' KURULUM BAŞARIYLA TAMAMLANDI '));
|
|
291
|
-
console.log(c('green', '=================================================='));
|
|
292
|
-
console.log('\n');
|
|
293
|
-
console.log('Vantuz AI kullanıma hazırdır.\n');
|
|
294
|
-
console.log('Başlamak için şu komutları kullanabilirsiniz:');
|
|
295
|
-
console.log(c('cyan', ' vantuz tui') + ' - Sohbet arayüzünü başlatır');
|
|
296
|
-
console.log(c('cyan', ' vantuz status') + ' - Sistem durumunu gösterir');
|
|
297
|
-
console.log(c('cyan', ' vantuz gateway') + ' - Gateway durumunu gösterir');
|
|
298
|
-
console.log(c('cyan', ' vantuz doctor') + ' - Sistem sağlık kontrolü');
|
|
299
|
-
console.log('\n');
|
|
300
|
-
|
|
301
|
-
await this.prompt(c('dim', 'Çıkmak için Enter\'a basın...'));
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
// ARAÇLAR
|
|
305
|
-
prompt(question) {
|
|
306
|
-
return new Promise((resolve) => {
|
|
307
|
-
const rl = readline.createInterface({
|
|
308
|
-
input: process.stdin,
|
|
309
|
-
output: process.stdout
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
rl.question(question, (answer) => {
|
|
313
|
-
rl.close();
|
|
314
|
-
resolve(answer.trim());
|
|
315
|
-
});
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
// BAŞLAT
|
|
321
|
-
const wizard = new OnboardingWizard();
|
|
322
|
-
wizard.run();
|