@cyanheads/mcp-ts-core 0.8.0 → 0.8.2
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.
- package/CLAUDE.md +1 -1
- package/README.md +1 -1
- package/changelog/0.8.x/0.8.0.md +17 -15
- package/changelog/0.8.x/0.8.1.md +17 -0
- package/changelog/0.8.x/0.8.2.md +18 -0
- package/changelog/template.md +13 -0
- package/dist/logs/combined.log +4 -4
- package/dist/logs/error.log +4 -4
- package/dist/mcp-server/transports/http/landing-page/assets/copy-script.d.ts +13 -4
- package/dist/mcp-server/transports/http/landing-page/assets/copy-script.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/assets/copy-script.js +99 -25
- package/dist/mcp-server/transports/http/landing-page/assets/copy-script.js.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/assets/styles.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/assets/styles.js +318 -8
- package/dist/mcp-server/transports/http/landing-page/assets/styles.js.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/sections/status-strip.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/sections/status-strip.js +20 -1
- package/dist/mcp-server/transports/http/landing-page/sections/status-strip.js.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/sections/tools.d.ts +6 -5
- package/dist/mcp-server/transports/http/landing-page/sections/tools.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/sections/tools.js +114 -69
- package/dist/mcp-server/transports/http/landing-page/sections/tools.js.map +1 -1
- package/package.json +1 -1
- package/skills/add-app-tool/SKILL.md +24 -8
- package/skills/add-service/SKILL.md +7 -1
- package/skills/add-tool/SKILL.md +3 -1
- package/skills/api-errors/SKILL.md +21 -1
- package/skills/field-test/SKILL.md +73 -13
- package/skills/maintenance/SKILL.md +22 -7
- package/templates/changelog/template.md +18 -5
|
@@ -196,6 +196,23 @@ pre code { background: transparent; padding: 0; border: 0; font-size: inherit; }
|
|
|
196
196
|
gap: var(--space-6);
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
+
/* Page-load choreography — staggered rise on the hero stack. The
|
|
200
|
+
"backwards" animation-fill-mode applies the from-state during the
|
|
201
|
+
delay so the page never flashes the final layout before animating.
|
|
202
|
+
Reduced-motion override at the bottom of this stylesheet collapses
|
|
203
|
+
the animation. */
|
|
204
|
+
@keyframes hero-rise {
|
|
205
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
206
|
+
to { opacity: 1; transform: none; }
|
|
207
|
+
}
|
|
208
|
+
.hero > * { animation: hero-rise 600ms var(--ease-out) backwards; }
|
|
209
|
+
.hero > .hero-eyebrow { animation-delay: 60ms; }
|
|
210
|
+
.hero > .hero-title-row { animation-delay: 140ms; }
|
|
211
|
+
.hero > .hero-tagline { animation-delay: 220ms; }
|
|
212
|
+
.hero > .status-strip { animation-delay: 300ms; }
|
|
213
|
+
.hero > .connect { animation-delay: 380ms; }
|
|
214
|
+
.hero > .hero-badges { animation-delay: 460ms; }
|
|
215
|
+
|
|
199
216
|
.hero-eyebrow {
|
|
200
217
|
display: inline-flex;
|
|
201
218
|
align-items: center;
|
|
@@ -270,6 +287,7 @@ pre code { background: transparent; padding: 0; border: 0; font-size: inherit; }
|
|
|
270
287
|
font-size: 0.75rem;
|
|
271
288
|
font-weight: 600;
|
|
272
289
|
letter-spacing: -0.01em;
|
|
290
|
+
font-variant-numeric: tabular-nums;
|
|
273
291
|
color: var(--accent);
|
|
274
292
|
background: var(--accent-softer);
|
|
275
293
|
border: 1px solid var(--accent-edge);
|
|
@@ -344,6 +362,7 @@ pre code { background: transparent; padding: 0; border: 0; font-size: inherit; }
|
|
|
344
362
|
.status-value {
|
|
345
363
|
color: var(--fg);
|
|
346
364
|
font-weight: 500;
|
|
365
|
+
font-variant-numeric: tabular-nums;
|
|
347
366
|
}
|
|
348
367
|
.status-value-accent {
|
|
349
368
|
color: var(--accent);
|
|
@@ -444,7 +463,14 @@ pre code { background: transparent; padding: 0; border: 0; font-size: inherit; }
|
|
|
444
463
|
border-radius: 50%;
|
|
445
464
|
background: color-mix(in oklab, var(--fg-subtle), transparent 60%);
|
|
446
465
|
display: inline-block;
|
|
447
|
-
|
|
466
|
+
transition: background var(--duration-base) var(--ease-out);
|
|
467
|
+
}
|
|
468
|
+
/* Hovering the dot cluster colors them like real OS window controls.
|
|
469
|
+
Pure delight — fits the terminal-chrome metaphor without adding
|
|
470
|
+
anything to the meaningful surface. */
|
|
471
|
+
.connect-chrome-dots:hover .connect-chrome-dot:nth-child(1) { background: #ff5f57; }
|
|
472
|
+
.connect-chrome-dots:hover .connect-chrome-dot:nth-child(2) { background: #febc2e; }
|
|
473
|
+
.connect-chrome-dots:hover .connect-chrome-dot:nth-child(3) { background: #28c840; }
|
|
448
474
|
.connect-chrome-endpoint {
|
|
449
475
|
margin-left: auto;
|
|
450
476
|
font-family: var(--font-mono);
|
|
@@ -622,10 +648,164 @@ section { padding: var(--space-12) 0 0; }
|
|
|
622
648
|
font-family: var(--font-mono);
|
|
623
649
|
font-size: 0.6875rem;
|
|
624
650
|
font-weight: 600;
|
|
625
|
-
text-transform:
|
|
626
|
-
letter-spacing: 0.
|
|
651
|
+
text-transform: lowercase;
|
|
652
|
+
letter-spacing: 0.06em;
|
|
653
|
+
display: flex;
|
|
654
|
+
align-items: baseline;
|
|
655
|
+
gap: var(--space-2);
|
|
656
|
+
position: relative;
|
|
657
|
+
padding-left: var(--space-3);
|
|
658
|
+
}
|
|
659
|
+
.group-heading::before {
|
|
660
|
+
content: "";
|
|
661
|
+
position: absolute;
|
|
662
|
+
left: 0;
|
|
663
|
+
top: 50%;
|
|
664
|
+
transform: translateY(-50%);
|
|
665
|
+
width: 2px;
|
|
666
|
+
height: 0.85em;
|
|
667
|
+
background: var(--accent);
|
|
668
|
+
border-radius: 1px;
|
|
627
669
|
}
|
|
628
670
|
.group-heading:first-child { margin-top: 0; }
|
|
671
|
+
.group-heading[data-group="read"]::before { background: #16a34a; }
|
|
672
|
+
.group-heading[data-group="destructive"]::before { background: #dc2626; }
|
|
673
|
+
.group-count {
|
|
674
|
+
color: var(--fg-subtle);
|
|
675
|
+
font-weight: 500;
|
|
676
|
+
font-variant-numeric: tabular-nums;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
/* -------------------- Tool filter bar -------------------- */
|
|
680
|
+
|
|
681
|
+
.tool-filter-bar {
|
|
682
|
+
display: flex;
|
|
683
|
+
flex-wrap: wrap;
|
|
684
|
+
align-items: center;
|
|
685
|
+
gap: var(--space-3) var(--space-4);
|
|
686
|
+
margin-bottom: var(--space-5);
|
|
687
|
+
}
|
|
688
|
+
.tool-chips {
|
|
689
|
+
display: inline-flex;
|
|
690
|
+
flex-wrap: wrap;
|
|
691
|
+
gap: 4px;
|
|
692
|
+
}
|
|
693
|
+
.tool-chip {
|
|
694
|
+
appearance: none;
|
|
695
|
+
border: 1px solid var(--border);
|
|
696
|
+
background: var(--bg-elevated);
|
|
697
|
+
color: var(--fg-muted);
|
|
698
|
+
font-family: var(--font-mono);
|
|
699
|
+
font-size: 0.75rem;
|
|
700
|
+
font-weight: 500;
|
|
701
|
+
padding: 4px 10px;
|
|
702
|
+
border-radius: var(--radius-pill);
|
|
703
|
+
cursor: pointer;
|
|
704
|
+
letter-spacing: 0.01em;
|
|
705
|
+
transition:
|
|
706
|
+
color var(--duration-fast) var(--ease-out),
|
|
707
|
+
border-color var(--duration-fast) var(--ease-out),
|
|
708
|
+
background var(--duration-fast) var(--ease-out);
|
|
709
|
+
}
|
|
710
|
+
.tool-chip:hover { color: var(--fg); border-color: var(--border-strong); }
|
|
711
|
+
.tool-chip:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
712
|
+
.tool-chip[aria-pressed="true"] {
|
|
713
|
+
color: var(--accent);
|
|
714
|
+
background: var(--accent-softer);
|
|
715
|
+
border-color: var(--accent-edge);
|
|
716
|
+
}
|
|
717
|
+
.tool-chip--read[aria-pressed="true"] {
|
|
718
|
+
color: #16a34a;
|
|
719
|
+
background: color-mix(in oklab, #16a34a, transparent 92%);
|
|
720
|
+
border-color: color-mix(in oklab, #16a34a, transparent 72%);
|
|
721
|
+
}
|
|
722
|
+
.tool-chip--destructive[aria-pressed="true"] {
|
|
723
|
+
color: #dc2626;
|
|
724
|
+
background: color-mix(in oklab, #dc2626, transparent 92%);
|
|
725
|
+
border-color: color-mix(in oklab, #dc2626, transparent 72%);
|
|
726
|
+
}
|
|
727
|
+
@media (prefers-color-scheme: dark) {
|
|
728
|
+
.tool-chip--read[aria-pressed="true"] { color: #4ade80; }
|
|
729
|
+
.tool-chip--destructive[aria-pressed="true"] { color: #f87171; }
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
.tool-search {
|
|
733
|
+
flex: 1 1 200px;
|
|
734
|
+
min-width: 0;
|
|
735
|
+
max-width: 360px;
|
|
736
|
+
margin-left: auto;
|
|
737
|
+
display: flex;
|
|
738
|
+
align-items: center;
|
|
739
|
+
position: relative;
|
|
740
|
+
}
|
|
741
|
+
.tool-search input {
|
|
742
|
+
width: 100%;
|
|
743
|
+
font-family: var(--font-mono);
|
|
744
|
+
font-size: var(--text-sm);
|
|
745
|
+
padding: 6px 12px 6px 30px;
|
|
746
|
+
border: 1px solid var(--border);
|
|
747
|
+
border-radius: var(--radius-sm);
|
|
748
|
+
background: var(--bg-elevated);
|
|
749
|
+
color: var(--fg);
|
|
750
|
+
transition:
|
|
751
|
+
border-color var(--duration-fast) var(--ease-out),
|
|
752
|
+
box-shadow var(--duration-fast) var(--ease-out);
|
|
753
|
+
}
|
|
754
|
+
.tool-search input::placeholder { color: var(--fg-subtle); }
|
|
755
|
+
.tool-search input:focus {
|
|
756
|
+
outline: none;
|
|
757
|
+
border-color: var(--accent);
|
|
758
|
+
box-shadow: 0 0 0 3px var(--accent-softer);
|
|
759
|
+
}
|
|
760
|
+
.tool-search::before {
|
|
761
|
+
/* Search glyph — no icon font, just a styled box. */
|
|
762
|
+
content: "";
|
|
763
|
+
position: absolute;
|
|
764
|
+
left: 10px;
|
|
765
|
+
top: 50%;
|
|
766
|
+
width: 12px;
|
|
767
|
+
height: 12px;
|
|
768
|
+
border: 1.5px solid var(--fg-subtle);
|
|
769
|
+
border-radius: 50%;
|
|
770
|
+
transform: translateY(-50%);
|
|
771
|
+
pointer-events: none;
|
|
772
|
+
}
|
|
773
|
+
.tool-search::after {
|
|
774
|
+
content: "";
|
|
775
|
+
position: absolute;
|
|
776
|
+
left: 19px;
|
|
777
|
+
top: calc(50% + 4px);
|
|
778
|
+
width: 5px;
|
|
779
|
+
height: 1.5px;
|
|
780
|
+
background: var(--fg-subtle);
|
|
781
|
+
transform: rotate(45deg);
|
|
782
|
+
pointer-events: none;
|
|
783
|
+
border-radius: 1px;
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
.visually-hidden {
|
|
787
|
+
position: absolute;
|
|
788
|
+
width: 1px;
|
|
789
|
+
height: 1px;
|
|
790
|
+
padding: 0;
|
|
791
|
+
margin: -1px;
|
|
792
|
+
overflow: hidden;
|
|
793
|
+
clip: rect(0, 0, 0, 0);
|
|
794
|
+
white-space: nowrap;
|
|
795
|
+
border: 0;
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
.tools-empty {
|
|
799
|
+
margin: var(--space-6) 0;
|
|
800
|
+
padding: var(--space-8) var(--space-6);
|
|
801
|
+
text-align: center;
|
|
802
|
+
color: var(--fg-muted);
|
|
803
|
+
border: 1px dashed var(--border);
|
|
804
|
+
border-radius: var(--radius-md);
|
|
805
|
+
background: var(--bg-subtle);
|
|
806
|
+
font-size: var(--text-sm);
|
|
807
|
+
font-family: var(--font-mono);
|
|
808
|
+
}
|
|
629
809
|
|
|
630
810
|
/* -------------------- Cards -------------------- */
|
|
631
811
|
|
|
@@ -633,7 +813,7 @@ section { padding: var(--space-12) 0 0; }
|
|
|
633
813
|
display: grid;
|
|
634
814
|
grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
|
|
635
815
|
gap: var(--space-3);
|
|
636
|
-
align-items:
|
|
816
|
+
align-items: stretch;
|
|
637
817
|
}
|
|
638
818
|
.card {
|
|
639
819
|
border: 1px solid var(--border-subtle);
|
|
@@ -647,6 +827,30 @@ section { padding: var(--space-12) 0 0; }
|
|
|
647
827
|
transform var(--duration-fast) var(--ease-out),
|
|
648
828
|
box-shadow var(--duration-fast) var(--ease-out);
|
|
649
829
|
position: relative;
|
|
830
|
+
height: 100%;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
/* Mutability spine — 3px tonal strip down the left edge of each tool
|
|
834
|
+
card. Bird's-eye scannability: a row of cards reads as a row of
|
|
835
|
+
colored bars before the eye lands on any title. */
|
|
836
|
+
.tool-card { padding-left: calc(var(--space-5) + 3px); }
|
|
837
|
+
.tool-card::before {
|
|
838
|
+
content: "";
|
|
839
|
+
position: absolute;
|
|
840
|
+
left: 0;
|
|
841
|
+
top: var(--space-2);
|
|
842
|
+
bottom: var(--space-2);
|
|
843
|
+
width: 3px;
|
|
844
|
+
border-radius: 0 2px 2px 0;
|
|
845
|
+
background: var(--card-spine, var(--border-strong));
|
|
846
|
+
transition: background var(--duration-fast) var(--ease-out);
|
|
847
|
+
}
|
|
848
|
+
.tool-card[data-mutability="read"] { --card-spine: #16a34a; }
|
|
849
|
+
.tool-card[data-mutability="write"] { --card-spine: var(--border-strong); }
|
|
850
|
+
.tool-card[data-mutability="destructive"] { --card-spine: #dc2626; }
|
|
851
|
+
@media (prefers-color-scheme: dark) {
|
|
852
|
+
.tool-card[data-mutability="read"] { --card-spine: #4ade80; }
|
|
853
|
+
.tool-card[data-mutability="destructive"] { --card-spine: #f87171; }
|
|
650
854
|
}
|
|
651
855
|
.card:hover {
|
|
652
856
|
border-color: var(--accent-edge);
|
|
@@ -674,6 +878,15 @@ section { padding: var(--space-12) 0 0; }
|
|
|
674
878
|
color: var(--fg-muted);
|
|
675
879
|
font-size: var(--text-sm);
|
|
676
880
|
line-height: 1.5;
|
|
881
|
+
/* 3-line preview clamp keeps cards uniform; full text stays in DOM
|
|
882
|
+
for screen readers and view-source. Non-WebKit engines fall back
|
|
883
|
+
to the natural height — overflow:hidden truncates to 3 lines via
|
|
884
|
+
max-height as a graceful degradation. */
|
|
885
|
+
display: -webkit-box;
|
|
886
|
+
-webkit-line-clamp: 3;
|
|
887
|
+
-webkit-box-orient: vertical;
|
|
888
|
+
overflow: hidden;
|
|
889
|
+
max-height: calc(1.5em * 3);
|
|
677
890
|
}
|
|
678
891
|
.card-meta {
|
|
679
892
|
display: flex;
|
|
@@ -684,7 +897,12 @@ section { padding: var(--space-12) 0 0; }
|
|
|
684
897
|
font-family: var(--font-mono);
|
|
685
898
|
align-items: center;
|
|
686
899
|
}
|
|
687
|
-
.card-meta-label {
|
|
900
|
+
.card-meta-label {
|
|
901
|
+
color: var(--fg-subtle);
|
|
902
|
+
text-transform: lowercase;
|
|
903
|
+
letter-spacing: 0.04em;
|
|
904
|
+
font-size: 0.65rem;
|
|
905
|
+
}
|
|
688
906
|
.card-meta code {
|
|
689
907
|
font-size: 1em;
|
|
690
908
|
color: var(--fg);
|
|
@@ -693,6 +911,96 @@ section { padding: var(--space-12) 0 0; }
|
|
|
693
911
|
padding: 0;
|
|
694
912
|
}
|
|
695
913
|
|
|
914
|
+
/* Card footer — pinned to the bottom so cards align across a row even
|
|
915
|
+
when descriptions vary in length. Carries the scope chip on the left
|
|
916
|
+
and the invocation/schema action triggers on the right. */
|
|
917
|
+
.card-foot {
|
|
918
|
+
margin-top: auto;
|
|
919
|
+
padding-top: var(--space-3);
|
|
920
|
+
border-top: 1px solid var(--border-subtle);
|
|
921
|
+
display: flex;
|
|
922
|
+
flex-wrap: wrap;
|
|
923
|
+
align-items: center;
|
|
924
|
+
justify-content: space-between;
|
|
925
|
+
gap: var(--space-2) var(--space-3);
|
|
926
|
+
}
|
|
927
|
+
.card-scope {
|
|
928
|
+
display: inline-flex;
|
|
929
|
+
align-items: center;
|
|
930
|
+
flex-wrap: wrap;
|
|
931
|
+
gap: 4px;
|
|
932
|
+
font-family: var(--font-mono);
|
|
933
|
+
font-size: var(--text-xs);
|
|
934
|
+
color: var(--fg-muted);
|
|
935
|
+
}
|
|
936
|
+
.scope-chip {
|
|
937
|
+
display: inline-flex;
|
|
938
|
+
align-items: center;
|
|
939
|
+
font-family: var(--font-mono);
|
|
940
|
+
font-size: 0.65rem;
|
|
941
|
+
font-weight: 500;
|
|
942
|
+
padding: 1px 6px;
|
|
943
|
+
border-radius: var(--radius-xs);
|
|
944
|
+
background: var(--bg-subtle);
|
|
945
|
+
color: var(--fg);
|
|
946
|
+
border: 1px solid var(--border-subtle);
|
|
947
|
+
letter-spacing: 0.02em;
|
|
948
|
+
}
|
|
949
|
+
.card-actions {
|
|
950
|
+
display: inline-flex;
|
|
951
|
+
align-items: center;
|
|
952
|
+
gap: var(--space-3);
|
|
953
|
+
margin-left: auto;
|
|
954
|
+
}
|
|
955
|
+
.card-detail { margin: 0; }
|
|
956
|
+
.card-detail > summary {
|
|
957
|
+
display: inline-flex;
|
|
958
|
+
align-items: center;
|
|
959
|
+
gap: 3px;
|
|
960
|
+
padding: 0;
|
|
961
|
+
font-family: var(--font-mono);
|
|
962
|
+
font-size: var(--text-xs);
|
|
963
|
+
color: var(--fg-muted);
|
|
964
|
+
cursor: pointer;
|
|
965
|
+
transition: color var(--duration-fast);
|
|
966
|
+
}
|
|
967
|
+
.card-detail > summary::before {
|
|
968
|
+
content: "▸";
|
|
969
|
+
display: inline-block;
|
|
970
|
+
font-size: 0.6rem;
|
|
971
|
+
transition: transform var(--duration-fast);
|
|
972
|
+
color: var(--fg-subtle);
|
|
973
|
+
}
|
|
974
|
+
.card-detail[open] > summary::before {
|
|
975
|
+
transform: rotate(90deg);
|
|
976
|
+
color: var(--accent);
|
|
977
|
+
}
|
|
978
|
+
.card-detail > summary:hover { color: var(--accent); }
|
|
979
|
+
.card-detail[open] > summary { color: var(--accent); }
|
|
980
|
+
/* When a detail opens, push its content full-width below the footer. The
|
|
981
|
+
negative side margins recover the card's horizontal padding so the
|
|
982
|
+
panel spans edge-to-edge. */
|
|
983
|
+
.card-detail[open] {
|
|
984
|
+
width: 100%;
|
|
985
|
+
margin: var(--space-3) calc(var(--space-5) * -1) calc(var(--space-4) * -1);
|
|
986
|
+
padding: 0 var(--space-5) var(--space-4);
|
|
987
|
+
background: var(--bg-subtle);
|
|
988
|
+
border-top: 1px solid var(--border-subtle);
|
|
989
|
+
}
|
|
990
|
+
.card-detail[open] > summary { padding-top: var(--space-3); }
|
|
991
|
+
/* When any detail is open the actions row needs to wrap so the open
|
|
992
|
+
panel can claim full width. The :has() selector handles this in
|
|
993
|
+
modern engines; older browsers tolerate the actions row stacking
|
|
994
|
+
inline-flex without the layout flip. */
|
|
995
|
+
.card-foot:has(.card-detail[open]) {
|
|
996
|
+
flex-direction: column;
|
|
997
|
+
align-items: stretch;
|
|
998
|
+
}
|
|
999
|
+
.card-foot:has(.card-detail[open]) .card-actions {
|
|
1000
|
+
width: 100%;
|
|
1001
|
+
margin-left: 0;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
696
1004
|
/* Annotation pills — dot-chip style */
|
|
697
1005
|
.pill-row { display: inline-flex; flex-wrap: wrap; gap: 5px; align-items: center; }
|
|
698
1006
|
.pill {
|
|
@@ -717,8 +1025,10 @@ section { padding: var(--space-12) 0 0; }
|
|
|
717
1025
|
background: currentColor;
|
|
718
1026
|
flex-shrink: 0;
|
|
719
1027
|
}
|
|
720
|
-
|
|
721
|
-
.pill-
|
|
1028
|
+
/* Mutability badges — primary safety signal, sized to pass a squint test. */
|
|
1029
|
+
.pill-read { color: #16a34a; background: color-mix(in oklab, #16a34a, transparent 88%); border-color: color-mix(in oklab, #16a34a, transparent 65%); }
|
|
1030
|
+
.pill-write { color: var(--fg-muted); background: var(--bg-subtle); border-color: var(--border); }
|
|
1031
|
+
.pill-destructive { color: #dc2626; background: color-mix(in oklab, #dc2626, transparent 88%); border-color: color-mix(in oklab, #dc2626, transparent 65%); font-weight: 600; }
|
|
722
1032
|
.pill-openworld { color: #2563eb; background: color-mix(in oklab, #2563eb, transparent 92%); border-color: color-mix(in oklab, #2563eb, transparent 72%); }
|
|
723
1033
|
.pill-task { color: var(--accent); background: var(--accent-softer); border-color: var(--accent-edge); }
|
|
724
1034
|
.pill-app { color: #9333ea; background: color-mix(in oklab, #9333ea, transparent 92%); border-color: color-mix(in oklab, #9333ea, transparent 72%); }
|
|
@@ -726,7 +1036,7 @@ section { padding: var(--space-12) 0 0; }
|
|
|
726
1036
|
.pill-auth::before { display: none; }
|
|
727
1037
|
|
|
728
1038
|
@media (prefers-color-scheme: dark) {
|
|
729
|
-
.pill-
|
|
1039
|
+
.pill-read { color: #4ade80; }
|
|
730
1040
|
.pill-destructive { color: #f87171; }
|
|
731
1041
|
.pill-openworld { color: #60a5fa; }
|
|
732
1042
|
.pill-app { color: #c084fc; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/assets/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEtE,2EAA2E;AAC3E,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;IACpE,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;cAoBA,UAAU;wCACgB,UAAU;uCACX,UAAU;uCACV,UAAU;yCACR,UAAU
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/assets/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEtE,2EAA2E;AAC3E,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;IACpE,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;cAoBA,UAAU;wCACgB,UAAU;uCACX,UAAU;uCACV,UAAU;yCACR,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2pClD,CAAC;IACA,OAAO,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-strip.d.ts","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/status-strip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEjE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"status-strip.d.ts","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/status-strip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEjE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,GAAG,QAAQ,CA2DvF"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { html } from '../../../../../utils/formatting/html.js';
|
|
16
16
|
export function renderStatusStrip(manifest, degraded) {
|
|
17
|
-
const { auth, definitionCounts, protocol } = manifest;
|
|
17
|
+
const { auth, definitionCounts, protocol, landing } = manifest;
|
|
18
18
|
const authMeta = describeAuth(auth);
|
|
19
19
|
// Counts hidden in degraded mode to avoid leaking inventory shape.
|
|
20
20
|
const counts = degraded
|
|
@@ -27,6 +27,24 @@ export function renderStatusStrip(manifest, degraded) {
|
|
|
27
27
|
const signin = auth.mode === 'oauth' && auth.oauthIssuer
|
|
28
28
|
? html ` <a class="status-signin" href="${auth.oauthIssuer}" rel="noopener">sign in ↗</a>`
|
|
29
29
|
: html ``;
|
|
30
|
+
// Repo link — same dim treatment as the count + protocol items so the
|
|
31
|
+
// strip stays information-dense without a flashy CTA. The "Source"
|
|
32
|
+
// footer entry stays for users who scroll to the bottom.
|
|
33
|
+
const repo = landing.repoRoot;
|
|
34
|
+
const repoLink = repo
|
|
35
|
+
? html `
|
|
36
|
+
<a
|
|
37
|
+
class="status-item status-link"
|
|
38
|
+
href="${repo.url}"
|
|
39
|
+
rel="noopener"
|
|
40
|
+
title="View ${repo.owner}/${repo.repo} on GitHub"
|
|
41
|
+
>
|
|
42
|
+
<span>github</span>
|
|
43
|
+
<span class="status-value">${repo.owner}/${repo.repo}</span>
|
|
44
|
+
<span aria-hidden="true">↗</span>
|
|
45
|
+
</a>
|
|
46
|
+
`
|
|
47
|
+
: html ``;
|
|
30
48
|
return html `
|
|
31
49
|
<div class="status-strip" aria-label="${authMeta.ariaLabel}">
|
|
32
50
|
<span class="status-item" title="${authMeta.ariaLabel}">
|
|
@@ -43,6 +61,7 @@ export function renderStatusStrip(manifest, degraded) {
|
|
|
43
61
|
<span>protocol</span>
|
|
44
62
|
<span class="status-value status-value-accent">${protocol.latestVersion}</span>
|
|
45
63
|
</span>
|
|
64
|
+
${repoLink}
|
|
46
65
|
</div>
|
|
47
66
|
`;
|
|
48
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-strip.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/status-strip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,IAAI,EAAiB,MAAM,4BAA4B,CAAC;AAEjE,MAAM,UAAU,iBAAiB,CAAC,QAAwB,EAAE,QAAiB;IAC3E,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"status-strip.js","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/status-strip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,IAAI,EAAiB,MAAM,4BAA4B,CAAC;AAEjE,MAAM,UAAU,iBAAiB,CAAC,QAAwB,EAAE,QAAiB;IAC3E,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;IAE/D,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEpC,mEAAmE;IACnE,MAAM,MAAM,GAAG,QAAQ;QACrB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACE,EAAE,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;YAC7C,EAAE,CAAC,EAAE,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE;YACrD,EAAE,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;SAClD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7B,MAAM,MAAM,GACV,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW;QACvC,CAAC,CAAC,IAAI,CAAA,mCAAmC,IAAI,CAAC,WAAW,gCAAgC;QACzF,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IAEb,sEAAsE;IACtE,mEAAmE;IACnE,yDAAyD;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI;QACnB,CAAC,CAAC,IAAI,CAAA;;;kBAGQ,IAAI,CAAC,GAAG;;wBAEF,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;;;uCAGR,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;;;OAGvD;QACH,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IAEX,OAAO,IAAI,CAAA;4CAC+B,QAAQ,CAAC,SAAS;yCACrB,QAAQ,CAAC,SAAS;kCACzB,QAAQ,CAAC,QAAQ;qCACd,QAAQ,CAAC,KAAK,UAAU,MAAM;;QAE3D,MAAM,CAAC,GAAG,CACV,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAA;8DAC2C,CAAC,CAAC,KAAK;yCAC5B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChC,CAAC,CAAC,KAAK;;SAElB,CACF;8DACuD,QAAQ,CAAC,aAAa;;yDAE3B,QAAQ,CAAC,aAAa;;QAEvE,QAAQ;;GAEb,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,SAAS,YAAY,CAAC,IAAkB;IAKtC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO;YACL,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE,4CAA4C;SACxD,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO;YACL,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,kBAAkB;YAC5B,SAAS,EAAE,yBAAyB;SACrC,CAAC;IACJ,CAAC;IACD,OAAO;QACL,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,kBAAkB;QAC5B,SAAS,EAAE,gBAAgB;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Tools section — responsive
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* @fileoverview Tools section — responsive card grid grouped by safety
|
|
3
|
+
* mutability (read / write / destructive). Each card carries annotation
|
|
4
|
+
* pills, a scope chip, a JSON-RPC invocation snippet, and a collapsible
|
|
5
|
+
* input-schema preview. A filter bar above the grid wires chip + search
|
|
6
|
+
* filtering through `data-mutability` / `data-name` attributes consumed
|
|
7
|
+
* by the inline filter script.
|
|
7
8
|
*
|
|
8
9
|
* @module src/mcp-server/transports/http/landing-page/sections/tools
|
|
9
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/tools.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../../../../src/mcp-server/transports/http/landing-page/sections/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAYjE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,QAAQ,CA0BlE"}
|