brosh 0.2.2 → 0.2.4

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 (42) hide show
  1. package/README.github.md +169 -0
  2. package/README.md +18 -141
  3. package/README.npm.md +58 -0
  4. package/dist/lib.d.ts +1 -1
  5. package/dist/lib.d.ts.map +1 -1
  6. package/dist/lib.js +1 -1
  7. package/dist/lib.js.map +1 -1
  8. package/dist/terminal/index.d.ts +1 -1
  9. package/dist/terminal/index.d.ts.map +1 -1
  10. package/dist/terminal/index.js +1 -1
  11. package/dist/terminal/index.js.map +1 -1
  12. package/dist/terminal/session.d.ts +14 -1
  13. package/dist/terminal/session.d.ts.map +1 -1
  14. package/dist/terminal/session.js +263 -78
  15. package/dist/terminal/session.js.map +1 -1
  16. package/package.json +7 -4
  17. package/packages/desktop-electron/build/afterInstall-linux.sh +4 -0
  18. package/packages/desktop-electron/build/afterPack.cjs +29 -19
  19. package/packages/desktop-electron/build/entitlements.mac.inherit.plist +14 -0
  20. package/packages/desktop-electron/build/entitlements.mac.plist +16 -0
  21. package/packages/desktop-electron/package-lock.json +666 -165
  22. package/packages/desktop-electron/package.json +53 -14
  23. package/packages/desktop-electron/scripts/bundle-main.mjs +97 -0
  24. package/packages/desktop-electron/scripts/bytecode-compiler.cjs +3 -0
  25. package/packages/desktop-electron/scripts/fix-dev-entitlements.js +56 -0
  26. package/packages/desktop-electron/vite.config.ts +13 -0
  27. package/packaging/aur/.SRCINFO +20 -0
  28. package/packaging/aur/PKGBUILD +26 -0
  29. package/vendor/xterm-headless-5.5.0.tgz +0 -0
  30. package/vendor/xterm-xterm-5.5.0.tgz +0 -0
  31. package/website/CNAME +1 -0
  32. package/website/assets/images/.gitkeep +0 -0
  33. package/website/assets/videos/.gitkeep +0 -0
  34. package/website/css/styles.css +735 -0
  35. package/website/gpg.key +37 -0
  36. package/website/index.html +314 -0
  37. package/website/install.sh.asc +16 -0
  38. package/website/js/main.js +293 -0
  39. package/website/rpm/brosh.repo +6 -0
  40. package/website/uninstall.sh +10 -0
  41. package/packages/desktop-electron/tests/main/error-triage/buildTriagePrompt.test.ts +0 -133
  42. package/packages/desktop-electron/tests/main/error-triage/parseTriageResponse.test.ts +0 -123
