aillom-vox-client 1.0.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.
Files changed (45) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +272 -0
  3. package/dist/AillomVox.d.ts +36 -0
  4. package/dist/AillomVox.js +152 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.js +18 -0
  7. package/dist/types.d.ts +36 -0
  8. package/dist/types.js +2 -0
  9. package/docs/ASTERISK.md +411 -0
  10. package/docs/PROTOCOL.md +156 -0
  11. package/docs/PROVIDERS.md +40 -0
  12. package/docs/TOOLS.md +314 -0
  13. package/docs/TROUBLESHOOTING.md +86 -0
  14. package/docs/VOICES.md +219 -0
  15. package/docs/providers/AILLOMVOX.md +185 -0
  16. package/docs/providers/AWS.md +32 -0
  17. package/docs/providers/GEMINI.md +33 -0
  18. package/docs/providers/GROK.md +25 -0
  19. package/docs/providers/OPENAI.md +39 -0
  20. package/docs/providers/QWEN.md +27 -0
  21. package/docs/providers/ULTRAVOX.md +29 -0
  22. package/examples/01-basic/app.js +196 -0
  23. package/examples/01-basic/index.html +27 -0
  24. package/examples/02-advanced-dashboard/app.js +465 -0
  25. package/examples/02-advanced-dashboard/index.html +200 -0
  26. package/examples/02-advanced-dashboard/style.css +501 -0
  27. package/examples/03-smart-home/index.html +377 -0
  28. package/examples/04-customer-support/index.html +474 -0
  29. package/examples/sdk-usage.ts +44 -0
  30. package/integrations/n8n-nodes-aillomvox/README.md +56 -0
  31. package/integrations/n8n-nodes-aillomvox/credentials/AillomVoxApi.credentials.ts +29 -0
  32. package/integrations/n8n-nodes-aillomvox/dist/credentials/AillomVoxApi.credentials.js +30 -0
  33. package/integrations/n8n-nodes-aillomvox/dist/nodes/AillomVox/AillomVox.node.js +219 -0
  34. package/integrations/n8n-nodes-aillomvox/dist/nodes/AillomVox/aillomvox.svg +6 -0
  35. package/integrations/n8n-nodes-aillomvox/gulpfile.js +10 -0
  36. package/integrations/n8n-nodes-aillomvox/nodes/AillomVox/AillomVox.node.ts +229 -0
  37. package/integrations/n8n-nodes-aillomvox/nodes/AillomVox/aillomvox.svg +6 -0
  38. package/integrations/n8n-nodes-aillomvox/package-lock.json +11741 -0
  39. package/integrations/n8n-nodes-aillomvox/package.json +56 -0
  40. package/integrations/n8n-nodes-aillomvox/tsconfig.json +32 -0
  41. package/package.json +55 -0
  42. package/src/AillomVox.ts +169 -0
  43. package/src/index.ts +2 -0
  44. package/src/types.ts +50 -0
  45. package/tsconfig.json +23 -0
