opensteer 0.9.0 → 0.9.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 (38) hide show
  1. package/dist/chunk-4LP7QP2O.js +4336 -0
  2. package/dist/chunk-4LP7QP2O.js.map +1 -0
  3. package/dist/{chunk-656MQUSM.js → chunk-6PGXWW3X.js} +4787 -9519
  4. package/dist/chunk-6PGXWW3X.js.map +1 -0
  5. package/dist/chunk-BMPUL66S.js +1170 -0
  6. package/dist/chunk-BMPUL66S.js.map +1 -0
  7. package/dist/{chunk-OIKLSFXA.js → chunk-L4FWHBQJ.js} +4 -3
  8. package/dist/chunk-L4FWHBQJ.js.map +1 -0
  9. package/dist/chunk-Z53HNZ7Z.js +1800 -0
  10. package/dist/chunk-Z53HNZ7Z.js.map +1 -0
  11. package/dist/cli/bin.cjs +3050 -281
  12. package/dist/cli/bin.cjs.map +1 -1
  13. package/dist/cli/bin.js +124 -7
  14. package/dist/cli/bin.js.map +1 -1
  15. package/dist/index.cjs +918 -263
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.cts +1 -0
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.js +4 -2
  20. package/dist/local-view/public/assets/app.css +770 -0
  21. package/dist/local-view/public/assets/app.js +2053 -0
  22. package/dist/local-view/public/index.html +235 -0
  23. package/dist/local-view/serve-entry.cjs +7436 -0
  24. package/dist/local-view/serve-entry.cjs.map +1 -0
  25. package/dist/local-view/serve-entry.d.cts +1 -0
  26. package/dist/local-view/serve-entry.d.ts +1 -0
  27. package/dist/local-view/serve-entry.js +23 -0
  28. package/dist/local-view/serve-entry.js.map +1 -0
  29. package/dist/opensteer-KZCRP425.js +6 -0
  30. package/dist/{opensteer-LKX3233A.js.map → opensteer-KZCRP425.js.map} +1 -1
  31. package/dist/session-control-VGBFOH3Y.js +39 -0
  32. package/dist/session-control-VGBFOH3Y.js.map +1 -0
  33. package/package.json +8 -8
  34. package/skills/README.md +3 -0
  35. package/skills/opensteer/SKILL.md +229 -48
  36. package/dist/chunk-656MQUSM.js.map +0 -1
  37. package/dist/chunk-OIKLSFXA.js.map +0 -1
  38. package/dist/opensteer-LKX3233A.js +0 -4
