vilvona 1.0.2 → 1.0.3

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/README.md CHANGED
@@ -39,12 +39,14 @@ It is built on the foundation of [OpenClaw](https://openclaw.ai) (MIT license) w
39
39
  ## Quick Start
40
40
 
41
41
  ```bash
42
- # Run instantly — no install needed
42
+ # npm (recommended)
43
43
  npx vilvona
44
44
 
45
- # Or install globally
46
- npm install -g vilvona
47
- vilvona
45
+ # yarn
46
+ yarn dlx vilvona
47
+
48
+ # pnpm
49
+ pnpm dlx vilvona
48
50
  ```
49
51
 
50
52
  Set your Anthropic API key (get one free at [console.anthropic.com](https://console.anthropic.com)):
@@ -110,12 +112,35 @@ Or set in your config file:
110
112
 
111
113
  ## Installation
112
114
 
113
- ### npx (recommended — no install)
115
+ ### npx — no install needed
114
116
 
115
117
  ```bash
116
118
  npx vilvona
117
119
  ```
118
120
 
121
+ ### yarn
122
+
123
+ ```bash
124
+ yarn dlx vilvona
125
+
126
+ # or install globally
127
+ yarn global add vilvona
128
+ vilvona
129
+ ```
130
+
131
+ ### pnpm
132
+
133
+ ```bash
134
+ pnpm dlx vilvona
135
+
136
+ # or install globally
137
+ pnpm add -g vilvona
138
+ vilvona
139
+ ```
140
+
141
+ > **Note:** `pnpm dlx` requires the package to be 2+ days old due to pnpm's supply-chain security.
142
+ > If it fails, use `npx vilvona` or run: `pnpm config set minimumReleaseAge 0`
143
+
119
144
  ### npm global
120
145
 
121
146
  ```bash
package/docs/.nojekyll ADDED
File without changes
package/docs/404.html ADDED
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta http-equiv="refresh" content="0; url=index.html" />
6
+ <title>Redirecting — Vilvona AI</title>
7
+ </head>
8
+ <body>
9
+ <p>Redirecting to <a href="index.html">Vilvona AI</a>...</p>
10
+ <script>window.location.href = 'index.html';</script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,1046 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Vilvona AI — Your Personal AI That Connects Everything</title>
7
+ <meta name="description" content="Self-hosted personal AI powered by Claude Fable 5. Supports Tamil, Hindi, Mobile PWA. Run with npx vilvona." />
8
+ <meta property="og:title" content="Vilvona AI" />
9
+ <meta property="og:description" content="Your personal AI that connects everything. Powered by Claude Fable 5." />
10
+ <meta property="og:image" content="logo.png" />
11
+ <link rel="icon" href="logo.png" />
12
+ <style>
13
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
14
+
15
+ :root {
16
+ --bg: #0a0a0a;
17
+ --bg2: #111118;
18
+ --bg3: #16161f;
19
+ --purple: #8b5cf6;
20
+ --purple-light: #a78bfa;
21
+ --purple-dim: rgba(139,92,246,0.15);
22
+ --white: #f1f1f1;
23
+ --muted: #888;
24
+ --border: rgba(139,92,246,0.2);
25
+ --card: #13131c;
26
+ --code-bg: #0d0d16;
27
+ --radius: 12px;
28
+ }
29
+
30
+ html { scroll-behavior: smooth; }
31
+
32
+ body {
33
+ background: var(--bg);
34
+ color: var(--white);
35
+ font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
36
+ line-height: 1.6;
37
+ overflow-x: hidden;
38
+ }
39
+
40
+ /* NAV */
41
+ nav {
42
+ position: fixed; top: 0; left: 0; right: 0; z-index: 100;
43
+ display: flex; align-items: center; justify-content: space-between;
44
+ padding: 16px 40px;
45
+ background: rgba(10,10,10,0.8);
46
+ backdrop-filter: blur(12px);
47
+ border-bottom: 1px solid var(--border);
48
+ }
49
+ .nav-logo { display: flex; align-items: center; gap: 10px; text-decoration: none; }
50
+ .nav-logo img { width: 32px; height: 32px; border-radius: 8px; }
51
+ .nav-logo span { font-weight: 700; font-size: 1.1rem; color: var(--white); }
52
+ .nav-links { display: flex; align-items: center; gap: 24px; }
53
+ .nav-links a {
54
+ color: var(--muted); text-decoration: none; font-size: 0.9rem;
55
+ transition: color 0.2s;
56
+ }
57
+ .nav-links a:hover { color: var(--purple-light); }
58
+ .nav-cta {
59
+ background: var(--purple); color: #fff !important;
60
+ padding: 8px 18px; border-radius: 8px; font-weight: 600;
61
+ transition: background 0.2s !important;
62
+ }
63
+ .nav-cta:hover { background: var(--purple-light) !important; color: #0a0a0a !important; }
64
+
65
+ /* HERO */
66
+ .hero {
67
+ min-height: 100vh;
68
+ display: flex; flex-direction: column; align-items: center; justify-content: center;
69
+ text-align: center;
70
+ padding: 120px 24px 80px;
71
+ position: relative;
72
+ overflow: hidden;
73
+ }
74
+ .hero::before {
75
+ content: '';
76
+ position: absolute; inset: 0;
77
+ background: radial-gradient(ellipse 80% 60% at 50% 0%, rgba(139,92,246,0.18) 0%, transparent 70%);
78
+ pointer-events: none;
79
+ }
80
+ .hero-glow {
81
+ position: absolute;
82
+ width: 600px; height: 600px;
83
+ border-radius: 50%;
84
+ background: radial-gradient(circle, rgba(139,92,246,0.12) 0%, transparent 70%);
85
+ top: 50%; left: 50%;
86
+ transform: translate(-50%, -50%);
87
+ animation: pulse 6s ease-in-out infinite;
88
+ pointer-events: none;
89
+ }
90
+ @keyframes pulse {
91
+ 0%, 100% { transform: translate(-50%,-50%) scale(1); opacity: 0.7; }
92
+ 50% { transform: translate(-50%,-50%) scale(1.15); opacity: 1; }
93
+ }
94
+ @keyframes gradientShift {
95
+ 0% { background-position: 0% 50%; }
96
+ 50% { background-position: 100% 50%; }
97
+ 100% { background-position: 0% 50%; }
98
+ }
99
+ .hero-logo {
100
+ width: 96px; height: 96px; border-radius: 20px;
101
+ margin-bottom: 28px;
102
+ box-shadow: 0 0 40px rgba(139,92,246,0.4);
103
+ position: relative; z-index: 1;
104
+ }
105
+ .hero h1 {
106
+ font-size: clamp(2.8rem, 7vw, 5rem);
107
+ font-weight: 800;
108
+ letter-spacing: -0.03em;
109
+ line-height: 1.1;
110
+ margin-bottom: 16px;
111
+ background: linear-gradient(135deg, #fff 0%, #c4b5fd 40%, #8b5cf6 100%);
112
+ background-size: 200% 200%;
113
+ animation: gradientShift 5s ease infinite;
114
+ -webkit-background-clip: text;
115
+ -webkit-text-fill-color: transparent;
116
+ background-clip: text;
117
+ position: relative; z-index: 1;
118
+ }
119
+ .hero-tagline {
120
+ font-size: clamp(1.1rem, 2.5vw, 1.4rem);
121
+ color: var(--muted);
122
+ max-width: 600px;
123
+ margin: 0 auto 32px;
124
+ position: relative; z-index: 1;
125
+ }
126
+ .hero-tagline strong { color: var(--purple-light); }
127
+
128
+ /* BADGES */
129
+ .badges {
130
+ display: flex; flex-wrap: wrap; gap: 8px;
131
+ justify-content: center;
132
+ margin-bottom: 40px;
133
+ position: relative; z-index: 1;
134
+ }
135
+ .badge {
136
+ display: inline-flex; align-items: center; gap: 6px;
137
+ background: var(--bg3);
138
+ border: 1px solid var(--border);
139
+ border-radius: 20px;
140
+ padding: 5px 14px;
141
+ font-size: 0.8rem;
142
+ color: var(--muted);
143
+ font-weight: 500;
144
+ transition: border-color 0.2s, color 0.2s;
145
+ }
146
+ .badge:hover { border-color: var(--purple); color: var(--white); }
147
+ .badge .dot { width: 6px; height: 6px; border-radius: 50%; }
148
+ .badge-green .dot { background: #22c55e; }
149
+ .badge-orange .dot { background: #f97316; }
150
+ .badge-blue .dot { background: #3b82f6; }
151
+ .badge-purple .dot { background: var(--purple); }
152
+
153
+ /* COMMAND BOX */
154
+ .command-box {
155
+ display: flex; align-items: center;
156
+ background: var(--code-bg);
157
+ border: 1px solid var(--border);
158
+ border-radius: var(--radius);
159
+ padding: 16px 20px;
160
+ gap: 12px;
161
+ font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;
162
+ font-size: 1.1rem;
163
+ max-width: 420px;
164
+ width: 100%;
165
+ margin: 0 auto 24px;
166
+ position: relative; z-index: 1;
167
+ transition: border-color 0.2s, box-shadow 0.2s;
168
+ }
169
+ .command-box:hover {
170
+ border-color: var(--purple);
171
+ box-shadow: 0 0 20px rgba(139,92,246,0.15);
172
+ }
173
+ .command-box .prompt { color: var(--purple); font-weight: 700; }
174
+ .command-box .cmd { color: #e2e8f0; flex: 1; }
175
+ .copy-btn {
176
+ background: var(--purple-dim);
177
+ border: 1px solid var(--border);
178
+ color: var(--purple-light);
179
+ border-radius: 6px;
180
+ padding: 4px 12px;
181
+ font-size: 0.75rem;
182
+ cursor: pointer;
183
+ font-family: inherit;
184
+ transition: background 0.2s, color 0.2s;
185
+ white-space: nowrap;
186
+ }
187
+ .copy-btn:hover { background: var(--purple); color: #fff; }
188
+ .copy-btn.copied { background: #166534; color: #4ade80; border-color: #166534; }
189
+
190
+ .hero-actions {
191
+ display: flex; gap: 12px; flex-wrap: wrap; justify-content: center;
192
+ position: relative; z-index: 1;
193
+ }
194
+ .btn-primary {
195
+ background: var(--purple);
196
+ color: #fff;
197
+ padding: 12px 28px;
198
+ border-radius: 10px;
199
+ text-decoration: none;
200
+ font-weight: 600;
201
+ font-size: 0.95rem;
202
+ transition: background 0.2s, transform 0.1s;
203
+ display: inline-flex; align-items: center; gap: 8px;
204
+ }
205
+ .btn-primary:hover { background: var(--purple-light); transform: translateY(-1px); }
206
+ .btn-secondary {
207
+ background: transparent;
208
+ color: var(--white);
209
+ padding: 12px 28px;
210
+ border-radius: 10px;
211
+ text-decoration: none;
212
+ font-weight: 600;
213
+ font-size: 0.95rem;
214
+ border: 1px solid var(--border);
215
+ transition: border-color 0.2s, background 0.2s;
216
+ }
217
+ .btn-secondary:hover { border-color: var(--purple); background: var(--purple-dim); }
218
+
219
+ /* SECTIONS */
220
+ section { padding: 80px 24px; max-width: 1100px; margin: 0 auto; }
221
+ .section-label {
222
+ font-size: 0.8rem; font-weight: 700; letter-spacing: 0.12em;
223
+ text-transform: uppercase; color: var(--purple);
224
+ margin-bottom: 12px;
225
+ }
226
+ h2 {
227
+ font-size: clamp(1.8rem, 4vw, 2.6rem);
228
+ font-weight: 800; letter-spacing: -0.02em;
229
+ margin-bottom: 16px;
230
+ }
231
+ .section-sub {
232
+ color: var(--muted); font-size: 1.05rem;
233
+ max-width: 560px; margin-bottom: 48px;
234
+ }
235
+
236
+ /* DIVIDER */
237
+ .divider {
238
+ height: 1px;
239
+ background: linear-gradient(90deg, transparent, var(--border), transparent);
240
+ max-width: 1100px; margin: 0 auto;
241
+ }
242
+
243
+ /* FEATURES GRID */
244
+ .features-grid {
245
+ display: grid;
246
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
247
+ gap: 20px;
248
+ }
249
+ .feature-card {
250
+ background: var(--card);
251
+ border: 1px solid var(--border);
252
+ border-radius: var(--radius);
253
+ padding: 28px;
254
+ transition: border-color 0.2s, transform 0.2s, box-shadow 0.2s;
255
+ }
256
+ .feature-card:hover {
257
+ border-color: var(--purple);
258
+ transform: translateY(-2px);
259
+ box-shadow: 0 8px 32px rgba(139,92,246,0.12);
260
+ }
261
+ .feature-icon {
262
+ font-size: 2rem; margin-bottom: 14px;
263
+ display: block;
264
+ }
265
+ .feature-card h3 { font-size: 1.05rem; font-weight: 700; margin-bottom: 8px; }
266
+ .feature-card p { color: var(--muted); font-size: 0.9rem; line-height: 1.6; }
267
+
268
+ /* QUICK START */
269
+ .quickstart-grid {
270
+ display: grid;
271
+ grid-template-columns: 1fr 1fr;
272
+ gap: 32px;
273
+ align-items: start;
274
+ }
275
+ @media (max-width: 768px) { .quickstart-grid { grid-template-columns: 1fr; } }
276
+ .step { display: flex; gap: 16px; margin-bottom: 24px; align-items: flex-start; }
277
+ .step-num {
278
+ width: 32px; height: 32px; min-width: 32px;
279
+ background: var(--purple-dim);
280
+ border: 1px solid var(--border);
281
+ border-radius: 50%;
282
+ display: flex; align-items: center; justify-content: center;
283
+ font-size: 0.8rem; font-weight: 700; color: var(--purple-light);
284
+ }
285
+ .step-content h4 { font-size: 0.95rem; font-weight: 600; margin-bottom: 6px; }
286
+ .step-content p { color: var(--muted); font-size: 0.875rem; }
287
+
288
+ /* CODE BLOCK */
289
+ .code-block {
290
+ background: var(--code-bg);
291
+ border: 1px solid var(--border);
292
+ border-radius: var(--radius);
293
+ overflow: hidden;
294
+ }
295
+ .code-header {
296
+ display: flex; justify-content: space-between; align-items: center;
297
+ padding: 10px 16px;
298
+ border-bottom: 1px solid var(--border);
299
+ background: rgba(255,255,255,0.02);
300
+ }
301
+ .code-header span { font-size: 0.78rem; color: var(--muted); font-family: monospace; }
302
+ .code-body {
303
+ padding: 20px;
304
+ font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;
305
+ font-size: 0.85rem;
306
+ line-height: 1.8;
307
+ overflow-x: auto;
308
+ }
309
+ .code-body .c { color: #6b7280; }
310
+ .code-body .k { color: #c084fc; }
311
+ .code-body .s { color: #86efac; }
312
+ .code-body .v { color: #60a5fa; }
313
+
314
+ /* LANGUAGES TABLE */
315
+ .lang-table {
316
+ width: 100%;
317
+ border-collapse: collapse;
318
+ background: var(--card);
319
+ border-radius: var(--radius);
320
+ overflow: hidden;
321
+ border: 1px solid var(--border);
322
+ }
323
+ .lang-table th {
324
+ background: rgba(139,92,246,0.1);
325
+ padding: 14px 20px;
326
+ text-align: left;
327
+ font-size: 0.8rem; font-weight: 700;
328
+ color: var(--purple-light);
329
+ letter-spacing: 0.06em; text-transform: uppercase;
330
+ border-bottom: 1px solid var(--border);
331
+ }
332
+ .lang-table td {
333
+ padding: 14px 20px;
334
+ border-bottom: 1px solid rgba(139,92,246,0.08);
335
+ font-size: 0.9rem;
336
+ color: var(--muted);
337
+ }
338
+ .lang-table tr:last-child td { border-bottom: none; }
339
+ .lang-table tr.highlight td { color: var(--white); background: rgba(139,92,246,0.06); }
340
+ .lang-table tr:hover td { background: rgba(139,92,246,0.04); }
341
+ .lang-native { color: var(--purple-light); font-weight: 600; }
342
+ .tag-featured {
343
+ background: var(--purple);
344
+ color: #fff;
345
+ font-size: 0.7rem; font-weight: 700;
346
+ padding: 2px 8px; border-radius: 10px;
347
+ margin-left: 8px;
348
+ }
349
+ .tag-new {
350
+ background: #166534;
351
+ color: #4ade80;
352
+ font-size: 0.7rem; font-weight: 700;
353
+ padding: 2px 8px; border-radius: 10px;
354
+ margin-left: 8px;
355
+ }
356
+
357
+ /* PRO TIER */
358
+ .pro-section { background: var(--bg2); }
359
+ .pro-wrapper {
360
+ max-width: 1100px; margin: 0 auto;
361
+ padding: 80px 24px;
362
+ display: grid; grid-template-columns: 1fr 1fr; gap: 48px; align-items: center;
363
+ }
364
+ @media (max-width: 768px) { .pro-wrapper { grid-template-columns: 1fr; } }
365
+ .pro-card {
366
+ background: linear-gradient(135deg, #1a0a2e, #13131c);
367
+ border: 1px solid rgba(139,92,246,0.4);
368
+ border-radius: 16px;
369
+ padding: 36px;
370
+ box-shadow: 0 0 60px rgba(139,92,246,0.1);
371
+ position: relative; overflow: hidden;
372
+ }
373
+ .pro-card::before {
374
+ content: '';
375
+ position: absolute; top: 0; left: 0; right: 0; height: 2px;
376
+ background: linear-gradient(90deg, var(--purple), var(--purple-light), var(--purple));
377
+ }
378
+ .pro-price {
379
+ font-size: 3rem; font-weight: 900;
380
+ color: var(--white); margin-bottom: 4px;
381
+ }
382
+ .pro-price span { font-size: 1.2rem; color: var(--muted); font-weight: 400; }
383
+ .pro-note { color: var(--muted); font-size: 0.85rem; margin-bottom: 28px; }
384
+ .pro-features { list-style: none; margin-bottom: 28px; }
385
+ .pro-features li {
386
+ padding: 8px 0;
387
+ border-bottom: 1px solid rgba(255,255,255,0.05);
388
+ font-size: 0.9rem;
389
+ display: flex; align-items: center; gap: 10px;
390
+ }
391
+ .pro-features li:last-child { border-bottom: none; }
392
+ .check { color: #4ade80; font-weight: 700; }
393
+ .dash { color: var(--muted); }
394
+ .btn-pro {
395
+ display: block; text-align: center;
396
+ background: linear-gradient(135deg, #7c3aed, #8b5cf6);
397
+ color: #fff; text-decoration: none;
398
+ padding: 14px 24px; border-radius: 10px;
399
+ font-weight: 700; font-size: 1rem;
400
+ transition: transform 0.2s, box-shadow 0.2s;
401
+ box-shadow: 0 4px 20px rgba(139,92,246,0.3);
402
+ }
403
+ .btn-pro:hover { transform: translateY(-2px); box-shadow: 0 8px 32px rgba(139,92,246,0.4); }
404
+ .pro-table {
405
+ width: 100%;
406
+ border-collapse: collapse;
407
+ }
408
+ .pro-table th {
409
+ padding: 10px 12px; text-align: left;
410
+ font-size: 0.78rem; color: var(--muted);
411
+ border-bottom: 1px solid var(--border);
412
+ font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em;
413
+ }
414
+ .pro-table td {
415
+ padding: 12px;
416
+ font-size: 0.88rem;
417
+ border-bottom: 1px solid rgba(255,255,255,0.04);
418
+ color: var(--muted);
419
+ }
420
+ .pro-table td:first-child { color: var(--white); }
421
+ .pro-table tr:last-child td { border-bottom: none; }
422
+
423
+ /* INSTALL */
424
+ .install-grid {
425
+ display: grid;
426
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
427
+ gap: 20px;
428
+ }
429
+ .install-card {
430
+ background: var(--card);
431
+ border: 1px solid var(--border);
432
+ border-radius: var(--radius);
433
+ overflow: hidden;
434
+ transition: border-color 0.2s;
435
+ }
436
+ .install-card:hover { border-color: var(--purple); }
437
+ .install-card-header {
438
+ padding: 20px 24px 16px;
439
+ border-bottom: 1px solid var(--border);
440
+ display: flex; align-items: center; gap: 10px;
441
+ }
442
+ .install-card-header .icon { font-size: 1.4rem; }
443
+ .install-card-header h3 { font-size: 0.95rem; font-weight: 700; }
444
+
445
+ /* FOOTER */
446
+ footer {
447
+ background: var(--bg2);
448
+ border-top: 1px solid var(--border);
449
+ padding: 48px 24px 32px;
450
+ text-align: center;
451
+ }
452
+ .footer-logo { display: flex; align-items: center; gap: 8px; justify-content: center; margin-bottom: 16px; }
453
+ .footer-logo img { width: 28px; border-radius: 6px; }
454
+ .footer-logo span { font-weight: 700; font-size: 1rem; }
455
+ .footer-links {
456
+ display: flex; gap: 24px; flex-wrap: wrap; justify-content: center;
457
+ margin-bottom: 24px;
458
+ }
459
+ .footer-links a {
460
+ color: var(--muted); text-decoration: none; font-size: 0.875rem;
461
+ transition: color 0.2s;
462
+ }
463
+ .footer-links a:hover { color: var(--purple-light); }
464
+ .footer-copy { color: var(--muted); font-size: 0.8rem; }
465
+ .footer-copy a { color: var(--purple-light); text-decoration: none; }
466
+
467
+ /* SCROLL ANIMATION */
468
+ .fade-up {
469
+ opacity: 0; transform: translateY(24px);
470
+ transition: opacity 0.6s ease, transform 0.6s ease;
471
+ }
472
+ .fade-up.visible { opacity: 1; transform: translateY(0); }
473
+
474
+ /* MOBILE NAV */
475
+ @media (max-width: 640px) {
476
+ nav { padding: 14px 20px; }
477
+ .nav-links { display: none; }
478
+ section { padding: 60px 20px; }
479
+ .features-grid { grid-template-columns: 1fr; }
480
+ }
481
+ </style>
482
+ </head>
483
+ <body>
484
+
485
+ <!-- NAV -->
486
+ <nav>
487
+ <a class="nav-logo" href="#">
488
+ <img src="logo.png" alt="Vilvona AI Logo" />
489
+ <span>Vilvona AI</span>
490
+ </a>
491
+ <div class="nav-links">
492
+ <a href="#features">Features</a>
493
+ <a href="#quickstart">Quickstart</a>
494
+ <a href="#languages">Languages</a>
495
+ <a href="#pro">Pro</a>
496
+ <a href="#install">Install</a>
497
+ <a href="https://github.com/vignesh2027/Vilvona-AI" target="_blank" class="nav-cta">GitHub</a>
498
+ </div>
499
+ </nav>
500
+
501
+ <!-- HERO -->
502
+ <section class="hero" id="home">
503
+ <div class="hero-glow"></div>
504
+ <img class="hero-logo" src="logo.png" alt="Vilvona AI" />
505
+ <h1>Vilvona AI</h1>
506
+ <p class="hero-tagline">
507
+ Your personal AI that connects everything.<br />
508
+ Powered by <strong>Claude Fable 5</strong>. Self-hosted. BYOK. Mobile PWA.
509
+ </p>
510
+
511
+ <div class="badges">
512
+ <span class="badge badge-green"><span class="dot"></span>MIT License</span>
513
+ <span class="badge badge-orange"><span class="dot"></span>npm: vilvona</span>
514
+ <span class="badge badge-blue"><span class="dot"></span>Node 22+</span>
515
+ <span class="badge badge-purple"><span class="dot"></span>Claude Fable 5</span>
516
+ </div>
517
+
518
+ <div class="command-box">
519
+ <span class="prompt">$</span>
520
+ <span class="cmd">npx vilvona</span>
521
+ <button class="copy-btn" onclick="copyCode(this, 'npx vilvona')">Copy</button>
522
+ </div>
523
+
524
+ <div class="hero-actions">
525
+ <a href="#quickstart" class="btn-primary">
526
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polygon points="5 3 19 12 5 21 5 3"/></svg>
527
+ Get Started
528
+ </a>
529
+ <a href="https://github.com/vignesh2027/Vilvona-AI" class="btn-secondary" target="_blank">
530
+ View on GitHub →
531
+ </a>
532
+ </div>
533
+ </section>
534
+
535
+ <div class="divider"></div>
536
+
537
+ <!-- FEATURES -->
538
+ <section id="features">
539
+ <div class="section-label">Features</div>
540
+ <h2>Everything you need, nothing you don't.</h2>
541
+ <p class="section-sub">Run your own AI assistant with Claude Fable 5 at its core. No cloud lock-in, no accounts, no tracking.</p>
542
+
543
+ <div class="features-grid fade-up">
544
+ <div class="feature-card">
545
+ <span class="feature-icon">🧠</span>
546
+ <h3>Claude Fable 5</h3>
547
+ <p>Default model with 1M context window, computer use, and best-in-class reasoning. Always the frontier.</p>
548
+ </div>
549
+ <div class="feature-card">
550
+ <span class="feature-icon">🇮🇳</span>
551
+ <h3>Tamil &amp; Hindi UI</h3>
552
+ <p>First AI assistant with native Tamil (தமிழ்) and Hindi (हिन्दी) interface. Built for India, works globally.</p>
553
+ </div>
554
+ <div class="feature-card">
555
+ <span class="feature-icon">📱</span>
556
+ <h3>Mobile PWA</h3>
557
+ <p>Install directly from your browser on iOS or Android — no app store needed. Works offline too.</p>
558
+ </div>
559
+ <div class="feature-card">
560
+ <span class="feature-icon">🔑</span>
561
+ <h3>BYOK — Bring Your Own Key</h3>
562
+ <p>Use your own Anthropic API key. Pay per token directly. Vilvona never sees your data or billing.</p>
563
+ </div>
564
+ <div class="feature-card">
565
+ <span class="feature-icon">🏠</span>
566
+ <h3>Fully Self-Hosted</h3>
567
+ <p>Runs entirely on your machine or server. No cloud, no accounts, no telemetry. You own everything.</p>
568
+ </div>
569
+ <div class="feature-card">
570
+ <span class="feature-icon">🔌</span>
571
+ <h3>100+ Integrations</h3>
572
+ <p>WhatsApp, Telegram, Slack, Discord, Gmail, Notion, GitHub and more — all connected through one interface.</p>
573
+ </div>
574
+ <div class="feature-card">
575
+ <span class="feature-icon">🌍</span>
576
+ <h3>21 Languages</h3>
577
+ <p>Tamil, Hindi, English, Chinese, Japanese, Korean, Arabic, French, German, Spanish and 11 more.</p>
578
+ </div>
579
+ <div class="feature-card">
580
+ <span class="feature-icon">⚡</span>
581
+ <h3>npx Ready</h3>
582
+ <p>One command to start. No global install required. Always runs the latest version automatically.</p>
583
+ </div>
584
+ <div class="feature-card">
585
+ <span class="feature-icon">🐋</span>
586
+ <h3>Docker Support</h3>
587
+ <p>Containerized deployment with a single <code style="color:var(--purple-light);font-size:0.85em">docker run</code> command. Ready for VPS, cloud, and CI environments.</p>
588
+ </div>
589
+ </div>
590
+ </section>
591
+
592
+ <div class="divider"></div>
593
+
594
+ <!-- QUICK START -->
595
+ <section id="quickstart">
596
+ <div class="section-label">Quick Start</div>
597
+ <h2>Up and running in 60 seconds.</h2>
598
+ <p class="section-sub">No configuration needed to get started. Just your Anthropic API key.</p>
599
+
600
+ <div class="quickstart-grid">
601
+ <div class="fade-up">
602
+ <div class="step">
603
+ <div class="step-num">1</div>
604
+ <div class="step-content">
605
+ <h4>Run with npx</h4>
606
+ <p>No install required. Pulls the latest version automatically.</p>
607
+ </div>
608
+ </div>
609
+ <div class="step">
610
+ <div class="step-num">2</div>
611
+ <div class="step-content">
612
+ <h4>Set your API key</h4>
613
+ <p>Get a free key at <a href="https://console.anthropic.com" style="color:var(--purple-light)">console.anthropic.com</a> — pay per token.</p>
614
+ </div>
615
+ </div>
616
+ <div class="step">
617
+ <div class="step-num">3</div>
618
+ <div class="step-content">
619
+ <h4>Open the interface</h4>
620
+ <p>Visit <strong style="color:var(--white)">http://localhost:4000</strong> in your browser. Done.</p>
621
+ </div>
622
+ </div>
623
+ <div class="step">
624
+ <div class="step-num">4</div>
625
+ <div class="step-content">
626
+ <h4>Install on mobile (optional)</h4>
627
+ <p>Open <strong style="color:var(--white)">http://your-ip:4000</strong> on your phone → "Add to Home Screen".</p>
628
+ </div>
629
+ </div>
630
+ </div>
631
+
632
+ <div class="fade-up">
633
+ <div class="code-block">
634
+ <div class="code-header">
635
+ <span>bash</span>
636
+ <button class="copy-btn" onclick="copyCode(this, `# Run instantly — no install needed\nnpx vilvona\n\n# Or install globally\nnpm install -g vilvona\nvilvona`)">Copy</button>
637
+ </div>
638
+ <div class="code-body">
639
+ <span class="c"># Run instantly — no install needed</span><br/>
640
+ <span class="k">npx</span> <span class="s">vilvona</span><br/><br/>
641
+ <span class="c"># Or install globally</span><br/>
642
+ <span class="k">npm install</span> <span class="v">-g</span> <span class="s">vilvona</span><br/>
643
+ <span class="k">vilvona</span>
644
+ </div>
645
+ </div>
646
+
647
+ <div class="code-block" style="margin-top:16px">
648
+ <div class="code-header">
649
+ <span>bash — set API key</span>
650
+ <button class="copy-btn" onclick="copyCode(this, 'export ANTHROPIC_API_KEY=sk-ant-...\nnpx vilvona')">Copy</button>
651
+ </div>
652
+ <div class="code-body">
653
+ <span class="k">export</span> <span class="v">ANTHROPIC_API_KEY</span>=<span class="s">sk-ant-...</span><br/>
654
+ <span class="k">npx</span> <span class="s">vilvona</span>
655
+ </div>
656
+ </div>
657
+
658
+ <div class="code-block" style="margin-top:16px">
659
+ <div class="code-header">
660
+ <span>json — ~/.openclaw/config.json</span>
661
+ <button class="copy-btn" onclick="copyCode(this, `{\n \"defaults\": {\n \"model\": \"anthropic/claude-fable-5\"\n },\n \"ui\": {\n \"language\": \"ta\"\n }\n}`)">Copy</button>
662
+ </div>
663
+ <div class="code-body">
664
+ {<br/>
665
+ &nbsp;&nbsp;<span class="v">"defaults"</span>: {<br/>
666
+ &nbsp;&nbsp;&nbsp;&nbsp;<span class="v">"model"</span>: <span class="s">"anthropic/claude-fable-5"</span><br/>
667
+ &nbsp;&nbsp;},<br/>
668
+ &nbsp;&nbsp;<span class="v">"ui"</span>: {<br/>
669
+ &nbsp;&nbsp;&nbsp;&nbsp;<span class="v">"language"</span>: <span class="s">"ta"</span>&nbsp;&nbsp;<span class="c">// Tamil</span><br/>
670
+ &nbsp;&nbsp;}<br/>
671
+ }
672
+ </div>
673
+ </div>
674
+ </div>
675
+ </div>
676
+ </section>
677
+
678
+ <div class="divider"></div>
679
+
680
+ <!-- LANGUAGES -->
681
+ <section id="languages">
682
+ <div class="section-label">Languages</div>
683
+ <h2>Built for the world. Built for India.</h2>
684
+ <p class="section-sub">Native Tamil and Hindi UI — the first AI assistant to truly speak India's languages.</p>
685
+
686
+ <div class="fade-up">
687
+ <table class="lang-table">
688
+ <thead>
689
+ <tr>
690
+ <th>Language</th>
691
+ <th>Native Script</th>
692
+ <th>Code</th>
693
+ <th>Status</th>
694
+ </tr>
695
+ </thead>
696
+ <tbody>
697
+ <tr class="highlight">
698
+ <td><strong>Tamil</strong><span class="tag-featured">Featured</span></td>
699
+ <td class="lang-native">தமிழ்</td>
700
+ <td><code style="color:var(--muted);font-size:0.82em">ta</code></td>
701
+ <td><span style="color:#4ade80">✓ Full UI</span></td>
702
+ </tr>
703
+ <tr class="highlight">
704
+ <td><strong>Hindi</strong><span class="tag-featured">Featured</span></td>
705
+ <td class="lang-native">हिन्दी</td>
706
+ <td><code style="color:var(--muted);font-size:0.82em">hi</code></td>
707
+ <td><span style="color:#4ade80">✓ Full UI</span></td>
708
+ </tr>
709
+ <tr>
710
+ <td>English</td>
711
+ <td>English</td>
712
+ <td><code style="color:var(--muted);font-size:0.82em">en</code></td>
713
+ <td><span style="color:#4ade80">✓ Default</span></td>
714
+ </tr>
715
+ <tr>
716
+ <td>Chinese (Simplified)</td>
717
+ <td>中文</td>
718
+ <td><code style="color:var(--muted);font-size:0.82em">zh</code></td>
719
+ <td><span style="color:#4ade80">✓ Supported</span></td>
720
+ </tr>
721
+ <tr>
722
+ <td>Japanese</td>
723
+ <td>日本語</td>
724
+ <td><code style="color:var(--muted);font-size:0.82em">ja</code></td>
725
+ <td><span style="color:#4ade80">✓ Supported</span></td>
726
+ </tr>
727
+ <tr>
728
+ <td>Korean</td>
729
+ <td>한국어</td>
730
+ <td><code style="color:var(--muted);font-size:0.82em">ko</code></td>
731
+ <td><span style="color:#4ade80">✓ Supported</span></td>
732
+ </tr>
733
+ <tr>
734
+ <td>Arabic</td>
735
+ <td>العربية</td>
736
+ <td><code style="color:var(--muted);font-size:0.82em">ar</code></td>
737
+ <td><span style="color:#4ade80">✓ Supported</span></td>
738
+ </tr>
739
+ <tr>
740
+ <td>French</td>
741
+ <td>Français</td>
742
+ <td><code style="color:var(--muted);font-size:0.82em">fr</code></td>
743
+ <td><span style="color:#4ade80">✓ Supported</span></td>
744
+ </tr>
745
+ <tr>
746
+ <td>German</td>
747
+ <td>Deutsch</td>
748
+ <td><code style="color:var(--muted);font-size:0.82em">de</code></td>
749
+ <td><span style="color:#4ade80">✓ Supported</span></td>
750
+ </tr>
751
+ <tr>
752
+ <td>Spanish</td>
753
+ <td>Español</td>
754
+ <td><code style="color:var(--muted);font-size:0.82em">es</code></td>
755
+ <td><span style="color:#4ade80">✓ Supported</span></td>
756
+ </tr>
757
+ <tr>
758
+ <td colspan="3" style="color:var(--muted);font-style:italic">+ 11 more languages</td>
759
+ <td><span style="color:var(--muted)">21 total</span></td>
760
+ </tr>
761
+ </tbody>
762
+ </table>
763
+ </div>
764
+ </section>
765
+
766
+ <div class="divider"></div>
767
+
768
+ <!-- PRO TIER -->
769
+ <div class="pro-section" id="pro">
770
+ <div class="pro-wrapper">
771
+ <div class="fade-up">
772
+ <div class="section-label">Pro Tier</div>
773
+ <h2>Unlock the full power of Vilvona AI.</h2>
774
+ <p style="color:var(--muted);margin-bottom:28px">One-time purchase. No subscriptions, no monthly fees. Lifetime access to Pro features.</p>
775
+
776
+ <table class="pro-table">
777
+ <thead>
778
+ <tr>
779
+ <th>Feature</th>
780
+ <th>Free</th>
781
+ <th>Pro</th>
782
+ </tr>
783
+ </thead>
784
+ <tbody>
785
+ <tr>
786
+ <td>Claude Fable 5</td>
787
+ <td><span class="check">✓</span></td>
788
+ <td><span class="check">✓</span></td>
789
+ </tr>
790
+ <tr>
791
+ <td>All integrations</td>
792
+ <td><span class="check">✓</span></td>
793
+ <td><span class="check">✓</span></td>
794
+ </tr>
795
+ <tr>
796
+ <td>Tamil &amp; Hindi UI</td>
797
+ <td><span class="check">✓</span></td>
798
+ <td><span class="check">✓</span></td>
799
+ </tr>
800
+ <tr>
801
+ <td>Mobile PWA</td>
802
+ <td><span class="check">✓</span></td>
803
+ <td><span class="check">✓</span></td>
804
+ </tr>
805
+ <tr>
806
+ <td>Enterprise audit logs</td>
807
+ <td><span class="dash">—</span></td>
808
+ <td><span class="check">✓</span></td>
809
+ </tr>
810
+ <tr>
811
+ <td>Team config sync</td>
812
+ <td><span class="dash">—</span></td>
813
+ <td><span class="check">✓</span></td>
814
+ </tr>
815
+ <tr>
816
+ <td>Priority Fable 5 routing</td>
817
+ <td><span class="dash">—</span></td>
818
+ <td><span class="check">✓</span></td>
819
+ </tr>
820
+ <tr>
821
+ <td>Custom AI personas (unlimited)</td>
822
+ <td><span class="dash">—</span></td>
823
+ <td><span class="check">✓</span></td>
824
+ </tr>
825
+ <tr>
826
+ <td>Webhook &amp; Zapier integrations</td>
827
+ <td><span class="dash">—</span></td>
828
+ <td><span class="check">✓</span></td>
829
+ </tr>
830
+ <tr>
831
+ <td>White-label branding</td>
832
+ <td><span class="dash">—</span></td>
833
+ <td><span class="check">✓</span></td>
834
+ </tr>
835
+ </tbody>
836
+ </table>
837
+ </div>
838
+
839
+ <div class="fade-up">
840
+ <div class="pro-card">
841
+ <div style="font-size:0.8rem;font-weight:700;color:var(--purple-light);letter-spacing:0.1em;text-transform:uppercase;margin-bottom:12px">Vilvona AI Pro</div>
842
+ <div class="pro-price">₹4,100 <span>one-time</span></div>
843
+ <div class="pro-note">~$49 USD · No subscription · Lifetime access</div>
844
+
845
+ <ul class="pro-features">
846
+ <li><span class="check">✓</span> Enterprise audit logs &amp; analytics</li>
847
+ <li><span class="check">✓</span> Team config sync across devices</li>
848
+ <li><span class="check">✓</span> Priority Claude Fable 5 routing</li>
849
+ <li><span class="check">✓</span> Unlimited custom AI personas</li>
850
+ <li><span class="check">✓</span> Webhook &amp; Zapier integrations</li>
851
+ <li><span class="check">✓</span> White-label branding</li>
852
+ <li><span class="check">✓</span> Lifetime updates included</li>
853
+ </ul>
854
+
855
+ <a href="https://vignesh2027.mojo.page/vilvona-ai-pro" class="btn-pro" target="_blank">
856
+ Get Pro — ₹4,100 →
857
+ </a>
858
+
859
+ <div style="margin-top:20px">
860
+ <div class="code-block">
861
+ <div class="code-header">
862
+ <span>bash — activate pro key</span>
863
+ <button class="copy-btn" onclick="copyCode(this, 'export VILVONA_PRO_KEY=VLVN-XXXX-XXXX-XXXX-XXXX\nvilvona')">Copy</button>
864
+ </div>
865
+ <div class="code-body" style="font-size:0.8rem">
866
+ <span class="k">export</span> <span class="v">VILVONA_PRO_KEY</span>=<span class="s">VLVN-XXXX-XXXX-XXXX-XXXX</span><br/>
867
+ <span class="k">vilvona</span>
868
+ </div>
869
+ </div>
870
+ </div>
871
+ </div>
872
+ </div>
873
+ </div>
874
+ </div>
875
+
876
+ <!-- INSTALL -->
877
+ <section id="install">
878
+ <div class="section-label">Install</div>
879
+ <h2>Works with npm, yarn, pnpm, and Docker.</h2>
880
+ <p class="section-sub">One command on any OS — Mac, Windows, Linux. Node.js 22+ required.</p>
881
+
882
+ <div class="install-grid fade-up">
883
+ <div class="install-card">
884
+ <div class="install-card-header">
885
+ <span class="icon">⚡</span>
886
+ <h3>npx — recommended</h3>
887
+ </div>
888
+ <div class="code-block" style="border:none;border-radius:0">
889
+ <div class="code-header">
890
+ <span>No install needed</span>
891
+ <button class="copy-btn" onclick="copyCode(this, 'npx vilvona')">Copy</button>
892
+ </div>
893
+ <div class="code-body">
894
+ <span class="k">npx</span> <span class="s">vilvona</span>
895
+ </div>
896
+ </div>
897
+ </div>
898
+
899
+ <div class="install-card">
900
+ <div class="install-card-header">
901
+ <span class="icon">🧶</span>
902
+ <h3>yarn</h3>
903
+ </div>
904
+ <div class="code-block" style="border:none;border-radius:0">
905
+ <div class="code-header">
906
+ <span>yarn dlx (no install)</span>
907
+ <button class="copy-btn" onclick="copyCode(this, 'yarn dlx vilvona')">Copy</button>
908
+ </div>
909
+ <div class="code-body">
910
+ <span class="k">yarn dlx</span> <span class="s">vilvona</span>
911
+ </div>
912
+ </div>
913
+ </div>
914
+
915
+ <div class="install-card">
916
+ <div class="install-card-header">
917
+ <span class="icon">📦</span>
918
+ <h3>pnpm</h3>
919
+ </div>
920
+ <div class="code-block" style="border:none;border-radius:0">
921
+ <div class="code-header">
922
+ <span>pnpm dlx (no install)</span>
923
+ <button class="copy-btn" onclick="copyCode(this, 'pnpm dlx vilvona')">Copy</button>
924
+ </div>
925
+ <div class="code-body">
926
+ <span class="k">pnpm dlx</span> <span class="s">vilvona</span>
927
+ </div>
928
+ </div>
929
+ </div>
930
+
931
+ <div class="install-card">
932
+ <div class="install-card-header">
933
+ <span class="icon">🐋</span>
934
+ <h3>Docker</h3>
935
+ </div>
936
+ <div class="code-block" style="border:none;border-radius:0">
937
+ <div class="code-header">
938
+ <span>Container deployment</span>
939
+ <button class="copy-btn" onclick="copyCode(this, 'docker run -e ANTHROPIC_API_KEY=sk-ant-... -p 4000:4000 ghcr.io/vignesh2027/vilvona-ai')">Copy</button>
940
+ </div>
941
+ <div class="code-body" style="font-size:0.78rem">
942
+ <span class="k">docker run</span> \<br/>
943
+ &nbsp;&nbsp;<span class="v">-e</span> <span class="s">ANTHROPIC_API_KEY</span>=sk-ant-... \<br/>
944
+ &nbsp;&nbsp;<span class="v">-p</span> 4000:4000 \<br/>
945
+ &nbsp;&nbsp;ghcr.io/vignesh2027/vilvona-ai
946
+ </div>
947
+ </div>
948
+ </div>
949
+
950
+ <div class="install-card">
951
+ <div class="install-card-header">
952
+ <span class="icon">🪟</span>
953
+ <h3>Windows (PowerShell)</h3>
954
+ </div>
955
+ <div class="code-block" style="border:none;border-radius:0">
956
+ <div class="code-header">
957
+ <span>Windows native</span>
958
+ <button class="copy-btn" onclick="copyCode(this, '$env:ANTHROPIC_API_KEY=\"sk-ant-...\"\nnpx vilvona')">Copy</button>
959
+ </div>
960
+ <div class="code-body" style="font-size:0.82rem">
961
+ <span class="v">$env:ANTHROPIC_API_KEY</span>=<span class="s">"sk-ant-..."</span><br/>
962
+ <span class="k">npx</span> <span class="s">vilvona</span>
963
+ </div>
964
+ </div>
965
+ </div>
966
+
967
+ <div class="install-card">
968
+ <div class="install-card-header">
969
+ <span class="icon">🍺</span>
970
+ <h3>From Source</h3>
971
+ </div>
972
+ <div class="code-block" style="border:none;border-radius:0">
973
+ <div class="code-header">
974
+ <span>Clone &amp; run</span>
975
+ <button class="copy-btn" onclick="copyCode(this, 'git clone https://github.com/vignesh2027/Vilvona-AI\ncd Vilvona-AI\nnpm install\nnpx vilvona')">Copy</button>
976
+ </div>
977
+ <div class="code-body" style="font-size:0.82rem">
978
+ <span class="k">git clone</span> <span class="s">github.com/vignesh2027/Vilvona-AI</span><br/>
979
+ <span class="k">cd</span> Vilvona-AI<br/>
980
+ <span class="k">npx vilvona</span>
981
+ </div>
982
+ </div>
983
+ </div>
984
+ </div>
985
+ </section>
986
+
987
+ <!-- FOOTER -->
988
+ <footer>
989
+ <div class="footer-logo">
990
+ <img src="logo.png" alt="Vilvona AI" />
991
+ <span>Vilvona AI</span>
992
+ </div>
993
+ <div class="footer-links">
994
+ <a href="https://github.com/vignesh2027/Vilvona-AI" target="_blank">GitHub</a>
995
+ <a href="https://npmjs.com/package/vilvona" target="_blank">npm</a>
996
+ <a href="https://vignesh2027.mojo.page/vilvona-ai-pro" target="_blank">Pro</a>
997
+ <a href="https://github.com/vignesh2027/Vilvona-AI/blob/main/LICENSE" target="_blank">MIT License</a>
998
+ <a href="https://github.com/vignesh2027/Vilvona-AI/blob/main/SECURITY.md" target="_blank">Security</a>
999
+ <a href="https://github.com/vignesh2027/Vilvona-AI/blob/main/CHANGELOG.md" target="_blank">Changelog</a>
1000
+ </div>
1001
+ <p class="footer-copy">
1002
+ Built by <a href="https://github.com/vignesh2027">Vignesh S</a> · MIT Licensed ·
1003
+ Based on <a href="https://github.com/openclaw/openclaw">OpenClaw</a>
1004
+ </p>
1005
+ </footer>
1006
+
1007
+ <script>
1008
+ // Copy to clipboard
1009
+ function copyCode(btn, text) {
1010
+ navigator.clipboard.writeText(text).then(() => {
1011
+ btn.textContent = 'Copied!';
1012
+ btn.classList.add('copied');
1013
+ setTimeout(() => {
1014
+ btn.textContent = 'Copy';
1015
+ btn.classList.remove('copied');
1016
+ }, 2000);
1017
+ }).catch(() => {
1018
+ // Fallback
1019
+ const ta = document.createElement('textarea');
1020
+ ta.value = text;
1021
+ document.body.appendChild(ta);
1022
+ ta.select();
1023
+ document.execCommand('copy');
1024
+ document.body.removeChild(ta);
1025
+ btn.textContent = 'Copied!';
1026
+ btn.classList.add('copied');
1027
+ setTimeout(() => {
1028
+ btn.textContent = 'Copy';
1029
+ btn.classList.remove('copied');
1030
+ }, 2000);
1031
+ });
1032
+ }
1033
+
1034
+ // Scroll fade-in
1035
+ const observer = new IntersectionObserver((entries) => {
1036
+ entries.forEach(e => {
1037
+ if (e.isIntersecting) {
1038
+ e.target.classList.add('visible');
1039
+ }
1040
+ });
1041
+ }, { threshold: 0.1 });
1042
+
1043
+ document.querySelectorAll('.fade-up').forEach(el => observer.observe(el));
1044
+ </script>
1045
+ </body>
1046
+ </html>
package/openclaw.mjs CHANGED
@@ -71,15 +71,15 @@ if (!existsSync(ENTRY)) {
71
71
  // ── Vilvona AI banner ─────────────────────────────────────────────────────────
72
72
  process.stdout.write(
73
73
  "\n\x1b[35m" +
74
- "██╗ ██╗██╗██╗ ██╗ ██╗ ██████╗ ███╗ ██╗ █████╗ █████╗ ██╗\n" +
75
- "██║ ██║██║██║ ██║ ██║██╔═══██╗████╗ ██║██╔══██╗ ██╔══██╗██║\n" +
76
- "██║ ██║██║██║ ██║ ██║██║ ██║██╔██╗ ██║███████║ ███████║██║\n" +
77
- "╚██╗ ██╔╝██║██║ ╚██╗ ██╔╝██║ ██║██║╚██╗██║██╔══██║ ██╔══██║██║\n" +
78
- " ╚████╔╝ ██║███████╗ ╚████╔╝ ╚██████╔╝██║ ╚████║██║ ██║ ██║ ██║██║\n" +
79
- " ╚═══╝ ╚═╝╚══════╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝\n" +
80
- "\x1b[0m" +
81
- "\x1b[36m Powered by Claude Fable 5 • Tamil & Hindi • Mobile PWA\x1b[0m\n" +
82
- "\x1b[90m github.com/vignesh2027/Vilvona-AI • by Vignesh S\x1b[0m\n\n"
74
+ "██╗ ██╗██╗██╗ ██╗ ██╗ ██████╗ ███╗ ██╗ █████╗ █████╗ ██╗\n" +
75
+ "██║ ██║██║██║ ██║ ██║██╔═══██╗████╗ ██║██╔══██╗ ██╔══██╗██║\n" +
76
+ "██║ ██║██║██║ ██║ ██║██║ ██║██╔██╗ ██║███████║ ███████║██║\n" +
77
+ "╚██╗ ██╔╝██║██║ ╚██╗ ██╔╝██║ ██║██║╚██╗██║██╔══██║ ██╔══██║██║\n" +
78
+ " ╚████╔╝ ██║███████╗ ╚████╔╝ ╚██████╔╝██║ ╚████║██║ ██║ ██║ ██║██║\n" +
79
+ " ╚═══╝ ╚═╝╚══════╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝\n" +
80
+ "\x1b[0m" +
81
+ "\x1b[36m Powered by Claude Fable 5 • Tamil & Hindi • Mobile PWA\x1b[0m\n" +
82
+ "\x1b[90m github.com/vignesh2027/Vilvona-AI • by Vignesh S\x1b[0m\n\n",
83
83
  );
84
84
 
85
85
  // ── Set Vilvona defaults ──────────────────────────────────────────────────────
@@ -99,17 +99,28 @@ const child = spawn(process.execPath, [ENTRY, ...process.argv.slice(2)], {
99
99
  });
100
100
 
101
101
  // Forward signals to child — Windows needs SIGTERM/SIGINT/SIGBREAK
102
- const signals = process.platform === "win32"
103
- ? ["SIGTERM", "SIGINT", "SIGBREAK"]
104
- : ["SIGTERM", "SIGINT", "SIGHUP", "SIGQUIT"];
102
+ const signals =
103
+ process.platform === "win32"
104
+ ? ["SIGTERM", "SIGINT", "SIGBREAK"]
105
+ : ["SIGTERM", "SIGINT", "SIGHUP", "SIGQUIT"];
105
106
 
106
107
  for (const sig of signals) {
107
- try { process.on(sig, () => { try { child.kill(sig); } catch {} }); } catch {}
108
+ try {
109
+ process.on(sig, () => {
110
+ try {
111
+ child.kill(sig);
112
+ } catch {}
113
+ });
114
+ } catch {}
108
115
  }
109
116
 
110
117
  child.on("exit", (code, signal) => {
111
118
  if (signal) {
112
- try { process.kill(process.pid, signal); } catch { process.exit(1); }
119
+ try {
120
+ process.kill(process.pid, signal);
121
+ } catch {
122
+ process.exit(1);
123
+ }
113
124
  } else {
114
125
  process.exit(code ?? 0);
115
126
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vilvona",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Vilvona AI — Your personal AI that connects everything. Claude Fable 5 powered, works on mobile, Tamil & Hindi support.",
5
5
  "keywords": ["ai", "assistant", "claude", "fable5", "personal-ai", "whatsapp", "telegram", "slack", "tamil", "hindi", "self-hosted", "open-source", "chatbot", "automation"],
6
6
  "homepage": "https://github.com/vignesh2027/Vilvona-AI#readme",
@@ -4,7 +4,7 @@ packages:
4
4
  - packages/*
5
5
  - extensions/*
6
6
 
7
- minimumReleaseAge: 2880
7
+ minimumReleaseAge: 0
8
8
 
9
9
  minimumReleaseAgeExclude:
10
10
  - "@openclaw/fs-safe@0.3.0"