@@ -0,0 +1,501 @@
1
+ :root {
2
+ --bg-dark: #0a0c10;
3
+ --bg-panel: #12161d;
4
+ --bg-hover: #1a1f27;
5
+ --text-main: #e6edf3;
6
+ --text-muted: #7d8590;
7
+ --text-subtle: #484f58;
8
+ --primary: #58a6ff;
9
+ --primary-glow: rgba(88, 166, 255, 0.15);
10
+ --primary-hover: #1f6feb;
11
+ --danger: #f85149;
12
+ --success: #3fb950;
13
+ --warning: #d29922;
14
+ --border: #21262d;
15
+ --border-light: #30363d;
16
+ --gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
17
+ --gradient-success: linear-gradient(135deg, #11998e 0%, #38ef7d 100%);
18
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
19
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.3);
20
+ --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.4);
21
+ --radius-sm: 6px;
22
+ --radius-md: 10px;
23
+ --radius-lg: 16px;
24
+ }
25
+
26
+ * {
27
+ box-sizing: border-box;
28
+ }
29
+
30
+ body {
31
+ margin: 0;
32
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
33
+ background-color: var(--bg-dark);
34
+ color: var(--text-main);
35
+ height: 100vh;
36
+ overflow: hidden;
37
+ }
38
+
39
+ .app-container {
40
+ display: flex;
41
+ height: 100%;
42
+ }
43
+
44
+ /* ===== SIDEBAR ===== */
45
+ .config-panel {
46
+ width: 340px;
47
+ min-width: 340px;
48
+ background: linear-gradient(180deg, var(--bg-panel) 0%, var(--bg-dark) 100%);
49
+ border-right: 1px solid var(--border);
50
+ padding: 24px 20px;
51
+ overflow-y: auto;
52
+ display: flex;
53
+ flex-direction: column;
54
+ gap: 20px;
55
+ }
56
+
57
+ .logo-area {
58
+ display: flex;
59
+ align-items: center;
60
+ gap: 14px;
61
+ padding-bottom: 20px;
62
+ border-bottom: 1px solid var(--border);
63
+ }
64
+
65
+ .logo-icon {
66
+ width: 44px;
67
+ height: 44px;
68
+ background: var(--gradient-primary);
69
+ border-radius: var(--radius-md);
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ font-size: 20px;
74
+ color: white;
75
+ box-shadow: var(--shadow-md);
76
+ }
77
+
78
+ .logo-text h2 {
79
+ margin: 0;
80
+ font-size: 20px;
81
+ font-weight: 700;
82
+ background: var(--gradient-primary);
83
+ -webkit-background-clip: text;
84
+ -webkit-text-fill-color: transparent;
85
+ background-clip: text;
86
+ }
87
+
88
+ .logo-text .version {
89
+ font-size: 11px;
90
+ color: var(--text-muted);
91
+ text-transform: uppercase;
92
+ letter-spacing: 0.5px;
93
+ }
94
+
95
+ .config-section {
96
+ display: flex;
97
+ flex-direction: column;
98
+ gap: 12px;
99
+ }
100
+
101
+ .section-title {
102
+ margin: 0;
103
+ font-size: 11px;
104
+ font-weight: 600;
105
+ color: var(--text-muted);
106
+ text-transform: uppercase;
107
+ letter-spacing: 0.8px;
108
+ }
109
+
110
+ .config-group {
111
+ display: flex;
112
+ flex-direction: column;
113
+ gap: 6px;
114
+ }
115
+
116
+ .config-group label {
117
+ font-size: 12px;
118
+ color: var(--text-muted);
119
+ font-weight: 500;
120
+ display: flex;
121
+ align-items: center;
122
+ gap: 6px;
123
+ }
124
+
125
+ .config-group label i {
126
+ width: 14px;
127
+ text-align: center;
128
+ color: var(--text-subtle);
129
+ }
130
+
131
+ .config-grid {
132
+ display: grid;
133
+ grid-template-columns: 1fr 1fr;
134
+ gap: 12px;
135
+ }
136
+
137
+ input, select, textarea {
138
+ background-color: var(--bg-dark);
139
+ border: 1px solid var(--border);
140
+ color: var(--text-main);
141
+ padding: 10px 14px;
142
+ border-radius: var(--radius-sm);
143
+ font-family: inherit;
144
+ font-size: 13px;
145
+ transition: all 0.2s ease;
146
+ }
147
+
148
+ input:hover, select:hover, textarea:hover {
149
+ border-color: var(--border-light);
150
+ }
151
+
152
+ input:focus, select:focus, textarea:focus {
153
+ outline: none;
154
+ border-color: var(--primary);
155
+ box-shadow: 0 0 0 3px var(--primary-glow);
156
+ }
157
+
158
+ textarea {
159
+ resize: vertical;
160
+ min-height: 60px;
161
+ }
162
+
163
+ .advanced-section {
164
+ border-top: 1px solid var(--border);
165
+ padding-top: 16px;
166
+ }
167
+
168
+ .advanced-section summary {
169
+ cursor: pointer;
170
+ font-size: 12px;
171
+ font-weight: 600;
172
+ color: var(--primary);
173
+ display: flex;
174
+ align-items: center;
175
+ gap: 8px;
176
+ padding: 8px 0;
177
+ user-select: none;
178
+ }
179
+
180
+ .advanced-section summary:hover {
181
+ color: var(--primary-hover);
182
+ }
183
+
184
+ .advanced-content {
185
+ padding-top: 16px;
186
+ display: flex;
187
+ flex-direction: column;
188
+ gap: 12px;
189
+ }
190
+
191
+ /* ===== MAIN CONTENT ===== */
192
+ .main-content {
193
+ flex: 1;
194
+ display: flex;
195
+ flex-direction: column;
196
+ padding: 20px;
197
+ gap: 16px;
198
+ overflow: hidden;
199
+ }
200
+
201
+ .top-bar {
202
+ display: flex;
203
+ justify-content: space-between;
204
+ align-items: center;
205
+ padding: 12px 20px;
206
+ background: var(--bg-panel);
207
+ border-radius: var(--radius-md);
208
+ border: 1px solid var(--border);
209
+ }
210
+
211
+ .header-left {
212
+ display: flex;
213
+ align-items: center;
214
+ gap: 16px;
215
+ }
216
+
217
+ .status-badge {
218
+ padding: 8px 14px;
219
+ border-radius: 20px;
220
+ font-size: 11px;
221
+ font-weight: 700;
222
+ text-transform: uppercase;
223
+ letter-spacing: 0.5px;
224
+ display: flex;
225
+ align-items: center;
226
+ gap: 8px;
227
+ }
228
+
229
+ .status-badge i {
230
+ font-size: 8px;
231
+ }
232
+
233
+ .status-badge.connected {
234
+ background: rgba(63, 185, 80, 0.15);
235
+ color: var(--success);
236
+ }
237
+
238
+ .status-badge.connected i {
239
+ animation: pulse 1.5s infinite;
240
+ }
241
+
242
+ .status-badge.disconnected {
243
+ background: rgba(248, 81, 73, 0.15);
244
+ color: var(--danger);
245
+ }
246
+
247
+ .status-badge.connecting {
248
+ background: rgba(88, 166, 255, 0.15);
249
+ color: var(--primary);
250
+ }
251
+
252
+ .status-badge.connecting i {
253
+ animation: pulse 0.8s infinite;
254
+ }
255
+
256
+ @keyframes pulse {
257
+ 0%, 100% { opacity: 1; }
258
+ 50% { opacity: 0.4; }
259
+ }
260
+
261
+ .call-timer {
262
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
263
+ font-size: 18px;
264
+ font-weight: 600;
265
+ color: var(--success);
266
+ background: rgba(63, 185, 80, 0.1);
267
+ padding: 6px 14px;
268
+ border-radius: var(--radius-sm);
269
+ }
270
+
271
+ .btn {
272
+ padding: 10px 20px;
273
+ border-radius: var(--radius-sm);
274
+ border: none;
275
+ cursor: pointer;
276
+ font-weight: 600;
277
+ font-size: 13px;
278
+ transition: all 0.2s ease;
279
+ display: inline-flex;
280
+ align-items: center;
281
+ gap: 8px;
282
+ }
283
+
284
+ .btn.primary {
285
+ background: var(--gradient-primary);
286
+ color: white;
287
+ box-shadow: var(--shadow-sm);
288
+ }
289
+
290
+ .btn.primary:hover {
291
+ transform: translateY(-1px);
292
+ box-shadow: var(--shadow-md);
293
+ }
294
+
295
+ .btn.danger {
296
+ background: var(--danger);
297
+ color: white;
298
+ }
299
+
300
+ .btn.danger:hover {
301
+ background: #da3633;
302
+ }
303
+
304
+ .btn.sm {
305
+ padding: 6px 12px;
306
+ font-size: 12px;
307
+ }
308
+
309
+ .btn.ghost {
310
+ background: transparent;
311
+ color: var(--text-muted);
312
+ }
313
+
314
+ .btn.ghost:hover {
315
+ background: var(--bg-hover);
316
+ color: var(--text-main);
317
+ }
318
+
319
+ .hidden {
320
+ display: none !important;
321
+ }
322
+
323
+ /* ===== PANELS ===== */
324
+ .content-grid {
325
+ display: grid;
326
+ grid-template-columns: 1fr 1fr;
327
+ gap: 16px;
328
+ flex: 1;
329
+ min-height: 0;
330
+ }
331
+
332
+ .panel {
333
+ background: var(--bg-panel);
334
+ border: 1px solid var(--border);
335
+ border-radius: var(--radius-md);
336
+ display: flex;
337
+ flex-direction: column;
338
+ overflow: hidden;
339
+ }
340
+
341
+ .panel-header {
342
+ padding: 14px 18px;
343
+ border-bottom: 1px solid var(--border);
344
+ display: flex;
345
+ justify-content: space-between;
346
+ align-items: center;
347
+ background: linear-gradient(180deg, var(--bg-hover) 0%, var(--bg-panel) 100%);
348
+ }
349
+
350
+ .panel-header h3 {
351
+ margin: 0;
352
+ font-size: 13px;
353
+ font-weight: 600;
354
+ color: var(--text-muted);
355
+ display: flex;
356
+ align-items: center;
357
+ gap: 8px;
358
+ }
359
+
360
+ .panel-header h3 i {
361
+ color: var(--primary);
362
+ }
363
+
364
+ .panel-body {
365
+ flex: 1;
366
+ overflow: hidden;
367
+ position: relative;
368
+ }
369
+
370
+ /* Visualizer */
371
+ .visualization-panel .panel-body {
372
+ background: linear-gradient(180deg, #0d1117 0%, #000 100%);
373
+ display: flex;
374
+ align-items: center;
375
+ justify-content: center;
376
+ }
377
+
378
+ #visualizer {
379
+ width: 100%;
380
+ height: 100%;
381
+ }
382
+
383
+ .mic-status {
384
+ font-size: 11px;
385
+ font-weight: 600;
386
+ color: var(--danger);
387
+ display: flex;
388
+ align-items: center;
389
+ gap: 6px;
390
+ }
391
+
392
+ .mic-status.active {
393
+ color: var(--success);
394
+ }
395
+
396
+ /* Transcript */
397
+ .transcript-panel .panel-body {
398
+ padding: 0;
399
+ }
400
+
401
+ .transcript-list {
402
+ height: 100%;
403
+ overflow-y: auto;
404
+ padding: 12px;
405
+ display: flex;
406
+ flex-direction: column;
407
+ gap: 10px;
408
+ }
409
+
410
+ .transcript-msg {
411
+ padding: 10px 14px;
412
+ border-radius: var(--radius-sm);
413
+ font-size: 13px;
414
+ line-height: 1.5;
415
+ max-width: 85%;
416
+ }
417
+
418
+ .transcript-msg.user {
419
+ background: var(--primary);
420
+ color: white;
421
+ align-self: flex-end;
422
+ border-bottom-right-radius: 4px;
423
+ }
424
+
425
+ .transcript-msg.assistant {
426
+ background: var(--bg-hover);
427
+ color: var(--text-main);
428
+ align-self: flex-start;
429
+ border: 1px solid var(--border);
430
+ border-bottom-left-radius: 4px;
431
+ }
432
+
433
+ /* Logs */
434
+ .logs-panel {
435
+ height: 180px;
436
+ min-height: 180px;
437
+ }
438
+
439
+ .logs-list {
440
+ height: 100%;
441
+ overflow-y: auto;
442
+ padding: 10px 14px;
443
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
444
+ font-size: 11px;
445
+ line-height: 1.6;
446
+ }
447
+
448
+ .log-entry {
449
+ padding: 4px 0;
450
+ border-bottom: 1px solid var(--border);
451
+ word-break: break-all;
452
+ }
453
+
454
+ .log-entry.info {
455
+ color: var(--primary);
456
+ }
457
+
458
+ .log-entry.error {
459
+ color: var(--danger);
460
+ }
461
+
462
+ .log-entry.success {
463
+ color: var(--success);
464
+ }
465
+
466
+ .log-entry.normal {
467
+ color: var(--text-muted);
468
+ }
469
+
470
+ /* Scrollbar */
471
+ ::-webkit-scrollbar {
472
+ width: 6px;
473
+ height: 6px;
474
+ }
475
+
476
+ ::-webkit-scrollbar-track {
477
+ background: transparent;
478
+ }
479
+
480
+ ::-webkit-scrollbar-thumb {
481
+ background: var(--border-light);
482
+ border-radius: 3px;
483
+ }
484
+
485
+ ::-webkit-scrollbar-thumb:hover {
486
+ background: var(--text-muted);
487
+ }
488
+
489
+ /* Responsive */
490
+ @media (max-width: 1200px) {
491
+ .content-grid {
492
+ grid-template-columns: 1fr;
493
+ }
494
+ }
495
+
496
+ @media (max-width: 900px) {
497
+ .config-panel {
498
+ width: 280px;
499
+ min-width: 280px;
500
+ }
501
+ }