@pheem49/mint 1.4.2 → 1.5.1

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 (97) hide show
  1. package/GUIDE_TH.md +113 -0
  2. package/README.md +267 -78
  3. package/assets/CLI_Screen.png +0 -0
  4. package/main.js +76 -890
  5. package/mint-cli-logic.js +3 -107
  6. package/mint-cli.js +594 -29
  7. package/models/Shiroko_Model/Shiroko/Shiroko_Core/72d86db84cfa9730b894c241fd24c0db.png +0 -0
  8. package/models/Shiroko_Model/Shiroko/Shiroko_Core/items_pinned_to_model.json +14 -0
  9. package/models/Shiroko_Model/Shiroko/Shiroko_Core//345/221/206/347/214/253.exp3.json +10 -0
  10. package/models/Shiroko_Model/Shiroko/Shiroko_Core//345/221/206/347/214/253/347/234/274/347/217/240/346/221/207/346/231/203.exp3.json +15 -0
  11. package/models/Shiroko_Model/Shiroko/Shiroko_Core//345/233/264/350/243/231.exp3.json +10 -0
  12. package/models/Shiroko_Model/Shiroko/Shiroko_Core//346/213/215/347/205/247.exp3.json +50 -0
  13. package/models/Shiroko_Model/Shiroko/Shiroko_Core//346/213/277/347/254/224.exp3.json +10 -0
  14. package/models/Shiroko_Model/Shiroko/Shiroko_Core//347/202/271/344/270/200/344/270/213.exp3.json +10 -0
  15. package/models/Shiroko_Model/Shiroko/Shiroko_Core//347/214/253/345/222/252/346/273/244/351/225/234.exp3.json +10 -0
  16. package/models/Shiroko_Model/Shiroko/Shiroko_Core//347/234/274/351/225/234.exp3.json +10 -0
  17. package/models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_00.png +0 -0
  18. package/models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_01.png +0 -0
  19. package/models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_02.png +0 -0
  20. package/models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_03.png +0 -0
  21. package/models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.cdi3.json +1498 -0
  22. package/models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.moc3 +0 -0
  23. package/models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.model3.json +47 -0
  24. package/models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.physics3.json +6658 -0
  25. package/models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.vtube.json +1299 -0
  26. package/models/Shiroko_Model/Shiroko//342/232/241/351/253/230/344/272/256/342/232/241/344/275/277/347/224/250/346/225/231/347/250/213/344/270/216/346/263/250/346/204/217/344/272/213/351/241/271.txt +23 -0
  27. package/package.json +37 -4
  28. package/src/AI_Brain/Gemini_API.js +223 -65
  29. package/src/AI_Brain/autonomous_brain.js +11 -0
  30. package/src/AI_Brain/behavior_memory.js +26 -5
  31. package/src/AI_Brain/headless_agent.js +4 -0
  32. package/src/AI_Brain/knowledge_base.js +61 -8
  33. package/src/AI_Brain/memory_store.js +354 -10
  34. package/src/Automation_Layer/file_operations.js +1 -1
  35. package/src/CLI/chat_router.js +20 -7
  36. package/src/CLI/chat_ui.js +596 -825
  37. package/src/CLI/code_agent.js +347 -56
  38. package/src/CLI/gmail_auth.js +210 -0
  39. package/src/CLI/image_input.js +90 -0
  40. package/src/CLI/list_features.js +2 -0
  41. package/src/CLI/onboarding.js +364 -55
  42. package/src/CLI/updater.js +210 -0
  43. package/src/Channels/brave_search_bridge.js +35 -0
  44. package/src/Channels/discord_bridge.js +68 -0
  45. package/src/Channels/google_search_bridge.js +38 -0
  46. package/src/Channels/line_bridge.js +60 -0
  47. package/src/Channels/slack_bridge.js +53 -0
  48. package/src/Channels/telegram_bridge.js +49 -0
  49. package/src/Channels/whatsapp_bridge.js +55 -0
  50. package/src/Command_Parser/parser.js +12 -1
  51. package/src/Plugins/gmail.js +251 -0
  52. package/src/Plugins/google_calendar.js +245 -19
  53. package/src/Plugins/notion.js +256 -0
  54. package/src/System/action_executor.js +178 -0
  55. package/src/System/bridge_manager.js +76 -0
  56. package/src/System/chat_history_manager.js +23 -5
  57. package/src/System/config_manager.js +71 -7
  58. package/src/System/custom_workflows.js +31 -2
  59. package/src/System/google_tts_urls.js +51 -0
  60. package/src/System/granular_automation.js +122 -53
  61. package/src/System/ipc_handlers.js +238 -0
  62. package/src/System/proactive_loop.js +153 -0
  63. package/src/System/safety_manager.js +273 -0
  64. package/src/System/sandbox_runner.js +182 -0
  65. package/src/System/screen_capture.js +175 -0
  66. package/src/System/system_automation.js +127 -81
  67. package/src/System/system_info.js +70 -0
  68. package/src/System/task_manager.js +15 -5
  69. package/src/System/tool_registry.js +280 -0
  70. package/src/System/window_manager.js +212 -0
  71. package/src/UI/live2d_manager.js +368 -0
  72. package/src/UI/renderer.js +208 -24
  73. package/src/UI/settings.html +24 -0
  74. package/src/UI/settings.js +14 -4
  75. package/src/UI/styles.css +466 -32
  76. package/.codex +0 -0
  77. package/docs/assets/Agent_Mint.png +0 -0
  78. package/docs/assets/CLI_Screen.png +0 -0
  79. package/docs/assets/Settings.png +0 -0
  80. package/docs/assets/icon.png +0 -0
  81. package/docs/index.html +0 -132
  82. package/docs/style.css +0 -579
  83. package/index.html +0 -16
  84. package/src/UI/index.html +0 -126
  85. package/tech_news.txt +0 -3
  86. package/test_knowledge.txt +0 -3
  87. package/tests/agent_orchestrator.test.js +0 -41
  88. package/tests/chat_router.test.js +0 -42
  89. package/tests/code_agent.test.js +0 -69
  90. package/tests/config_manager.test.js +0 -141
  91. package/tests/docker.test.js +0 -46
  92. package/tests/file_operations.test.js +0 -57
  93. package/tests/memory_store.test.js +0 -185
  94. package/tests/provider_routing.test.js +0 -67
  95. package/tests/spotify.test.js +0 -201
  96. package/tests/system_monitor.test.js +0 -37
  97. package/tests/workspace_manager.test.js +0 -56