@@ -0,0 +1,735 @@
1
+ /* ==========================================
2
+ brosh landing page
3
+ ========================================== */
4
+
5
+ :root {
6
+ --bg: #0a0a0a;
7
+ --surface-1: #111;
8
+ --surface-2: #1a1a1a;
9
+ --surface-3: #252526;
10
+ --text: #e5e5e5;
11
+ --text-secondary: #999;
12
+ --brand: #FFCE27;
13
+ --brand-dim: rgba(255, 206, 39, 0.15);
14
+ --border: #2d2d30;
15
+ --radius: 12px;
16
+ --radius-sm: 8px;
17
+ --max-width: 1400px;
18
+ --nav-height: 64px;
19
+ --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
20
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
21
+ }
22
+
23
+ /* ---- Reset ---- */
24
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
25
+
26
+ html {
27
+ scroll-behavior: smooth;
28
+ scroll-padding-top: var(--nav-height);
29
+ }
30
+
31
+ body {
32
+ background: var(--bg);
33
+ color: var(--text);
34
+ font-family: var(--font-sans);
35
+ line-height: 1.6;
36
+ -webkit-font-smoothing: antialiased;
37
+ }
38
+
39
+ a { color: var(--brand); text-decoration: none; }
40
+ a:hover { text-decoration: underline; }
41
+
42
+ img { max-width: 100%; height: auto; display: block; }
43
+
44
+ ul { list-style: none; }
45
+
46
+ /* ---- Buttons ---- */
47
+ .btn {
48
+ display: inline-flex;
49
+ align-items: center;
50
+ gap: 8px;
51
+ padding: 12px 28px;
52
+ border-radius: var(--radius-sm);
53
+ font-size: 1rem;
54
+ font-weight: 600;
55
+ text-decoration: none;
56
+ transition: all 0.2s ease;
57
+ cursor: pointer;
58
+ border: none;
59
+ }
60
+
61
+ .btn-primary {
62
+ background: var(--brand);
63
+ color: #000;
64
+ }
65
+ .btn-primary:hover {
66
+ background: #ffe066;
67
+ text-decoration: none;
68
+ transform: translateY(-1px);
69
+ box-shadow: 0 4px 20px var(--brand-dim);
70
+ }
71
+
72
+ .btn-secondary {
73
+ background: var(--surface-2);
74
+ color: var(--text);
75
+ border: 1px solid var(--border);
76
+ }
77
+ .btn-secondary:hover {
78
+ background: var(--surface-3);
79
+ text-decoration: none;
80
+ transform: translateY(-1px);
81
+ }
82
+
83
+ .btn-secondary svg {
84
+ width: 20px;
85
+ height: 20px;
86
+ }
87
+
88
+ /* ---- Nav ---- */
89
+ .nav {
90
+ position: fixed;
91
+ top: 0;
92
+ left: 0;
93
+ right: 0;
94
+ z-index: 100;
95
+ height: var(--nav-height);
96
+ transition: background 0.3s ease, backdrop-filter 0.3s ease;
97
+ }
98
+
99
+ .nav.scrolled {
100
+ background: rgba(10, 10, 10, 0.85);
101
+ backdrop-filter: blur(12px);
102
+ -webkit-backdrop-filter: blur(12px);
103
+ border-bottom: 1px solid var(--border);
104
+ }
105
+
106
+ .nav-inner {
107
+ max-width: var(--max-width);
108
+ margin: 0 auto;
109
+ padding: 0 24px;
110
+ height: 100%;
111
+ display: flex;
112
+ align-items: center;
113
+ justify-content: space-between;
114
+ }
115
+
116
+ .nav-logo img { height: 32px; }
117
+
118
+ .nav-links {
119
+ display: flex;
120
+ align-items: center;
121
+ gap: 32px;
122
+ }
123
+
124
+ .nav-links a {
125
+ color: var(--text-secondary);
126
+ font-size: 0.9rem;
127
+ font-weight: 500;
128
+ transition: color 0.2s;
129
+ }
130
+ .nav-links a:hover {
131
+ color: var(--text);
132
+ text-decoration: none;
133
+ }
134
+
135
+ .nav-github {
136
+ display: inline-flex;
137
+ align-items: center;
138
+ gap: 6px;
139
+ }
140
+
141
+ .nav-download {
142
+ color: var(--brand) !important;
143
+ font-weight: 600;
144
+ }
145
+
146
+ .nav-toggle {
147
+ display: none;
148
+ flex-direction: column;
149
+ gap: 5px;
150
+ background: none;
151
+ border: none;
152
+ cursor: pointer;
153
+ padding: 4px;
154
+ }
155
+ .nav-toggle span {
156
+ width: 24px;
157
+ height: 2px;
158
+ background: var(--text);
159
+ transition: all 0.3s;
160
+ border-radius: 1px;
161
+ }
162
+
163
+ /* ---- Hero ---- */
164
+ .hero {
165
+ padding: var(--nav-height) 48px 0;
166
+ max-width: var(--max-width);
167
+ margin: 0 auto;
168
+ display: grid;
169
+ grid-template-columns: 1fr 1.4fr;
170
+ gap: 60px;
171
+ align-items: center;
172
+ min-height: 100vh;
173
+ }
174
+
175
+ .hero-content {
176
+ text-align: left;
177
+ }
178
+
179
+ .hero-headline {
180
+ font-size: 3.75rem;
181
+ font-weight: 800;
182
+ line-height: 1.1;
183
+ letter-spacing: -0.03em;
184
+ margin-bottom: 20px;
185
+ }
186
+
187
+ .hero-tagline {
188
+ font-size: 1.2rem;
189
+ color: var(--text-secondary);
190
+ margin-bottom: 32px;
191
+ line-height: 1.6;
192
+ }
193
+
194
+ .hero-cta {
195
+ display: flex;
196
+ gap: 16px;
197
+ flex-wrap: wrap;
198
+ margin-bottom: 12px;
199
+ }
200
+
201
+ .hero-other-platforms {
202
+ font-size: 0.85rem;
203
+ color: var(--text-secondary);
204
+ display: inline-block;
205
+ margin-bottom: 24px;
206
+ }
207
+ .hero-other-platforms:hover {
208
+ color: var(--text);
209
+ }
210
+
211
+ .hero-install {
212
+ display: inline-flex;
213
+ align-items: center;
214
+ gap: 12px;
215
+ background: var(--surface-2);
216
+ border: 1px solid var(--border);
217
+ border-radius: 6px;
218
+ padding: 10px 16px;
219
+ }
220
+
221
+ .hero-install code {
222
+ font-family: var(--font-mono);
223
+ font-size: 0.85rem;
224
+ color: var(--text-secondary);
225
+ }
226
+
227
+ .copy-btn {
228
+ display: flex;
229
+ align-items: center;
230
+ background: none;
231
+ border: none;
232
+ color: var(--text);
233
+ cursor: pointer;
234
+ padding: 2px;
235
+ transition: color 0.2s;
236
+ }
237
+ .copy-btn:hover { color: var(--brand); }
238
+ .copy-btn .check-icon { display: none; }
239
+ .copy-btn.copied .copy-icon { display: none; }
240
+ .copy-btn.copied .check-icon { display: block; color: var(--brand); }
241
+
242
+ /* ---- Showcase (Video/Screenshot Player) ---- */
243
+ .showcase {
244
+ max-width: 100%;
245
+ }
246
+
247
+ .showcase-tabs {
248
+ display: flex;
249
+ gap: 4px;
250
+ justify-content: center;
251
+ flex-wrap: wrap;
252
+ margin-top: 16px;
253
+ }
254
+
255
+ .showcase-tab {
256
+ background: var(--surface-1);
257
+ color: var(--text-secondary);
258
+ border: 1px solid var(--border);
259
+ padding: 8px 16px;
260
+ border-radius: 999px;
261
+ font-size: 0.85rem;
262
+ font-weight: 500;
263
+ cursor: pointer;
264
+ transition: all 0.2s;
265
+ font-family: var(--font-sans);
266
+ }
267
+ .showcase-tab:hover {
268
+ color: var(--text);
269
+ border-color: var(--text-secondary);
270
+ }
271
+ .showcase-tab.active {
272
+ background: var(--brand);
273
+ color: #000;
274
+ border-color: var(--brand);
275
+ }
276
+
277
+ .showcase-window {
278
+ border-radius: var(--radius);
279
+ overflow: hidden;
280
+ }
281
+
282
+ /* ---- Window Frame ---- */
283
+ .window-frame {
284
+ background: var(--surface-1);
285
+ border: 1px solid var(--border);
286
+ border-radius: var(--radius);
287
+ overflow: hidden;
288
+ }
289
+
290
+ .window-titlebar {
291
+ display: flex;
292
+ align-items: center;
293
+ gap: 8px;
294
+ padding: 12px 16px;
295
+ background: var(--surface-2);
296
+ border-bottom: 1px solid var(--border);
297
+ }
298
+
299
+ .window-dot {
300
+ width: 12px;
301
+ height: 12px;
302
+ border-radius: 50%;
303
+ }
304
+ .window-dot.red { background: #ff5f57; }
305
+ .window-dot.yellow { background: #febc2e; }
306
+ .window-dot.green { background: #28c840; }
307
+
308
+ .window-content {
309
+ position: relative;
310
+ background: var(--surface-1);
311
+ }
312
+
313
+ .window-content img {
314
+ width: 100%;
315
+ display: block;
316
+ }
317
+
318
+ /* ---- Showcase Panels ---- */
319
+ .showcase-panel {
320
+ display: none;
321
+ position: relative;
322
+ }
323
+ .showcase-panel.active {
324
+ display: block;
325
+ }
326
+
327
+ .showcase-video {
328
+ width: 100%;
329
+ display: none;
330
+ }
331
+ .showcase-video.loaded {
332
+ display: block;
333
+ }
334
+
335
+ .showcase-img {
336
+ width: 100%;
337
+ }
338
+ .showcase-video.loaded + .showcase-img {
339
+ display: none;
340
+ }
341
+
342
+ /* ---- Features ---- */
343
+ .features {
344
+ padding: 80px 24px;
345
+ max-width: var(--max-width);
346
+ margin: 0 auto;
347
+ }
348
+
349
+ .feature-row {
350
+ display: grid;
351
+ grid-template-columns: 1fr 1.2fr;
352
+ gap: 60px;
353
+ align-items: center;
354
+ margin-bottom: 120px;
355
+ }
356
+
357
+ .feature-row:last-child {
358
+ margin-bottom: 0;
359
+ }
360
+
361
+ .feature-row.reverse {
362
+ grid-template-columns: 1.2fr 1fr;
363
+ }
364
+ .feature-row.reverse .feature-text {
365
+ order: 2;
366
+ }
367
+ .feature-row.reverse .feature-media {
368
+ order: 1;
369
+ }
370
+
371
+ .feature-text h2 {
372
+ font-size: 2rem;
373
+ font-weight: 700;
374
+ margin-bottom: 16px;
375
+ }
376
+
377
+ .feature-text p {
378
+ color: var(--text-secondary);
379
+ margin-bottom: 24px;
380
+ line-height: 1.7;
381
+ }
382
+
383
+ .feature-list li {
384
+ position: relative;
385
+ padding-left: 24px;
386
+ margin-bottom: 8px;
387
+ color: var(--text-secondary);
388
+ }
389
+ .feature-list li::before {
390
+ content: '';
391
+ position: absolute;
392
+ left: 0;
393
+ top: 10px;
394
+ width: 8px;
395
+ height: 8px;
396
+ background: var(--brand);
397
+ border-radius: 50%;
398
+ }
399
+
400
+ .feature-media .window-frame {
401
+ box-shadow: 0 8px 40px rgba(0, 0, 0, 0.4);
402
+ }
403
+
404
+ /* ---- MCP Setup ---- */
405
+ .mcp-setup {
406
+ padding: 80px 24px;
407
+ background: var(--surface-1);
408
+ border-top: 1px solid var(--border);
409
+ border-bottom: 1px solid var(--border);
410
+ }
411
+
412
+ .mcp-setup-inner {
413
+ max-width: 720px;
414
+ margin: 0 auto;
415
+ text-align: center;
416
+ }
417
+
418
+ .mcp-setup-inner h2 {
419
+ font-size: 2rem;
420
+ font-weight: 700;
421
+ margin-bottom: 12px;
422
+ }
423
+
424
+ .mcp-setup-inner > p {
425
+ color: var(--text-secondary);
426
+ margin-bottom: 32px;
427
+ }
428
+
429
+ .terminal-block {
430
+ background: var(--surface-2);
431
+ border: 1px solid var(--border);
432
+ border-radius: var(--radius);
433
+ overflow: hidden;
434
+ text-align: left;
435
+ }
436
+
437
+ .terminal-titlebar {
438
+ display: flex;
439
+ align-items: center;
440
+ gap: 8px;
441
+ padding: 12px 16px;
442
+ background: var(--surface-3);
443
+ border-bottom: 1px solid var(--border);
444
+ }
445
+
446
+ .terminal-title {
447
+ margin-left: 8px;
448
+ font-size: 0.8rem;
449
+ color: var(--text-secondary);
450
+ font-family: var(--font-mono);
451
+ }
452
+
453
+ .terminal-code {
454
+ padding: 24px;
455
+ overflow-x: auto;
456
+ font-family: var(--font-mono);
457
+ font-size: 0.9rem;
458
+ line-height: 1.7;
459
+ color: var(--text);
460
+ }
461
+
462
+ /* ---- Download ---- */
463
+ .download {
464
+ padding: 80px 24px;
465
+ max-width: var(--max-width);
466
+ margin: 0 auto;
467
+ }
468
+
469
+ .download-inner {
470
+ text-align: center;
471
+ }
472
+
473
+ .download-inner h2 {
474
+ font-size: 2rem;
475
+ font-weight: 700;
476
+ margin-bottom: 8px;
477
+ }
478
+
479
+ .download-version {
480
+ color: var(--text-secondary);
481
+ font-family: var(--font-mono);
482
+ font-size: 0.9rem;
483
+ margin-bottom: 32px;
484
+ }
485
+
486
+ .download-primary {
487
+ margin-bottom: 48px;
488
+ }
489
+
490
+ .download-primary .btn {
491
+ font-size: 1.1rem;
492
+ padding: 16px 36px;
493
+ }
494
+
495
+ .download-primary .download-command {
496
+ margin-top: 16px;
497
+ background: var(--surface-2);
498
+ border: 1px solid var(--border);
499
+ border-radius: var(--radius-sm);
500
+ padding: 12px 20px;
501
+ display: inline-block;
502
+ font-family: var(--font-mono);
503
+ font-size: 0.9rem;
504
+ color: var(--text);
505
+ user-select: all;
506
+ }
507
+
508
+ .download-alternatives h3 {
509
+ font-size: 1.1rem;
510
+ font-weight: 600;
511
+ color: var(--text-secondary);
512
+ margin-bottom: 24px;
513
+ }
514
+
515
+ .install-grid {
516
+ display: grid;
517
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
518
+ gap: 16px;
519
+ margin-bottom: 48px;
520
+ text-align: left;
521
+ }
522
+
523
+ .install-card {
524
+ background: var(--surface-1);
525
+ border: 1px solid var(--border);
526
+ border-radius: var(--radius-sm);
527
+ padding: 20px;
528
+ transition: border-color 0.2s;
529
+ }
530
+ .install-card:hover {
531
+ border-color: var(--text-secondary);
532
+ }
533
+
534
+ .install-card h4 {
535
+ font-size: 0.9rem;
536
+ font-weight: 600;
537
+ margin-bottom: 12px;
538
+ }
539
+
540
+ .code-inline {
541
+ background: var(--surface-2);
542
+ border-radius: 6px;
543
+ padding: 10px 14px;
544
+ overflow-x: auto;
545
+ }
546
+
547
+ .code-inline code {
548
+ font-family: var(--font-mono);
549
+ font-size: 0.82rem;
550
+ color: var(--brand);
551
+ white-space: nowrap;
552
+ }
553
+
554
+ .download-direct {
555
+ text-align: center;
556
+ }
557
+
558
+ .direct-links {
559
+ display: flex;
560
+ gap: 12px;
561
+ justify-content: center;
562
+ flex-wrap: wrap;
563
+ margin-top: 16px;
564
+ }
565
+
566
+ .direct-links a {
567
+ font-family: var(--font-mono);
568
+ font-size: 0.82rem;
569
+ color: var(--text-secondary);
570
+ padding: 8px 16px;
571
+ border: 1px solid var(--border);
572
+ border-radius: 6px;
573
+ transition: all 0.2s;
574
+ }
575
+ .direct-links a:hover {
576
+ color: var(--brand);
577
+ border-color: var(--brand);
578
+ text-decoration: none;
579
+ }
580
+
581
+ /* ---- Footer ---- */
582
+ .footer {
583
+ padding: 40px 24px;
584
+ border-top: 1px solid var(--border);
585
+ }
586
+
587
+ .footer-inner {
588
+ max-width: var(--max-width);
589
+ margin: 0 auto;
590
+ display: flex;
591
+ align-items: center;
592
+ justify-content: space-between;
593
+ }
594
+
595
+ .footer-brand {
596
+ display: flex;
597
+ align-items: center;
598
+ gap: 16px;
599
+ }
600
+
601
+ .footer-brand img { height: 24px; }
602
+
603
+ .footer-copyright {
604
+ color: var(--text-secondary);
605
+ font-size: 0.85rem;
606
+ }
607
+
608
+ .footer-links {
609
+ display: flex;
610
+ gap: 24px;
611
+ }
612
+
613
+ .footer-links a {
614
+ color: var(--text-secondary);
615
+ font-size: 0.85rem;
616
+ transition: color 0.2s;
617
+ }
618
+ .footer-links a:hover {
619
+ color: var(--text);
620
+ text-decoration: none;
621
+ }
622
+
623
+ /* ---- Reveal Animation ---- */
624
+ .reveal {
625
+ opacity: 0;
626
+ transform: translateY(30px);
627
+ transition: opacity 0.6s ease, transform 0.6s ease;
628
+ }
629
+ .reveal.visible {
630
+ opacity: 1;
631
+ transform: translateY(0);
632
+ }
633
+
634
+ @media (prefers-reduced-motion: reduce) {
635
+ .reveal {
636
+ opacity: 1;
637
+ transform: none;
638
+ transition: none;
639
+ }
640
+ }
641
+
642
+ /* ==========================================
643
+ Responsive
644
+ ========================================== */
645
+
646
+ /* Tablet */
647
+ @media (max-width: 1024px) {
648
+ .feature-row,
649
+ .feature-row.reverse {
650
+ grid-template-columns: 1fr;
651
+ gap: 40px;
652
+ }
653
+ .feature-row.reverse .feature-text { order: 1; }
654
+ .feature-row.reverse .feature-media { order: 2; }
655
+
656
+ .feature-row {
657
+ margin-bottom: 80px;
658
+ }
659
+
660
+ .hero {
661
+ grid-template-columns: 1fr;
662
+ text-align: center;
663
+ padding-left: 24px;
664
+ padding-right: 24px;
665
+ }
666
+ .hero-content { text-align: center; }
667
+ .hero-cta { justify-content: center; }
668
+ .hero-install { margin: 0 auto; }
669
+ .hero-headline { font-size: 3rem; }
670
+ .hero-tagline { font-size: 1.15rem; }
671
+ }
672
+
673
+ /* Mobile */
674
+ @media (max-width: 768px) {
675
+ .nav-toggle { display: flex; }
676
+
677
+ .nav-links {
678
+ display: none;
679
+ position: absolute;
680
+ top: var(--nav-height);
681
+ left: 0;
682
+ right: 0;
683
+ flex-direction: column;
684
+ background: rgba(10, 10, 10, 0.95);
685
+ backdrop-filter: blur(12px);
686
+ -webkit-backdrop-filter: blur(12px);
687
+ padding: 24px;
688
+ gap: 20px;
689
+ border-bottom: 1px solid var(--border);
690
+ }
691
+ .nav-links.open { display: flex; }
692
+
693
+ .nav-toggle.open span:nth-child(1) {
694
+ transform: rotate(45deg) translate(5px, 5px);
695
+ }
696
+ .nav-toggle.open span:nth-child(2) { opacity: 0; }
697
+ .nav-toggle.open span:nth-child(3) {
698
+ transform: rotate(-45deg) translate(5px, -5px);
699
+ }
700
+
701
+ .hero {
702
+ padding: calc(var(--nav-height) + 40px) 16px 60px;
703
+ min-height: auto;
704
+ }
705
+ .hero-headline { font-size: 2.25rem; }
706
+ .hero-tagline { font-size: 1.05rem; }
707
+ .hero-install code { font-size: 0.75rem; }
708
+
709
+ .showcase-tabs {
710
+ gap: 6px;
711
+ padding: 0 8px;
712
+ }
713
+ .showcase-tab {
714
+ padding: 6px 12px;
715
+ font-size: 0.78rem;
716
+ }
717
+
718
+ .feature-text h2 { font-size: 1.5rem; }
719
+ .features { padding: 60px 16px; }
720
+ .feature-row { margin-bottom: 60px; }
721
+
722
+ .mcp-setup { padding: 60px 16px; }
723
+ .mcp-setup-inner h2 { font-size: 1.5rem; }
724
+
725
+ .download { padding: 60px 16px; }
726
+ .download-inner h2 { font-size: 1.5rem; }
727
+ .install-grid { grid-template-columns: 1fr; }
728
+
729
+ .footer-inner {
730
+ flex-direction: column;
731
+ gap: 20px;
732
+ text-align: center;
733
+ }
734
+ .footer-links { flex-wrap: wrap; justify-content: center; }
735
+ }