@@ -0,0 +1,770 @@
1
+ /* ─── Design Tokens (matching Opensteer Cloud) ─── */
2
+
3
+ :root {
4
+ color-scheme: dark;
5
+ --background: #000000;
6
+ --foreground: #ffffff;
7
+ --surface: #141414;
8
+ --surface-elevated: #1e1e1e;
9
+ --surface-raised: #282828;
10
+ --muted: rgba(255, 255, 255, 0.05);
11
+ --muted-foreground: #a0a0a0;
12
+ --border: rgba(255, 255, 255, 0.08);
13
+ --border-subtle: rgba(255, 255, 255, 0.04);
14
+ --border-strong: rgba(255, 255, 255, 0.12);
15
+ --accent: #ffffff;
16
+ --accent-foreground: #000000;
17
+ --destructive: #ef4444;
18
+ --ring: rgba(255, 255, 255, 0.4);
19
+ }
20
+
21
+ /* ─── Reset ─── */
22
+
23
+ *,
24
+ *::before,
25
+ *::after {
26
+ box-sizing: border-box;
27
+ }
28
+
29
+ html,
30
+ body {
31
+ margin: 0;
32
+ height: 100%;
33
+ min-height: 100%;
34
+ overflow: hidden;
35
+ background: var(--background);
36
+ color: var(--foreground);
37
+ font-family:
38
+ Inter,
39
+ ui-sans-serif,
40
+ system-ui,
41
+ -apple-system,
42
+ BlinkMacSystemFont,
43
+ "Segoe UI",
44
+ sans-serif;
45
+ font-size: 14px;
46
+ line-height: 1.5;
47
+ -webkit-font-smoothing: antialiased;
48
+ -moz-osx-font-smoothing: grayscale;
49
+ }
50
+
51
+ body {
52
+ min-height: 100vh;
53
+ }
54
+
55
+ button,
56
+ input {
57
+ font: inherit;
58
+ }
59
+
60
+ button {
61
+ cursor: pointer;
62
+ }
63
+
64
+ [hidden] {
65
+ display: none !important;
66
+ }
67
+
68
+ .sr-only {
69
+ position: absolute;
70
+ width: 1px;
71
+ height: 1px;
72
+ padding: 0;
73
+ margin: -1px;
74
+ overflow: hidden;
75
+ clip: rect(0, 0, 0, 0);
76
+ white-space: nowrap;
77
+ border: 0;
78
+ }
79
+
80
+ /* ─── Scrollbar ─── */
81
+
82
+ ::-webkit-scrollbar {
83
+ width: 6px;
84
+ height: 6px;
85
+ }
86
+
87
+ ::-webkit-scrollbar-track {
88
+ background: transparent;
89
+ }
90
+
91
+ ::-webkit-scrollbar-thumb {
92
+ background: var(--border-strong);
93
+ border-radius: 3px;
94
+ }
95
+
96
+ ::-webkit-scrollbar-thumb:hover {
97
+ background: rgba(255, 255, 255, 0.2);
98
+ }
99
+
100
+ /* ─── Animations ─── */
101
+
102
+ @keyframes pulse-dot {
103
+ 0%,
104
+ 100% {
105
+ opacity: 1;
106
+ }
107
+ 50% {
108
+ opacity: 0.4;
109
+ }
110
+ }
111
+
112
+ @keyframes fade-in {
113
+ from {
114
+ opacity: 0;
115
+ }
116
+ to {
117
+ opacity: 1;
118
+ }
119
+ }
120
+
121
+ /* ─── App Shell ─── */
122
+
123
+ .app-shell {
124
+ height: 100vh;
125
+ min-height: 0;
126
+ display: flex;
127
+ overflow: hidden;
128
+ }
129
+
130
+ /* ─── Sidebar ─── */
131
+
132
+ .sidebar {
133
+ width: 280px;
134
+ flex-shrink: 0;
135
+ display: flex;
136
+ flex-direction: column;
137
+ overflow: hidden;
138
+ border-right: 1px solid var(--border);
139
+ background: var(--surface);
140
+ }
141
+
142
+ .brand-block {
143
+ display: flex;
144
+ align-items: center;
145
+ justify-content: space-between;
146
+ gap: 12px;
147
+ padding: 16px 16px 14px;
148
+ border-bottom: 1px solid var(--border);
149
+ }
150
+
151
+ .brand-row {
152
+ display: inline-flex;
153
+ align-items: center;
154
+ gap: 8px;
155
+ }
156
+
157
+ .brand-icon {
158
+ display: block;
159
+ flex-shrink: 0;
160
+ width: 20px;
161
+ height: 20px;
162
+ object-fit: contain;
163
+ object-position: center;
164
+ }
165
+
166
+ .brand-name {
167
+ font-size: 14px;
168
+ font-weight: 600;
169
+ color: var(--foreground);
170
+ letter-spacing: -0.01em;
171
+ }
172
+
173
+ .brand-badge {
174
+ font-size: 10px;
175
+ font-weight: 500;
176
+ color: var(--muted-foreground);
177
+ background: var(--muted);
178
+ border: 1px solid var(--border);
179
+ border-radius: 4px;
180
+ padding: 1px 6px;
181
+ text-transform: uppercase;
182
+ letter-spacing: 0.04em;
183
+ }
184
+
185
+ .local-view-toggle {
186
+ flex-shrink: 0;
187
+ height: 26px;
188
+ border-radius: 6px;
189
+ border: 1px solid var(--border-strong);
190
+ background: transparent;
191
+ color: var(--muted-foreground);
192
+ padding: 0 9px;
193
+ font-size: 11px;
194
+ font-weight: 500;
195
+ white-space: nowrap;
196
+ transition:
197
+ background 150ms ease,
198
+ border-color 150ms ease,
199
+ color 150ms ease,
200
+ opacity 150ms ease;
201
+ }
202
+
203
+ .local-view-toggle:hover:not(:disabled) {
204
+ background: var(--muted);
205
+ border-color: rgba(255, 255, 255, 0.2);
206
+ color: var(--foreground);
207
+ }
208
+
209
+ .local-view-toggle:disabled {
210
+ cursor: default;
211
+ opacity: 0.6;
212
+ }
213
+
214
+ /* ─── Sidebar Tabs ─── */
215
+
216
+ .sidebar-tab-bar {
217
+ padding: 12px 16px;
218
+ border-bottom: 1px solid var(--border);
219
+ }
220
+
221
+ .sidebar-tab-bar-inner {
222
+ display: flex;
223
+ border-radius: 8px;
224
+ border: 1px solid rgba(255, 255, 255, 0.06);
225
+ background: var(--surface-elevated);
226
+ padding: 3px;
227
+ }
228
+
229
+ .sidebar-tab {
230
+ flex: 1;
231
+ border: none;
232
+ border-radius: 6px;
233
+ padding: 6px 12px;
234
+ font-size: 12px;
235
+ font-weight: 500;
236
+ color: var(--muted-foreground);
237
+ background: transparent;
238
+ transition: all 200ms;
239
+ }
240
+
241
+ .sidebar-tab:hover {
242
+ background: rgba(255, 255, 255, 0.03);
243
+ color: var(--foreground);
244
+ }
245
+
246
+ .sidebar-tab.is-active {
247
+ background: var(--surface);
248
+ color: var(--foreground);
249
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
250
+ }
251
+
252
+ /* ─── Session List ─── */
253
+
254
+ .sidebar-scroll {
255
+ flex: 1;
256
+ min-height: 0;
257
+ overflow-y: auto;
258
+ }
259
+
260
+ .session-list {
261
+ display: flex;
262
+ flex-direction: column;
263
+ }
264
+
265
+ .session-item {
266
+ position: relative;
267
+ width: 100%;
268
+ display: flex;
269
+ flex-direction: column;
270
+ gap: 6px;
271
+ border: none;
272
+ border-bottom: 1px solid var(--border-subtle);
273
+ border-left: 3px solid transparent;
274
+ padding: 12px 16px 12px 13px;
275
+ text-align: left;
276
+ background: transparent;
277
+ color: inherit;
278
+ transition:
279
+ background 150ms ease,
280
+ border-color 150ms ease;
281
+ }
282
+
283
+ .session-item:hover {
284
+ background: var(--muted);
285
+ }
286
+
287
+ .session-item[data-active="true"] {
288
+ background: rgba(255, 255, 255, 0.03);
289
+ border-left-color: var(--accent);
290
+ }
291
+
292
+ .session-row {
293
+ display: flex;
294
+ align-items: center;
295
+ justify-content: space-between;
296
+ gap: 8px;
297
+ }
298
+
299
+ .session-title {
300
+ font-size: 13px;
301
+ font-weight: 500;
302
+ color: var(--foreground);
303
+ overflow: hidden;
304
+ text-overflow: ellipsis;
305
+ white-space: nowrap;
306
+ min-width: 0;
307
+ }
308
+
309
+ .session-item[data-active="true"] .session-title {
310
+ color: var(--accent);
311
+ }
312
+
313
+ .session-dot {
314
+ flex-shrink: 0;
315
+ width: 6px;
316
+ height: 6px;
317
+ border-radius: 50%;
318
+ background: #28c840;
319
+ animation: pulse-dot 1.5s ease-in-out infinite;
320
+ }
321
+
322
+ .session-engine {
323
+ display: inline-flex;
324
+ align-items: center;
325
+ gap: 4px;
326
+ font-size: 10px;
327
+ font-weight: 500;
328
+ color: #4ade80;
329
+ background: rgba(74, 222, 128, 0.1);
330
+ border-radius: 9999px;
331
+ padding: 2px 8px;
332
+ white-space: nowrap;
333
+ flex-shrink: 0;
334
+ }
335
+
336
+ .session-info {
337
+ font-size: 11px;
338
+ color: var(--muted-foreground);
339
+ font-family: ui-monospace, "SF Mono", "Cascadia Code", "Segoe UI Mono", monospace;
340
+ min-width: 0;
341
+ overflow: hidden;
342
+ text-overflow: ellipsis;
343
+ white-space: nowrap;
344
+ }
345
+
346
+ .session-path {
347
+ display: flex;
348
+ align-items: center;
349
+ gap: 4px;
350
+ font-size: 10px;
351
+ color: var(--muted-foreground);
352
+ opacity: 0.5;
353
+ overflow: hidden;
354
+ text-overflow: ellipsis;
355
+ white-space: nowrap;
356
+ }
357
+
358
+ .session-list-empty {
359
+ display: flex;
360
+ flex-direction: column;
361
+ align-items: center;
362
+ justify-content: center;
363
+ gap: 10px;
364
+ padding: 40px 16px;
365
+ color: var(--muted-foreground);
366
+ font-size: 12px;
367
+ text-align: center;
368
+ }
369
+
370
+ /* ─── Main Shell ─── */
371
+
372
+ .main-shell {
373
+ flex: 1;
374
+ min-width: 0;
375
+ min-height: 0;
376
+ display: flex;
377
+ flex-direction: column;
378
+ background: var(--background);
379
+ }
380
+
381
+ .viewer-area {
382
+ flex: 1;
383
+ display: flex;
384
+ align-items: flex-start;
385
+ justify-content: center;
386
+ padding: 20px;
387
+ min-height: 0;
388
+ overflow: hidden;
389
+ }
390
+
391
+ /* ─── Browser Frame ─── */
392
+
393
+ .browser-frame {
394
+ --browser-stream-aspect: 1.6;
395
+ flex: 0 1 auto;
396
+ width: var(--browser-frame-width, 100%);
397
+ max-width: 100%;
398
+ display: flex;
399
+ flex-direction: column;
400
+ border-radius: 12px;
401
+ overflow: hidden;
402
+ border: 1px solid var(--border-strong);
403
+ background: var(--surface-elevated);
404
+ box-shadow:
405
+ 0 25px 50px -12px rgba(0, 0, 0, 0.5),
406
+ 0 0 0 1px rgba(255, 255, 255, 0.03);
407
+ }
408
+
409
+ /* ─── Browser Chrome ─── */
410
+
411
+ .browser-chrome {
412
+ background: var(--surface-raised);
413
+ flex-shrink: 0;
414
+ }
415
+
416
+ .chrome-top-row {
417
+ display: flex;
418
+ align-items: center;
419
+ gap: 12px;
420
+ padding: 10px 12px 6px;
421
+ }
422
+
423
+ .window-dots {
424
+ display: flex;
425
+ gap: 6px;
426
+ align-items: center;
427
+ flex-shrink: 0;
428
+ }
429
+
430
+ .wdot {
431
+ width: 10px;
432
+ height: 10px;
433
+ border-radius: 50%;
434
+ }
435
+
436
+ .wdot-close {
437
+ background: #ff5f57;
438
+ }
439
+
440
+ .wdot-min {
441
+ background: #febc2e;
442
+ }
443
+
444
+ .wdot-max {
445
+ background: #28c840;
446
+ }
447
+
448
+ /* ─── Chrome Navigation ─── */
449
+
450
+ .chrome-nav {
451
+ display: flex;
452
+ gap: 2px;
453
+ align-items: center;
454
+ flex-shrink: 0;
455
+ }
456
+
457
+ .chrome-nav-btn {
458
+ display: inline-flex;
459
+ align-items: center;
460
+ justify-content: center;
461
+ width: 24px;
462
+ height: 24px;
463
+ border-radius: 6px;
464
+ border: none;
465
+ background: transparent;
466
+ color: var(--muted-foreground);
467
+ padding: 0;
468
+ transition: all 150ms;
469
+ }
470
+
471
+ .chrome-nav-btn:hover {
472
+ background: var(--muted);
473
+ color: var(--foreground);
474
+ }
475
+
476
+ .chrome-nav-btn:active {
477
+ background: var(--border-strong);
478
+ }
479
+
480
+ /* ─── Chrome Tabs ─── */
481
+
482
+ .chrome-tabs {
483
+ display: flex;
484
+ gap: 2px;
485
+ flex: 1;
486
+ min-width: 0;
487
+ overflow-x: auto;
488
+ scrollbar-width: none;
489
+ }
490
+
491
+ .chrome-tabs::-webkit-scrollbar {
492
+ display: none;
493
+ }
494
+
495
+ .chrome-tab-chip {
496
+ display: inline-flex;
497
+ align-items: center;
498
+ min-width: 44px;
499
+ max-width: 208px;
500
+ border-radius: 4px;
501
+ overflow: hidden;
502
+ color: var(--muted-foreground);
503
+ background: transparent;
504
+ transition:
505
+ background 150ms ease,
506
+ color 150ms ease;
507
+ }
508
+
509
+ .chrome-tab-chip:hover {
510
+ color: rgba(255, 255, 255, 0.8);
511
+ }
512
+
513
+ .chrome-tab-chip[data-active="true"] {
514
+ background: var(--border-strong);
515
+ color: var(--foreground);
516
+ }
517
+
518
+ .chrome-tab {
519
+ display: inline-flex;
520
+ align-items: center;
521
+ gap: 6px;
522
+ flex: 1 1 auto;
523
+ min-width: 0;
524
+ border: none;
525
+ border-radius: 0;
526
+ padding: 3px 6px 3px 10px;
527
+ font-size: 11px;
528
+ color: inherit;
529
+ background: transparent;
530
+ white-space: nowrap;
531
+ }
532
+
533
+ .chrome-tab:hover {
534
+ color: inherit;
535
+ }
536
+
537
+ .chrome-tab[data-active="true"] {
538
+ color: inherit;
539
+ }
540
+
541
+ .chrome-tab-title {
542
+ min-width: 0;
543
+ overflow: hidden;
544
+ text-overflow: ellipsis;
545
+ white-space: nowrap;
546
+ }
547
+
548
+ .chrome-tab-close {
549
+ display: inline-flex;
550
+ align-items: center;
551
+ justify-content: center;
552
+ width: 20px;
553
+ height: 20px;
554
+ border: none;
555
+ border-radius: 4px;
556
+ background: transparent;
557
+ color: inherit;
558
+ font-size: 14px;
559
+ line-height: 1;
560
+ flex-shrink: 0;
561
+ margin-right: 2px;
562
+ padding: 0;
563
+ transition: all 150ms;
564
+ }
565
+
566
+ .chrome-tab-close:hover {
567
+ background: var(--border-strong);
568
+ color: var(--foreground);
569
+ }
570
+
571
+ /* ─── Chrome Status ─── */
572
+
573
+ .chrome-status {
574
+ display: inline-flex;
575
+ align-items: center;
576
+ gap: 6px;
577
+ flex-shrink: 0;
578
+ margin-left: auto;
579
+ padding-right: 4px;
580
+ }
581
+
582
+ .chrome-status-dot {
583
+ width: 6px;
584
+ height: 6px;
585
+ border-radius: 50%;
586
+ background: var(--muted-foreground);
587
+ flex-shrink: 0;
588
+ }
589
+
590
+ .chrome-status-dot.is-live {
591
+ background: #28c840;
592
+ animation: pulse-dot 1.5s ease-in-out infinite;
593
+ }
594
+
595
+ .chrome-status-dot.is-connecting {
596
+ background: #facc15;
597
+ animation: pulse-dot 1.5s ease-in-out infinite;
598
+ }
599
+
600
+ .chrome-status-dot.is-error {
601
+ background: var(--destructive);
602
+ }
603
+
604
+ .chrome-status-dot.is-idle {
605
+ background: var(--muted-foreground);
606
+ opacity: 0.4;
607
+ }
608
+
609
+ .chrome-status-label {
610
+ font-size: 10px;
611
+ color: var(--muted-foreground);
612
+ text-transform: capitalize;
613
+ font-weight: 500;
614
+ }
615
+
616
+ .chrome-browser-action {
617
+ flex-shrink: 0;
618
+ height: 24px;
619
+ border-radius: 6px;
620
+ border: 1px solid rgba(239, 68, 68, 0.34);
621
+ background: rgba(239, 68, 68, 0.12);
622
+ color: #fecaca;
623
+ padding: 0 10px;
624
+ font-size: 11px;
625
+ font-weight: 500;
626
+ white-space: nowrap;
627
+ transition:
628
+ background 150ms ease,
629
+ border-color 150ms ease,
630
+ color 150ms ease,
631
+ opacity 150ms ease;
632
+ }
633
+
634
+ .chrome-browser-action:hover:not(:disabled) {
635
+ background: rgba(239, 68, 68, 0.22);
636
+ border-color: rgba(239, 68, 68, 0.5);
637
+ color: #ffffff;
638
+ }
639
+
640
+ .chrome-browser-action:disabled {
641
+ cursor: default;
642
+ opacity: 0.45;
643
+ }
644
+
645
+ /* ─── Chrome URL Bar ─── */
646
+
647
+ .chrome-url-row {
648
+ padding: 0 12px 8px;
649
+ }
650
+
651
+ .chrome-url-bar {
652
+ display: flex;
653
+ align-items: center;
654
+ height: 28px;
655
+ border-radius: 6px;
656
+ background: var(--surface-elevated);
657
+ border: 1px solid var(--border-strong);
658
+ padding: 0 10px;
659
+ gap: 8px;
660
+ transition: border-color 150ms;
661
+ }
662
+
663
+ .chrome-url-bar:focus-within {
664
+ border-color: var(--ring);
665
+ }
666
+
667
+ .chrome-url-icon {
668
+ flex-shrink: 0;
669
+ color: var(--muted-foreground);
670
+ opacity: 0.6;
671
+ }
672
+
673
+ .chrome-url-input {
674
+ flex: 1;
675
+ min-width: 0;
676
+ border: none;
677
+ background: transparent;
678
+ color: var(--muted-foreground);
679
+ font-size: 11px;
680
+ font-family: ui-monospace, "SF Mono", "Cascadia Code", "Segoe UI Mono", monospace;
681
+ outline: none;
682
+ padding: 0;
683
+ }
684
+
685
+ .chrome-url-input::placeholder {
686
+ color: var(--muted-foreground);
687
+ opacity: 0.5;
688
+ }
689
+
690
+ /* ─── Browser Viewport ─── */
691
+
692
+ .browser-viewport {
693
+ flex: 0 0 auto;
694
+ width: 100%;
695
+ aspect-ratio: var(--browser-stream-aspect);
696
+ min-height: 0;
697
+ display: flex;
698
+ }
699
+
700
+ .viewer-surface {
701
+ position: relative;
702
+ flex: 0 0 auto;
703
+ width: 100%;
704
+ height: 100%;
705
+ min-width: 0;
706
+ min-height: 0;
707
+ background: var(--surface-elevated);
708
+ display: flex;
709
+ align-items: center;
710
+ justify-content: center;
711
+ overflow: hidden;
712
+ outline: none;
713
+ }
714
+
715
+ .viewer-surface:focus {
716
+ outline: none;
717
+ }
718
+
719
+ .viewer-image {
720
+ width: 100%;
721
+ height: 100%;
722
+ object-fit: contain;
723
+ user-select: none;
724
+ pointer-events: none;
725
+ }
726
+
727
+ .viewer-empty {
728
+ position: absolute;
729
+ inset: 0;
730
+ display: flex;
731
+ flex-direction: column;
732
+ align-items: center;
733
+ justify-content: center;
734
+ gap: 12px;
735
+ padding: 20px;
736
+ animation: fade-in 400ms ease-out;
737
+ }
738
+
739
+ .viewer-empty-icon {
740
+ color: var(--muted-foreground);
741
+ opacity: 0.2;
742
+ }
743
+
744
+ .viewer-empty-label {
745
+ font-size: 12px;
746
+ color: var(--muted-foreground);
747
+ text-align: center;
748
+ }
749
+
750
+ /* ─── Responsive ─── */
751
+
752
+ @media (max-width: 768px) {
753
+ .app-shell {
754
+ flex-direction: column;
755
+ }
756
+
757
+ .sidebar {
758
+ width: 100%;
759
+ border-right: none;
760
+ border-bottom: 1px solid var(--border);
761
+ }
762
+
763
+ .sidebar-scroll {
764
+ max-height: 200px;
765
+ }
766
+
767
+ .viewer-area {
768
+ padding: 12px;
769
+ }
770
+ }