package/docs/style.css DELETED
@@ -1,579 +0,0 @@
1
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Outfit:wght@600;700;800&display=swap');
2
-
3
- :root {
4
- --bg-color: #050505;
5
- --accent-mint: #00ffa3;
6
- --accent-blue: #00e0ff;
7
- --text-primary: #ffffff;
8
- --text-secondary: #a1a1aa;
9
- --glass-bg: rgba(255, 255, 255, 0.03);
10
- --glass-border: rgba(255, 255, 255, 0.1);
11
- --card-bg: rgba(20, 20, 23, 0.6);
12
- --font-heading: 'Outfit', sans-serif;
13
- --font-body: 'Inter', sans-serif;
14
- }
15
-
16
- html {
17
- scroll-behavior: smooth;
18
- }
19
-
20
- * {
21
- margin: 0;
22
- padding: 0;
23
- box-sizing: border-box;
24
- }
25
-
26
- body {
27
- background-color: var(--bg-color);
28
- color: var(--text-primary);
29
- font-family: var(--font-body);
30
- line-height: 1.6;
31
- overflow-x: hidden;
32
- }
33
-
34
- /* Background Gradients & Texture */
35
- .bg-glow {
36
- position: fixed;
37
- top: 0;
38
- left: 0;
39
- width: 100%;
40
- height: 100%;
41
- z-index: -1;
42
- background:
43
- radial-gradient(circle at 0% 0%, rgba(0, 255, 163, 0.03) 0%, transparent 40%),
44
- radial-gradient(circle at 100% 100%, rgba(0, 224, 255, 0.03) 0%, transparent 40%),
45
- var(--bg-color);
46
- }
47
-
48
- .bg-glow::before {
49
- content: '';
50
- position: absolute;
51
- top: 0;
52
- left: 0;
53
- width: 100%;
54
- height: 100%;
55
- background-image: radial-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px);
56
- background-size: 40px 40px;
57
- opacity: 0.5;
58
- mask-image: radial-gradient(ellipse at center, black, transparent 80%);
59
- }
60
-
61
- /* Floating Blobs */
62
- .floating-blobs {
63
- position: fixed;
64
- top: 0;
65
- left: 0;
66
- width: 100%;
67
- height: 100%;
68
- z-index: -1;
69
- overflow: hidden;
70
- pointer-events: none;
71
- }
72
-
73
- .blob {
74
- position: absolute;
75
- border-radius: 50%;
76
- filter: blur(120px);
77
- opacity: 0.15;
78
- animation: float 20s infinite alternate cubic-bezier(0.45, 0, 0.55, 1);
79
- }
80
-
81
- .blob-1 {
82
- width: 600px;
83
- height: 600px;
84
- background: var(--accent-mint);
85
- top: -200px;
86
- left: -100px;
87
- animation-duration: 25s;
88
- }
89
-
90
- .blob-2 {
91
- width: 500px;
92
- height: 500px;
93
- background: var(--accent-blue);
94
- bottom: -100px;
95
- right: -100px;
96
- animation-duration: 30s;
97
- animation-delay: -5s;
98
- }
99
-
100
- .blob-3 {
101
- width: 400px;
102
- height: 400px;
103
- background: #8b5cf6;
104
- top: 40%;
105
- left: 50%;
106
- opacity: 0.08;
107
- animation-duration: 22s;
108
- animation-delay: -10s;
109
- }
110
-
111
- @keyframes float {
112
- 0% { transform: translate(0, 0) scale(1); }
113
- 100% { transform: translate(100px, 50px) scale(1.1); }
114
- }
115
-
116
- /* Navigation */
117
- nav {
118
- display: flex;
119
- justify-content: space-between;
120
- align-items: center;
121
- padding: 1.5rem 10%;
122
- position: fixed;
123
- top: 0;
124
- width: 100%;
125
- z-index: 1000;
126
- backdrop-filter: blur(12px);
127
- border-bottom: 1px solid var(--glass-border);
128
- background: var(--glass-bg);
129
- }
130
-
131
- .logo-container {
132
- display: flex;
133
- align-items: center;
134
- gap: 0.75rem;
135
- font-family: var(--font-heading);
136
- font-size: 1.5rem;
137
- letter-spacing: -0.5px;
138
- }
139
-
140
- .logo-container img {
141
- height: 32px;
142
- border-radius: 6px;
143
- }
144
-
145
- .nav-links {
146
- display: flex;
147
- gap: 2rem;
148
- }
149
-
150
- .nav-links a {
151
- text-decoration: none;
152
- color: var(--text-secondary);
153
- font-size: 0.95rem;
154
- font-weight: 500;
155
- transition: color 0.3s ease;
156
- }
157
-
158
- .nav-links a:hover {
159
- color: var(--accent-mint);
160
- }
161
-
162
- .github-link {
163
- background: var(--text-primary);
164
- color: var(--bg-color) !important;
165
- padding: 0.5rem 1.25rem;
166
- border-radius: 100px;
167
- font-weight: 600 !important;
168
- }
169
-
170
- /* Hero Section */
171
- .hero {
172
- min-height: 90vh;
173
- display: flex;
174
- flex-direction: column;
175
- justify-content: center;
176
- align-items: center;
177
- text-align: center;
178
- padding: 120px 20px 60px;
179
- position: relative;
180
- }
181
-
182
- .hero::after {
183
- content: '';
184
- position: absolute;
185
- bottom: 0;
186
- left: 0;
187
- width: 100%;
188
- height: 300px;
189
- background: linear-gradient(to top, var(--bg-color), transparent);
190
- pointer-events: none;
191
- }
192
-
193
- .hero h1 {
194
- font-family: var(--font-heading);
195
- font-size: clamp(3rem, 8vw, 5.5rem);
196
- line-height: 1.1;
197
- margin-bottom: 1.5rem;
198
- background: linear-gradient(to bottom right, #fff 50%, #999);
199
- -webkit-background-clip: text;
200
- background-clip: text;
201
- -webkit-text-fill-color: transparent;
202
- z-index: 1;
203
- }
204
-
205
- .hero p {
206
- font-size: 1.25rem;
207
- color: var(--text-secondary);
208
- max-width: 700px;
209
- margin-bottom: 3rem;
210
- z-index: 1;
211
- }
212
-
213
- /* Install Command */
214
- .install-container {
215
- background: #0a0a0c;
216
- border: 1px solid var(--glass-border);
217
- padding: 0.75rem 1.5rem;
218
- border-radius: 12px;
219
- display: flex;
220
- align-items: center;
221
- gap: 1rem;
222
- font-family: 'Courier New', Courier, monospace;
223
- position: relative;
224
- z-index: 1;
225
- box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4);
226
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
227
- margin-bottom: 4rem;
228
- }
229
-
230
- .hero-preview {
231
- margin-top: 4rem;
232
- width: 95%;
233
- max-width: 1100px;
234
- z-index: 1;
235
- border-radius: 24px;
236
- padding: 2rem;
237
- background: rgba(20, 20, 23, 0.4);
238
- border: 1px solid rgba(139, 92, 246, 0.4);
239
- box-shadow: 0 40px 100px rgba(0, 0, 0, 0.6);
240
- animation: slideUp 1s cubic-bezier(0.16, 1, 0.3, 1);
241
- backdrop-filter: blur(10px);
242
- }
243
-
244
- .hero-preview img {
245
- width: 100%;
246
- display: block;
247
- border-radius: 12px;
248
- border: 1px solid rgba(255, 255, 255, 0.05);
249
- }
250
-
251
- .preview-badge {
252
- position: absolute;
253
- top: -15px;
254
- left: 50%;
255
- transform: translateX(-50%);
256
- background: var(--accent-mint);
257
- color: #000;
258
- padding: 0.4rem 1.2rem;
259
- border-radius: 100px;
260
- font-size: 0.8rem;
261
- font-weight: 800;
262
- text-transform: uppercase;
263
- letter-spacing: 1px;
264
- box-shadow: 0 10px 20px rgba(0, 255, 163, 0.3);
265
- }
266
-
267
- @keyframes slideUp {
268
- from {
269
- opacity: 0;
270
- transform: translateY(40px);
271
- }
272
- to {
273
- opacity: 1;
274
- transform: translateY(0);
275
- }
276
- }
277
-
278
- .install-container:hover {
279
- border-color: var(--accent-mint);
280
- box-shadow: 0 0 30px rgba(0, 255, 163, 0.15);
281
- }
282
-
283
- .install-container span {
284
- color: var(--accent-mint);
285
- }
286
-
287
- .install-container code {
288
- color: #fff;
289
- font-size: 1.1rem;
290
- }
291
-
292
- .copy-btn {
293
- background: none;
294
- border: none;
295
- color: var(--text-secondary);
296
- cursor: pointer;
297
- padding: 5px;
298
- transition: color 0.3s;
299
- }
300
-
301
- .copy-btn:hover {
302
- color: #fff;
303
- }
304
-
305
- /* Features Section */
306
- .features {
307
- padding: 100px 10%;
308
- display: grid;
309
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
310
- gap: 2rem;
311
- position: relative;
312
- z-index: 1;
313
- }
314
-
315
- .feature-card {
316
- background: var(--card-bg);
317
- border: 1px solid var(--glass-border);
318
- padding: 2.5rem;
319
- border-radius: 24px;
320
- transition: transform 0.3s ease, border-color 0.3s ease;
321
- backdrop-filter: blur(5px);
322
- }
323
-
324
- .feature-card:hover {
325
- transform: translateY(-10px);
326
- border-color: var(--accent-mint);
327
- }
328
-
329
- .feature-icon {
330
- width: 48px;
331
- height: 48px;
332
- background: rgba(0, 255, 163, 0.1);
333
- border-radius: 12px;
334
- display: flex;
335
- align-items: center;
336
- justify-content: center;
337
- color: var(--accent-mint);
338
- margin-bottom: 1.5rem;
339
- font-size: 1.5rem;
340
- }
341
-
342
- .feature-card h3 {
343
- font-family: var(--font-heading);
344
- font-size: 1.5rem;
345
- margin-bottom: 1rem;
346
- }
347
-
348
- .feature-card p {
349
- color: var(--text-secondary);
350
- font-size: 1rem;
351
- }
352
-
353
- /* Desktop Showcase */
354
- .desktop-showcase {
355
- padding: 100px 10%;
356
- z-index: 1;
357
- position: relative;
358
- }
359
-
360
- .showcase-header {
361
- text-align: center;
362
- margin-bottom: 5rem;
363
- }
364
-
365
- .section-icon {
366
- width: 64px;
367
- height: 64px;
368
- margin-bottom: 1.5rem;
369
- filter: drop-shadow(0 0 20px rgba(0, 255, 163, 0.4));
370
- }
371
-
372
- .showcase-header h2 {
373
- font-family: var(--font-heading);
374
- font-size: 3.5rem;
375
- margin-bottom: 1rem;
376
- }
377
-
378
- .showcase-header p {
379
- color: var(--text-secondary);
380
- font-size: 1.2rem;
381
- max-width: 600px;
382
- margin: 0 auto;
383
- }
384
-
385
- .showcase-group {
386
- display: flex;
387
- flex-direction: column;
388
- align-items: center;
389
- gap: 4rem;
390
- }
391
-
392
- .showcase-images {
393
- display: flex;
394
- justify-content: center;
395
- align-items: flex-start;
396
- gap: 2rem;
397
- width: 100%;
398
- }
399
-
400
- .image-wrapper {
401
- flex: 1;
402
- max-width: 450px;
403
- background: rgba(255, 255, 255, 0.02);
404
- border: 1px solid var(--glass-border);
405
- padding: 0.75rem;
406
- border-radius: 20px;
407
- position: relative;
408
- backdrop-filter: blur(10px);
409
- transition: transform 0.4s ease;
410
- }
411
-
412
- .image-wrapper:hover {
413
- transform: translateY(-10px);
414
- border-color: var(--accent-mint);
415
- }
416
-
417
- .image-wrapper img {
418
- width: 100%;
419
- display: block;
420
- border-radius: 12px;
421
- box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4);
422
- }
423
-
424
- .image-wrapper span {
425
- display: block;
426
- text-align: center;
427
- margin-top: 1rem;
428
- font-size: 0.85rem;
429
- color: var(--text-secondary);
430
- font-weight: 500;
431
- }
432
-
433
- .showcase-text-combined {
434
- display: grid;
435
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
436
- gap: 3rem;
437
- width: 100%;
438
- max-width: 900px;
439
- margin-top: 2rem;
440
- }
441
-
442
- .text-block {
443
- text-align: left;
444
- }
445
-
446
- .text-block h3 {
447
- font-family: var(--font-heading);
448
- font-size: 1.5rem;
449
- margin-bottom: 0.75rem;
450
- color: var(--accent-mint);
451
- display: flex;
452
- align-items: center;
453
- gap: 0.5rem;
454
- }
455
-
456
- .text-block p {
457
- font-size: 1rem;
458
- color: var(--text-secondary);
459
- line-height: 1.6;
460
- }
461
-
462
- /* Downloads Section */
463
- .downloads {
464
- padding: 100px 10% 60px;
465
- display: flex;
466
- justify-content: center;
467
- z-index: 5;
468
- position: relative;
469
- }
470
-
471
- .download-container {
472
- background: linear-gradient(135deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.01));
473
- border: 1px solid var(--glass-border);
474
- padding: 3.5rem;
475
- border-radius: 32px;
476
- max-width: 800px;
477
- text-align: center;
478
- backdrop-filter: blur(15px);
479
- box-shadow: 0 30px 60px rgba(0, 0, 0, 0.3);
480
- z-index: 10;
481
- }
482
-
483
- .download-container h2 {
484
- font-family: var(--font-heading);
485
- font-size: 2.5rem;
486
- margin-bottom: 1.5rem;
487
- }
488
-
489
- .download-container p {
490
- color: var(--text-secondary);
491
- font-size: 1.1rem;
492
- margin-bottom: 2.5rem;
493
- line-height: 1.8;
494
- }
495
-
496
- .download-container b {
497
- color: var(--text-primary);
498
- }
499
-
500
- .download-btn {
501
- display: inline-flex;
502
- align-items: center;
503
- gap: 0.75rem;
504
- background: var(--accent-mint);
505
- color: #000;
506
- text-decoration: none;
507
- padding: 1.25rem 2.5rem;
508
- border-radius: 100px;
509
- font-weight: 700;
510
- font-size: 1.1rem;
511
- transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
512
- box-shadow: 0 10px 30px rgba(0, 255, 163, 0.3);
513
- cursor: pointer;
514
- position: relative;
515
- z-index: 11;
516
- }
517
-
518
- .download-btn:hover {
519
- transform: scale(1.05);
520
- box-shadow: 0 15px 40px rgba(0, 255, 163, 0.5);
521
- background: #fff;
522
- }
523
-
524
- .download-btn i {
525
- font-size: 1.4rem;
526
- }
527
-
528
- .download-card h4 {
529
- font-family: var(--font-heading);
530
- font-size: 1.25rem;
531
- margin-bottom: 1rem;
532
- display: flex;
533
- align-items: center;
534
- gap: 0.75rem;
535
- }
536
-
537
- .download-card h4 i {
538
- color: var(--accent-blue);
539
- }
540
-
541
- .download-card pre {
542
- background: #000;
543
- padding: 1rem;
544
- border-radius: 8px;
545
- font-size: 0.9rem;
546
- color: var(--accent-mint);
547
- margin-top: 1rem;
548
- overflow-x: auto;
549
- border: 1px solid rgba(255, 255, 255, 0.05);
550
- }
551
-
552
- .download-card p {
553
- color: var(--text-secondary);
554
- font-size: 0.95rem;
555
- }
556
-
557
- /* Footer */
558
- footer {
559
- padding: 60px 10% 40px;
560
- border-top: 1px solid var(--glass-border);
561
- text-align: center;
562
- color: var(--text-secondary);
563
- font-size: 0.9rem;
564
- }
565
-
566
- /* Responsive */
567
- @media (max-width: 768px) {
568
- .nav-links {
569
- display: none;
570
- }
571
-
572
- .hero h1 {
573
- font-size: 3.5rem;
574
- }
575
-
576
- .hero p {
577
- font-size: 1.1rem;
578
- }
579
- }
package/index.html DELETED
@@ -1,16 +0,0 @@
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>Mint AI</title>
7
- <!-- We can add Google Fonts here -->
8
- <link rel="preconnect" href="https://fonts.googleapis.com">
9
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Outfit:wght@500;600;700&display=swap" rel="stylesheet">
11
- </head>
12
- <body>
13
- <div id="root"></div>
14
- <script type="module" src="/ui/src/main.jsx"></script>
15
- </body>
16
- </html>