nyxora 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 (93) hide show
  1. package/.env.example +17 -0
  2. package/IDENTITY.md +8 -0
  3. package/README.md +61 -0
  4. package/SECURITY.md +19 -0
  5. package/config.yaml +10 -0
  6. package/dashboard/README.md +73 -0
  7. package/dashboard/eslint.config.js +22 -0
  8. package/dashboard/index.html +13 -0
  9. package/dashboard/package-lock.json +2737 -0
  10. package/dashboard/package.json +31 -0
  11. package/dashboard/public/favicon.svg +1 -0
  12. package/dashboard/public/icons.svg +24 -0
  13. package/dashboard/src/App.css +184 -0
  14. package/dashboard/src/App.tsx +485 -0
  15. package/dashboard/src/BalanceWidget.tsx +65 -0
  16. package/dashboard/src/MarketWidget.tsx +73 -0
  17. package/dashboard/src/Memory.tsx +109 -0
  18. package/dashboard/src/Overview.tsx +156 -0
  19. package/dashboard/src/Settings.tsx +213 -0
  20. package/dashboard/src/Skills.tsx +97 -0
  21. package/dashboard/src/SwapWidget.tsx +130 -0
  22. package/dashboard/src/TransactionWidget.tsx +86 -0
  23. package/dashboard/src/assets/hero.png +0 -0
  24. package/dashboard/src/assets/react.svg +1 -0
  25. package/dashboard/src/assets/vite.svg +1 -0
  26. package/dashboard/src/index.css +508 -0
  27. package/dashboard/src/main.tsx +10 -0
  28. package/dashboard/src/overview.css +304 -0
  29. package/dashboard/tsconfig.app.json +25 -0
  30. package/dashboard/tsconfig.json +7 -0
  31. package/dashboard/tsconfig.node.json +24 -0
  32. package/dashboard/vite.config.ts +7 -0
  33. package/dist/agent/reasoning.js +254 -0
  34. package/dist/config/parser.js +36 -0
  35. package/dist/config/paths.js +35 -0
  36. package/dist/gateway/cli.js +86 -0
  37. package/dist/gateway/server.js +154 -0
  38. package/dist/gateway/telegram.js +45 -0
  39. package/dist/gateway/test.js +50 -0
  40. package/dist/gateway/tracker.js +49 -0
  41. package/dist/memory/logger.js +50 -0
  42. package/dist/src/agent/reasoning.js +96 -0
  43. package/dist/src/config/parser.js +25 -0
  44. package/dist/src/gateway/cli.js +79 -0
  45. package/dist/src/memory/logger.js +50 -0
  46. package/dist/src/web3/config.js +80 -0
  47. package/dist/src/web3/skills/getBalance.js +43 -0
  48. package/dist/web3/config.js +83 -0
  49. package/dist/web3/skills/getBalance.js +80 -0
  50. package/dist/web3/skills/getPrice.js +44 -0
  51. package/dist/web3/skills/swapToken.js +71 -0
  52. package/dist/web3/skills/transfer.js +48 -0
  53. package/package.json +38 -0
  54. package/src/agent/reasoning.d.ts +2 -0
  55. package/src/agent/reasoning.d.ts.map +1 -0
  56. package/src/agent/reasoning.js +97 -0
  57. package/src/agent/reasoning.js.map +1 -0
  58. package/src/agent/reasoning.ts +232 -0
  59. package/src/config/parser.d.ts +17 -0
  60. package/src/config/parser.d.ts.map +1 -0
  61. package/src/config/parser.js +26 -0
  62. package/src/config/parser.js.map +1 -0
  63. package/src/config/parser.ts +47 -0
  64. package/src/config/paths.ts +33 -0
  65. package/src/gateway/cli.d.ts +3 -0
  66. package/src/gateway/cli.d.ts.map +1 -0
  67. package/src/gateway/cli.js +80 -0
  68. package/src/gateway/cli.js.map +1 -0
  69. package/src/gateway/cli.ts +58 -0
  70. package/src/gateway/server.ts +131 -0
  71. package/src/gateway/telegram.ts +47 -0
  72. package/src/gateway/test.ts +16 -0
  73. package/src/gateway/tracker.ts +70 -0
  74. package/src/memory/logger.d.ts +18 -0
  75. package/src/memory/logger.d.ts.map +1 -0
  76. package/src/memory/logger.js +51 -0
  77. package/src/memory/logger.js.map +1 -0
  78. package/src/memory/logger.ts +57 -0
  79. package/src/web3/config.d.ts +793 -0
  80. package/src/web3/config.d.ts.map +1 -0
  81. package/src/web3/config.js +81 -0
  82. package/src/web3/config.js.map +1 -0
  83. package/src/web3/config.ts +51 -0
  84. package/src/web3/skills/getBalance.d.ts +25 -0
  85. package/src/web3/skills/getBalance.d.ts.map +1 -0
  86. package/src/web3/skills/getBalance.js +46 -0
  87. package/src/web3/skills/getBalance.js.map +1 -0
  88. package/src/web3/skills/getBalance.ts +48 -0
  89. package/src/web3/skills/getPrice.ts +43 -0
  90. package/src/web3/skills/swapToken.ts +69 -0
  91. package/src/web3/skills/transfer.ts +47 -0
  92. package/tsconfig.json +13 -0
  93. package/user.md +10 -0
@@ -0,0 +1,508 @@
1
+ :root {
2
+ --bg-color: #0f172a;
3
+ --bg-secondary: #1e293b;
4
+ --bg-sidebar: #0b1120;
5
+ --text-primary: #f8fafc;
6
+ --text-secondary: #94a3b8;
7
+ --accent: #3b82f6;
8
+ --accent-hover: #2563eb;
9
+ --glass-bg: rgba(30, 41, 59, 0.7);
10
+ --glass-border: rgba(255, 255, 255, 0.1);
11
+ --chat-user: #3b82f6;
12
+ --chat-agent: #1e293b;
13
+ --tool-bg: #0f172a;
14
+ }
15
+
16
+ * {
17
+ box-sizing: border-box;
18
+ margin: 0;
19
+ padding: 0;
20
+ }
21
+
22
+ body {
23
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
24
+ background-color: var(--bg-color);
25
+ color: var(--text-primary);
26
+ height: 100vh;
27
+ overflow: hidden;
28
+ }
29
+
30
+ #root {
31
+ display: flex;
32
+ height: 100vh;
33
+ width: 100vw;
34
+ }
35
+
36
+ /* SIDEBAR */
37
+ .sidebar {
38
+ width: 280px;
39
+ background-color: rgba(11, 17, 32, 0.85);
40
+ backdrop-filter: blur(20px);
41
+ border-right: 1px solid var(--glass-border);
42
+ display: flex;
43
+ flex-direction: column;
44
+ box-shadow: 10px 0 30px -10px rgba(0,0,0,0.5);
45
+ z-index: 100;
46
+ }
47
+
48
+ .agent-identity-card {
49
+ padding: 24px;
50
+ display: flex;
51
+ align-items: center;
52
+ gap: 16px;
53
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
54
+ margin-bottom: 8px;
55
+ background: linear-gradient(180deg, rgba(59, 130, 246, 0.05) 0%, transparent 100%);
56
+ }
57
+
58
+ .agent-avatar {
59
+ background: rgba(59, 130, 246, 0.15);
60
+ padding: 12px;
61
+ border-radius: 16px;
62
+ border: 1px solid rgba(59, 130, 246, 0.3);
63
+ box-shadow: 0 0 20px 0 rgba(59, 130, 246, 0.2);
64
+ display: flex;
65
+ justify-content: center;
66
+ align-items: center;
67
+ }
68
+
69
+ .agent-info {
70
+ display: flex;
71
+ flex-direction: column;
72
+ gap: 4px;
73
+ }
74
+
75
+ .agent-name {
76
+ font-size: 1.1rem;
77
+ font-weight: 700;
78
+ color: white;
79
+ letter-spacing: -0.025em;
80
+ }
81
+
82
+ .agent-status {
83
+ display: flex;
84
+ align-items: center;
85
+ gap: 6px;
86
+ font-size: 0.75rem;
87
+ color: #4ade80;
88
+ font-weight: 600;
89
+ letter-spacing: 0.05em;
90
+ }
91
+
92
+ .status-dot {
93
+ width: 8px;
94
+ height: 8px;
95
+ background-color: #4ade80;
96
+ border-radius: 50%;
97
+ box-shadow: 0 0 8px #4ade80;
98
+ animation: pulse-green 2s infinite;
99
+ }
100
+
101
+ @keyframes pulse-green {
102
+ 0% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(74, 222, 128, 0.7); }
103
+ 70% { transform: scale(1); box-shadow: 0 0 0 6px rgba(74, 222, 128, 0); }
104
+ 100% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(74, 222, 128, 0); }
105
+ }
106
+
107
+ .sidebar-scroll-area {
108
+ flex: 1;
109
+ overflow-y: auto;
110
+ padding-bottom: 24px;
111
+ }
112
+
113
+ .sidebar-scroll-area::-webkit-scrollbar {
114
+ width: 4px;
115
+ }
116
+ .sidebar-scroll-area::-webkit-scrollbar-thumb {
117
+ background: rgba(255,255,255,0.05);
118
+ }
119
+
120
+ .sidebar-section {
121
+ padding: 24px 24px 12px;
122
+ font-size: 0.7rem;
123
+ text-transform: uppercase;
124
+ letter-spacing: 0.15em;
125
+ color: #64748b;
126
+ font-weight: 700;
127
+ }
128
+
129
+ .sidebar-nav {
130
+ display: flex;
131
+ flex-direction: column;
132
+ gap: 4px;
133
+ padding: 0 16px;
134
+ }
135
+
136
+ .nav-item {
137
+ display: flex;
138
+ align-items: center;
139
+ gap: 14px;
140
+ padding: 12px 16px;
141
+ border-radius: 12px;
142
+ color: #94a3b8;
143
+ font-size: 0.95rem;
144
+ font-weight: 500;
145
+ cursor: pointer;
146
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
147
+ border: 1px solid transparent;
148
+ }
149
+
150
+ .nav-icon {
151
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
152
+ }
153
+
154
+ .nav-item:hover {
155
+ background-color: rgba(255, 255, 255, 0.03);
156
+ color: white;
157
+ transform: translateX(4px);
158
+ }
159
+
160
+ .nav-item:hover .nav-icon {
161
+ transform: scale(1.1);
162
+ color: var(--accent);
163
+ }
164
+
165
+ .nav-item.active {
166
+ background: linear-gradient(90deg, rgba(59,130,246,0.15) 0%, transparent 100%);
167
+ color: white;
168
+ border-left: 3px solid var(--accent);
169
+ border-radius: 4px 12px 12px 4px;
170
+ font-weight: 600;
171
+ }
172
+
173
+ .nav-item.active .nav-icon {
174
+ color: var(--accent);
175
+ }
176
+
177
+ /* MAIN CONTENT */
178
+ .main-content {
179
+ flex: 1;
180
+ display: flex;
181
+ flex-direction: column;
182
+ background-image:
183
+ radial-gradient(at 0% 0%, rgba(59, 130, 246, 0.1) 0px, transparent 50%),
184
+ radial-gradient(at 100% 100%, rgba(139, 92, 246, 0.1) 0px, transparent 50%);
185
+ }
186
+
187
+ /* TOPBAR */
188
+ .topbar {
189
+ height: 64px;
190
+ border-bottom: 1px solid var(--glass-border);
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: space-between;
194
+ padding: 0 24px;
195
+ background: rgba(15, 23, 42, 0.6);
196
+ backdrop-filter: blur(12px);
197
+ }
198
+
199
+ .topbar-left {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: 16px;
203
+ font-size: 0.95rem;
204
+ font-weight: 500;
205
+ color: var(--text-secondary);
206
+ }
207
+
208
+ .topbar-right {
209
+ display: flex;
210
+ align-items: center;
211
+ gap: 12px;
212
+ }
213
+
214
+ .config-dropdown {
215
+ background: var(--bg-secondary);
216
+ border: 1px solid var(--glass-border);
217
+ color: white;
218
+ padding: 8px 12px;
219
+ border-radius: 6px;
220
+ font-size: 0.85rem;
221
+ outline: none;
222
+ cursor: pointer;
223
+ transition: all 0.2s;
224
+ min-width: 120px;
225
+ }
226
+
227
+ .config-dropdown:hover {
228
+ border-color: var(--accent);
229
+ }
230
+
231
+ .config-dropdown:focus {
232
+ border-color: var(--accent);
233
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
234
+ }
235
+
236
+ /* SPLIT SCREEN WORKSPACE */
237
+ .workspace-container {
238
+ display: flex;
239
+ height: calc(100vh - 64px);
240
+ width: 100%;
241
+ }
242
+
243
+ .chat-wrapper {
244
+ display: flex;
245
+ flex-direction: column;
246
+ padding: 24px 0;
247
+ height: 100%;
248
+ }
249
+
250
+ .resizer {
251
+ width: 6px;
252
+ background: var(--glass-border);
253
+ cursor: col-resize;
254
+ transition: background 0.2s;
255
+ z-index: 10;
256
+ }
257
+
258
+ .resizer:hover, .resizer:active {
259
+ background: var(--accent);
260
+ }
261
+
262
+ .canvas-panel {
263
+ flex: 1;
264
+ display: flex;
265
+ flex-direction: column;
266
+ background: var(--bg-sidebar);
267
+ padding: 32px;
268
+ overflow-y: auto;
269
+ position: relative;
270
+ background-image: radial-gradient(at 50% 50%, rgba(59, 130, 246, 0.05) 0px, transparent 80%);
271
+ }
272
+
273
+ .canvas-header {
274
+ display: flex;
275
+ justify-content: space-between;
276
+ align-items: center;
277
+ margin-bottom: 32px;
278
+ border-bottom: 1px solid rgba(255,255,255,0.05);
279
+ padding-bottom: 16px;
280
+ }
281
+
282
+ .canvas-title {
283
+ font-family: monospace;
284
+ color: #94a3b8;
285
+ font-size: 0.85rem;
286
+ display: flex;
287
+ align-items: center;
288
+ gap: 8px;
289
+ text-transform: uppercase;
290
+ letter-spacing: 0.05em;
291
+ }
292
+
293
+ .canvas-empty {
294
+ display: flex;
295
+ flex-direction: column;
296
+ align-items: center;
297
+ justify-content: center;
298
+ height: 100%;
299
+ color: #475569;
300
+ gap: 16px;
301
+ }
302
+
303
+ .chat-container {
304
+ flex: 1;
305
+ overflow-y: auto;
306
+ padding: 0 24px;
307
+ display: flex;
308
+ flex-direction: column;
309
+ gap: 20px;
310
+ }
311
+
312
+ .chat-container::-webkit-scrollbar {
313
+ width: 6px;
314
+ }
315
+ .chat-container::-webkit-scrollbar-thumb {
316
+ background: rgba(255, 255, 255, 0.1);
317
+ border-radius: 4px;
318
+ }
319
+
320
+ .message-wrapper {
321
+ display: flex;
322
+ flex-direction: column;
323
+ max-width: 85%;
324
+ animation: fadeIn 0.3s ease-out forwards;
325
+ }
326
+
327
+ .message-wrapper.user {
328
+ align-self: flex-end;
329
+ }
330
+
331
+ .message-wrapper.agent {
332
+ align-self: flex-start;
333
+ }
334
+
335
+ .message-bubble {
336
+ padding: 14px 18px;
337
+ border-radius: 18px;
338
+ line-height: 1.6;
339
+ font-size: 0.95rem;
340
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
341
+ }
342
+
343
+ .user .message-bubble {
344
+ background-color: var(--chat-user);
345
+ color: white;
346
+ border-bottom-right-radius: 4px;
347
+ }
348
+
349
+ .agent .message-bubble {
350
+ background-color: var(--chat-agent);
351
+ border: 1px solid var(--glass-border);
352
+ border-bottom-left-radius: 4px;
353
+ }
354
+
355
+ .tool-call {
356
+ font-size: 0.85rem;
357
+ color: var(--text-secondary);
358
+ background: var(--tool-bg);
359
+ padding: 10px 14px;
360
+ border-radius: 12px;
361
+ margin-top: 10px;
362
+ border: 1px solid rgba(255, 255, 255, 0.05);
363
+ display: flex;
364
+ align-items: center;
365
+ gap: 8px;
366
+ }
367
+
368
+ .tool-call code {
369
+ color: #a78bfa;
370
+ font-family: monospace;
371
+ }
372
+
373
+ .input-area {
374
+ padding: 20px 24px 0;
375
+ }
376
+
377
+ .input-form {
378
+ display: flex;
379
+ gap: 12px;
380
+ background: var(--bg-secondary);
381
+ border: 1px solid var(--glass-border);
382
+ border-radius: 16px;
383
+ padding: 8px;
384
+ transition: all 0.2s;
385
+ }
386
+
387
+ .input-form:focus-within {
388
+ border-color: var(--accent);
389
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
390
+ }
391
+
392
+ .chat-input {
393
+ flex: 1;
394
+ background: transparent;
395
+ border: none;
396
+ padding: 12px 16px;
397
+ color: white;
398
+ font-size: 0.95rem;
399
+ font-family: inherit;
400
+ outline: none;
401
+ }
402
+
403
+ .send-button {
404
+ background: var(--accent);
405
+ color: white;
406
+ border: none;
407
+ width: 44px;
408
+ height: 44px;
409
+ border-radius: 12px;
410
+ display: flex;
411
+ justify-content: center;
412
+ align-items: center;
413
+ cursor: pointer;
414
+ transition: all 0.2s;
415
+ }
416
+
417
+ .voice-button {
418
+ background: var(--bg-secondary);
419
+ color: var(--text-secondary);
420
+ border: 1px solid var(--glass-border);
421
+ width: 44px;
422
+ height: 44px;
423
+ border-radius: 12px;
424
+ display: flex;
425
+ justify-content: center;
426
+ align-items: center;
427
+ cursor: pointer;
428
+ transition: all 0.2s;
429
+ }
430
+
431
+ .voice-button:hover {
432
+ color: white;
433
+ border-color: #ef4444;
434
+ }
435
+
436
+ .voice-button.listening {
437
+ background: rgba(239, 68, 68, 0.2);
438
+ color: #ef4444;
439
+ border-color: #ef4444;
440
+ animation: pulse-red 1.5s infinite;
441
+ }
442
+
443
+ .voice-button.active-mode {
444
+ border-color: #3b82f6;
445
+ color: #3b82f6;
446
+ }
447
+
448
+ .voice-button.speaking {
449
+ background: rgba(59, 130, 246, 0.2);
450
+ color: #3b82f6;
451
+ border-color: #3b82f6;
452
+ animation: pulse-blue 1.5s infinite;
453
+ }
454
+
455
+ @keyframes pulse-red {
456
+ 0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4); }
457
+ 70% { box-shadow: 0 0 0 10px rgba(239, 68, 68, 0); }
458
+ 100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); }
459
+ }
460
+
461
+ @keyframes pulse-blue {
462
+ 0% { box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.4); }
463
+ 70% { box-shadow: 0 0 0 10px rgba(59, 130, 246, 0); }
464
+ 100% { box-shadow: 0 0 0 0 rgba(59, 130, 246, 0); }
465
+ }
466
+
467
+ .send-button:hover:not(:disabled) {
468
+ background: var(--accent-hover);
469
+ transform: scale(1.05);
470
+ }
471
+
472
+ .send-button:disabled {
473
+ opacity: 0.5;
474
+ cursor: not-allowed;
475
+ }
476
+
477
+ .typing-indicator {
478
+ display: flex;
479
+ gap: 4px;
480
+ padding: 14px 18px;
481
+ background-color: var(--chat-agent);
482
+ border: 1px solid var(--glass-border);
483
+ border-radius: 18px;
484
+ border-bottom-left-radius: 4px;
485
+ width: fit-content;
486
+ align-self: flex-start;
487
+ }
488
+
489
+ .dot {
490
+ width: 6px;
491
+ height: 6px;
492
+ background: var(--text-secondary);
493
+ border-radius: 50%;
494
+ animation: bounce 1.4s infinite ease-in-out both;
495
+ }
496
+
497
+ .dot:nth-child(1) { animation-delay: -0.32s; }
498
+ .dot:nth-child(2) { animation-delay: -0.16s; }
499
+
500
+ @keyframes bounce {
501
+ 0%, 80%, 100% { transform: scale(0); }
502
+ 40% { transform: scale(1); }
503
+ }
504
+
505
+ @keyframes fadeIn {
506
+ from { opacity: 0; transform: translateY(10px); }
507
+ to { opacity: 1; transform: translateY(0); }
508
+ }
@@ -0,0 +1,10 @@
1
+ import { StrictMode } from 'react'
2
+ import { createRoot } from 'react-dom/client'
3
+ import './index.css'
4
+ import App from './App.tsx'
5
+
6
+ createRoot(document.getElementById('root')!).render(
7
+ <StrictMode>
8
+ <App />
9
+ </StrictMode>,
10
+ )