@syke1/mcp-server 1.4.0 → 1.4.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.
- package/dist/index.js +3 -3
- package/dist/web/public/app.js +570 -28
- package/dist/web/public/index.html +43 -0
- package/dist/web/public/style.css +564 -2
- package/dist/web/server.js +1 -0
- package/package.json +1 -1
|
@@ -120,6 +120,34 @@
|
|
|
120
120
|
</div>
|
|
121
121
|
</section>
|
|
122
122
|
|
|
123
|
+
<!-- Tree Resize Handle -->
|
|
124
|
+
<div id="tree-resize-handle"></div>
|
|
125
|
+
|
|
126
|
+
<!-- File Tree Panel -->
|
|
127
|
+
<aside id="file-tree-panel">
|
|
128
|
+
<div id="tree-header">
|
|
129
|
+
<div class="tree-title-row">
|
|
130
|
+
<span class="tree-title">FILE TREE</span>
|
|
131
|
+
<span id="tree-file-count" class="tree-count">0</span>
|
|
132
|
+
</div>
|
|
133
|
+
<div id="tree-search-bar">
|
|
134
|
+
<input type="text" id="tree-search-input" placeholder="FILTER FILES...">
|
|
135
|
+
<button id="tree-sort-btn" class="tree-tool-btn">SORT</button>
|
|
136
|
+
<div id="tree-sort-menu" class="hidden">
|
|
137
|
+
<div class="tree-sort-option active" data-sort="name">BY NAME</div>
|
|
138
|
+
<div class="tree-sort-option" data-sort="layer">BY LAYER</div>
|
|
139
|
+
<div class="tree-sort-option" data-sort="risk">BY RISK</div>
|
|
140
|
+
<div class="tree-sort-option" data-sort="deps">BY DEPS</div>
|
|
141
|
+
<div class="tree-sort-option" data-sort="modified">BY RECENT</div>
|
|
142
|
+
</div>
|
|
143
|
+
<button id="tree-collapse-all" class="tree-tool-btn" title="Toggle expand">▼</button>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
<div id="tree-scroll-container">
|
|
147
|
+
<div id="tree-content"></div>
|
|
148
|
+
</div>
|
|
149
|
+
</aside>
|
|
150
|
+
|
|
123
151
|
<!-- Resize Handle -->
|
|
124
152
|
<div id="resize-handle"></div>
|
|
125
153
|
|
|
@@ -266,6 +294,20 @@
|
|
|
266
294
|
<div class="set-row"><label>Reset Distance</label><input type="range" id="set-cam-resetDistance" min="500" max="5000" step="100"><span class="set-val"></span></div>
|
|
267
295
|
</div>
|
|
268
296
|
|
|
297
|
+
<!-- FILE TREE -->
|
|
298
|
+
<div class="set-section-hdr"><span class="set-arrow open">▶</span> FILE TREE <button class="set-rst-btn" data-group="fileTree">RST</button></div>
|
|
299
|
+
<div class="set-section-body">
|
|
300
|
+
<div class="set-row"><label>Panel Width</label><input type="range" id="set-ft-panelWidth" min="200" max="500" step="10"><span class="set-val"></span></div>
|
|
301
|
+
<div class="set-row"><label>Font Size</label><input type="range" id="set-ft-fontSize" min="9" max="14" step="1"><span class="set-val"></span></div>
|
|
302
|
+
<div class="set-row"><label>Indent Size</label><input type="range" id="set-ft-indentSize" min="8" max="24" step="2"><span class="set-val"></span></div>
|
|
303
|
+
<div class="set-row"><label>Pulse Duration</label><input type="range" id="set-ft-pulseDuration" min="2" max="10" step="1"><span class="set-val"></span></div>
|
|
304
|
+
<div class="set-row set-row-checkbox"><label>Show Line Count</label><input type="checkbox" id="set-ft-showLineCount"><span class="set-val"></span></div>
|
|
305
|
+
<div class="set-row set-row-checkbox"><label>Show Deps</label><input type="checkbox" id="set-ft-showDeps"><span class="set-val"></span></div>
|
|
306
|
+
<div class="set-row set-row-checkbox"><label>Show Risk</label><input type="checkbox" id="set-ft-showRisk"><span class="set-val"></span></div>
|
|
307
|
+
<div class="set-row set-row-checkbox"><label>Auto-scroll</label><input type="checkbox" id="set-ft-autoScrollOnChange"><span class="set-val"></span></div>
|
|
308
|
+
<div class="set-row set-row-checkbox"><label>Compact Mode</label><input type="checkbox" id="set-ft-compactMode"><span class="set-val"></span></div>
|
|
309
|
+
</div>
|
|
310
|
+
|
|
269
311
|
<!-- ADVANCED (collapsed by default) -->
|
|
270
312
|
<div class="set-section-hdr"><span class="set-arrow">▶</span> ADVANCED <button class="set-rst-btn" data-group="physics">RST</button></div>
|
|
271
313
|
<div class="set-section-body collapsed">
|
|
@@ -355,6 +397,7 @@
|
|
|
355
397
|
<div class="shortcut-row"><kbd>F</kbd><span>Focus on selected</span></div>
|
|
356
398
|
<div class="shortcut-row"><kbd>C</kbd><span>View code</span></div>
|
|
357
399
|
<div class="shortcut-row"><kbd>S</kbd><span>Simulate deletion</span></div>
|
|
400
|
+
<div class="shortcut-row"><kbd>T</kbd><span>Toggle file tree</span></div>
|
|
358
401
|
<div class="shortcut-row"><kbd>D</kbd><span>Detect cycles</span></div>
|
|
359
402
|
<div class="shortcut-row"><kbd>?</kbd><span>Show shortcuts</span></div>
|
|
360
403
|
<div class="shortcut-row"><kbd>Esc</kbd><span>Deselect / Close</span></div>
|
|
@@ -1207,7 +1207,7 @@ main {
|
|
|
1207
1207
|
position: fixed;
|
|
1208
1208
|
bottom: 0;
|
|
1209
1209
|
left: 0;
|
|
1210
|
-
right: 380px;
|
|
1210
|
+
right: var(--right-offset, 380px);
|
|
1211
1211
|
background: var(--bg-secondary);
|
|
1212
1212
|
border-top: 1px solid var(--border);
|
|
1213
1213
|
transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
@@ -2297,7 +2297,7 @@ main {
|
|
|
2297
2297
|
position: fixed;
|
|
2298
2298
|
bottom: 0;
|
|
2299
2299
|
left: 0;
|
|
2300
|
-
right: 380px;
|
|
2300
|
+
right: var(--right-offset, 380px);
|
|
2301
2301
|
height: 28px;
|
|
2302
2302
|
background: rgba(5, 10, 24, 0.85);
|
|
2303
2303
|
border-top: 1px solid rgba(0, 212, 255, 0.1);
|
|
@@ -2553,3 +2553,565 @@ main {
|
|
|
2553
2553
|
border: none;
|
|
2554
2554
|
border-radius: 1px;
|
|
2555
2555
|
}
|
|
2556
|
+
|
|
2557
|
+
/* ═══════════════════════════════════════════ */
|
|
2558
|
+
/* FILE TREE PANEL */
|
|
2559
|
+
/* ═══════════════════════════════════════════ */
|
|
2560
|
+
|
|
2561
|
+
/* Tree Resize Handle (identical pattern to #resize-handle) */
|
|
2562
|
+
#tree-resize-handle {
|
|
2563
|
+
width: 8px;
|
|
2564
|
+
cursor: col-resize;
|
|
2565
|
+
background: var(--bg-secondary);
|
|
2566
|
+
position: relative;
|
|
2567
|
+
flex-shrink: 0;
|
|
2568
|
+
z-index: 20;
|
|
2569
|
+
transition: background 0.2s;
|
|
2570
|
+
border-left: 1px solid var(--border);
|
|
2571
|
+
border-right: 1px solid var(--border);
|
|
2572
|
+
}
|
|
2573
|
+
|
|
2574
|
+
#tree-resize-handle::before {
|
|
2575
|
+
content: '';
|
|
2576
|
+
position: absolute;
|
|
2577
|
+
top: 50%;
|
|
2578
|
+
left: 50%;
|
|
2579
|
+
transform: translate(-50%, -50%);
|
|
2580
|
+
width: 2px;
|
|
2581
|
+
height: 48px;
|
|
2582
|
+
border-radius: 2px;
|
|
2583
|
+
background: var(--text-secondary);
|
|
2584
|
+
opacity: 0.5;
|
|
2585
|
+
transition: all 0.2s;
|
|
2586
|
+
}
|
|
2587
|
+
|
|
2588
|
+
#tree-resize-handle:hover {
|
|
2589
|
+
background: rgba(0, 212, 255, 0.08);
|
|
2590
|
+
border-color: var(--accent-dim);
|
|
2591
|
+
}
|
|
2592
|
+
|
|
2593
|
+
#tree-resize-handle:hover::before {
|
|
2594
|
+
background: var(--accent);
|
|
2595
|
+
height: 64px;
|
|
2596
|
+
opacity: 1;
|
|
2597
|
+
box-shadow: var(--glow-cyan);
|
|
2598
|
+
}
|
|
2599
|
+
|
|
2600
|
+
#tree-resize-handle.dragging {
|
|
2601
|
+
background: rgba(0, 212, 255, 0.12);
|
|
2602
|
+
border-color: var(--accent);
|
|
2603
|
+
}
|
|
2604
|
+
|
|
2605
|
+
#tree-resize-handle.dragging::before {
|
|
2606
|
+
background: var(--accent);
|
|
2607
|
+
height: 100%;
|
|
2608
|
+
opacity: 1;
|
|
2609
|
+
box-shadow: var(--glow-cyan);
|
|
2610
|
+
}
|
|
2611
|
+
|
|
2612
|
+
/* File Tree Panel */
|
|
2613
|
+
#file-tree-panel {
|
|
2614
|
+
flex: 0 0 280px;
|
|
2615
|
+
width: 280px;
|
|
2616
|
+
display: flex;
|
|
2617
|
+
flex-direction: column;
|
|
2618
|
+
background: var(--bg-secondary);
|
|
2619
|
+
border-left: 1px solid var(--border);
|
|
2620
|
+
border-right: 1px solid var(--border);
|
|
2621
|
+
overflow: hidden;
|
|
2622
|
+
position: relative;
|
|
2623
|
+
font-family: 'Consolas', 'JetBrains Mono', monospace;
|
|
2624
|
+
}
|
|
2625
|
+
|
|
2626
|
+
#file-tree-panel.hidden {
|
|
2627
|
+
display: none;
|
|
2628
|
+
}
|
|
2629
|
+
|
|
2630
|
+
#file-tree-panel::before {
|
|
2631
|
+
content: '';
|
|
2632
|
+
position: absolute;
|
|
2633
|
+
top: 0; left: -1px;
|
|
2634
|
+
width: 1px;
|
|
2635
|
+
height: 100%;
|
|
2636
|
+
background: linear-gradient(180deg, var(--accent) 0%, transparent 30%, transparent 70%, var(--accent) 100%);
|
|
2637
|
+
opacity: 0.2;
|
|
2638
|
+
}
|
|
2639
|
+
|
|
2640
|
+
/* Tree Header */
|
|
2641
|
+
#tree-header {
|
|
2642
|
+
padding: 10px 12px 8px;
|
|
2643
|
+
border-bottom: 1px solid var(--border);
|
|
2644
|
+
flex-shrink: 0;
|
|
2645
|
+
}
|
|
2646
|
+
|
|
2647
|
+
.tree-title-row {
|
|
2648
|
+
display: flex;
|
|
2649
|
+
align-items: center;
|
|
2650
|
+
justify-content: space-between;
|
|
2651
|
+
margin-bottom: 8px;
|
|
2652
|
+
}
|
|
2653
|
+
|
|
2654
|
+
.tree-title {
|
|
2655
|
+
font-size: 10px;
|
|
2656
|
+
font-weight: 700;
|
|
2657
|
+
color: var(--accent);
|
|
2658
|
+
letter-spacing: 3px;
|
|
2659
|
+
}
|
|
2660
|
+
|
|
2661
|
+
.tree-count {
|
|
2662
|
+
font-size: 9px;
|
|
2663
|
+
color: var(--text-secondary);
|
|
2664
|
+
background: rgba(0,212,255,0.08);
|
|
2665
|
+
border: 1px solid var(--border);
|
|
2666
|
+
border-radius: 2px;
|
|
2667
|
+
padding: 1px 6px;
|
|
2668
|
+
font-variant-numeric: tabular-nums;
|
|
2669
|
+
}
|
|
2670
|
+
|
|
2671
|
+
/* Tree Search Bar */
|
|
2672
|
+
#tree-search-bar {
|
|
2673
|
+
display: flex;
|
|
2674
|
+
gap: 4px;
|
|
2675
|
+
align-items: center;
|
|
2676
|
+
position: relative;
|
|
2677
|
+
}
|
|
2678
|
+
|
|
2679
|
+
#tree-search-input {
|
|
2680
|
+
flex: 1;
|
|
2681
|
+
padding: 4px 8px;
|
|
2682
|
+
background: rgba(0,0,0,0.3);
|
|
2683
|
+
color: var(--accent);
|
|
2684
|
+
border: 1px solid var(--border);
|
|
2685
|
+
border-radius: 2px;
|
|
2686
|
+
font-size: 10px;
|
|
2687
|
+
font-family: inherit;
|
|
2688
|
+
letter-spacing: 1px;
|
|
2689
|
+
outline: none;
|
|
2690
|
+
transition: border-color 0.2s;
|
|
2691
|
+
}
|
|
2692
|
+
|
|
2693
|
+
#tree-search-input::placeholder {
|
|
2694
|
+
color: var(--text-secondary);
|
|
2695
|
+
letter-spacing: 2px;
|
|
2696
|
+
font-size: 9px;
|
|
2697
|
+
}
|
|
2698
|
+
|
|
2699
|
+
#tree-search-input:focus {
|
|
2700
|
+
border-color: var(--accent);
|
|
2701
|
+
box-shadow: var(--glow-cyan);
|
|
2702
|
+
}
|
|
2703
|
+
|
|
2704
|
+
.tree-tool-btn {
|
|
2705
|
+
padding: 3px 8px;
|
|
2706
|
+
background: transparent;
|
|
2707
|
+
color: var(--text-secondary);
|
|
2708
|
+
border: 1px solid var(--border);
|
|
2709
|
+
border-radius: 2px;
|
|
2710
|
+
cursor: pointer;
|
|
2711
|
+
font-size: 9px;
|
|
2712
|
+
font-family: inherit;
|
|
2713
|
+
font-weight: 600;
|
|
2714
|
+
letter-spacing: 1px;
|
|
2715
|
+
transition: all 0.2s;
|
|
2716
|
+
}
|
|
2717
|
+
|
|
2718
|
+
.tree-tool-btn:hover {
|
|
2719
|
+
color: var(--accent);
|
|
2720
|
+
border-color: var(--accent);
|
|
2721
|
+
}
|
|
2722
|
+
|
|
2723
|
+
/* Sort Dropdown Menu */
|
|
2724
|
+
#tree-sort-menu {
|
|
2725
|
+
position: absolute;
|
|
2726
|
+
top: 100%;
|
|
2727
|
+
right: 32px;
|
|
2728
|
+
margin-top: 4px;
|
|
2729
|
+
background: rgba(10,22,40,0.97);
|
|
2730
|
+
border: 1px solid var(--accent-dim);
|
|
2731
|
+
border-radius: 3px;
|
|
2732
|
+
z-index: 100;
|
|
2733
|
+
box-shadow: var(--glow-cyan), 0 8px 24px rgba(0,0,0,0.5);
|
|
2734
|
+
backdrop-filter: blur(8px);
|
|
2735
|
+
min-width: 120px;
|
|
2736
|
+
}
|
|
2737
|
+
|
|
2738
|
+
#tree-sort-menu.hidden { display: none; }
|
|
2739
|
+
|
|
2740
|
+
.tree-sort-option {
|
|
2741
|
+
padding: 6px 12px;
|
|
2742
|
+
font-size: 9px;
|
|
2743
|
+
letter-spacing: 2px;
|
|
2744
|
+
color: var(--text-primary);
|
|
2745
|
+
cursor: pointer;
|
|
2746
|
+
transition: all 0.15s;
|
|
2747
|
+
}
|
|
2748
|
+
|
|
2749
|
+
.tree-sort-option:hover {
|
|
2750
|
+
background: rgba(0,212,255,0.12);
|
|
2751
|
+
color: var(--accent);
|
|
2752
|
+
}
|
|
2753
|
+
|
|
2754
|
+
.tree-sort-option.active {
|
|
2755
|
+
color: var(--accent);
|
|
2756
|
+
background: rgba(0,212,255,0.06);
|
|
2757
|
+
}
|
|
2758
|
+
|
|
2759
|
+
/* Tree Scroll Container */
|
|
2760
|
+
#tree-scroll-container {
|
|
2761
|
+
flex: 1;
|
|
2762
|
+
overflow-y: auto;
|
|
2763
|
+
overflow-x: hidden;
|
|
2764
|
+
}
|
|
2765
|
+
|
|
2766
|
+
#tree-scroll-container::-webkit-scrollbar { width: 4px; }
|
|
2767
|
+
#tree-scroll-container::-webkit-scrollbar-track { background: transparent; }
|
|
2768
|
+
#tree-scroll-container::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
|
|
2769
|
+
#tree-scroll-container::-webkit-scrollbar-thumb:hover { background: var(--accent-dim); }
|
|
2770
|
+
|
|
2771
|
+
/* Tree Content */
|
|
2772
|
+
#tree-content {
|
|
2773
|
+
padding: 6px 0 6px 0;
|
|
2774
|
+
}
|
|
2775
|
+
|
|
2776
|
+
/* ═══════════════════════════════════════════ */
|
|
2777
|
+
/* METRO RAIL TREE (GitKraken-style) */
|
|
2778
|
+
/* ═══════════════════════════════════════════ */
|
|
2779
|
+
|
|
2780
|
+
/* ── Tree Group: wraps sibling nodes, draws vertical rail line ── */
|
|
2781
|
+
.tree-group {
|
|
2782
|
+
position: relative;
|
|
2783
|
+
margin-left: 16px;
|
|
2784
|
+
}
|
|
2785
|
+
|
|
2786
|
+
#tree-content > .tree-group {
|
|
2787
|
+
margin-left: 4px;
|
|
2788
|
+
}
|
|
2789
|
+
|
|
2790
|
+
/* Vertical rail line spanning entire group */
|
|
2791
|
+
.tree-group::before {
|
|
2792
|
+
content: '';
|
|
2793
|
+
position: absolute;
|
|
2794
|
+
left: 11px;
|
|
2795
|
+
top: 14px;
|
|
2796
|
+
bottom: 14px;
|
|
2797
|
+
width: 2px;
|
|
2798
|
+
background: linear-gradient(180deg,
|
|
2799
|
+
rgba(0,212,255,0.08),
|
|
2800
|
+
rgba(0,212,255,0.22) 15%,
|
|
2801
|
+
rgba(0,212,255,0.22) 85%,
|
|
2802
|
+
rgba(0,212,255,0.08)
|
|
2803
|
+
);
|
|
2804
|
+
border-radius: 1px;
|
|
2805
|
+
z-index: 1;
|
|
2806
|
+
}
|
|
2807
|
+
|
|
2808
|
+
/* Subtle glow on the line */
|
|
2809
|
+
.tree-group::after {
|
|
2810
|
+
content: '';
|
|
2811
|
+
position: absolute;
|
|
2812
|
+
left: 9px;
|
|
2813
|
+
top: 14px;
|
|
2814
|
+
bottom: 14px;
|
|
2815
|
+
width: 6px;
|
|
2816
|
+
background: rgba(0,212,255,0.04);
|
|
2817
|
+
border-radius: 3px;
|
|
2818
|
+
z-index: 0;
|
|
2819
|
+
filter: blur(2px);
|
|
2820
|
+
}
|
|
2821
|
+
|
|
2822
|
+
.tree-group.single-child::before,
|
|
2823
|
+
.tree-group.single-child::after {
|
|
2824
|
+
display: none;
|
|
2825
|
+
}
|
|
2826
|
+
|
|
2827
|
+
/* ── Tree Node (file/folder row) ── */
|
|
2828
|
+
.tree-node {
|
|
2829
|
+
display: flex;
|
|
2830
|
+
align-items: center;
|
|
2831
|
+
position: relative;
|
|
2832
|
+
min-height: 30px;
|
|
2833
|
+
padding-left: 30px;
|
|
2834
|
+
padding-right: 8px;
|
|
2835
|
+
cursor: pointer;
|
|
2836
|
+
transition: all 0.15s;
|
|
2837
|
+
font-size: 11px;
|
|
2838
|
+
color: var(--text-primary);
|
|
2839
|
+
border-right: 2px solid transparent;
|
|
2840
|
+
}
|
|
2841
|
+
|
|
2842
|
+
.tree-node:hover {
|
|
2843
|
+
background: rgba(0,212,255,0.06);
|
|
2844
|
+
}
|
|
2845
|
+
|
|
2846
|
+
.tree-node:hover .tree-name {
|
|
2847
|
+
color: var(--accent);
|
|
2848
|
+
}
|
|
2849
|
+
|
|
2850
|
+
.tree-node.selected {
|
|
2851
|
+
background: rgba(0,212,255,0.1);
|
|
2852
|
+
border-right-color: var(--accent);
|
|
2853
|
+
}
|
|
2854
|
+
|
|
2855
|
+
.tree-node.compact {
|
|
2856
|
+
min-height: 24px;
|
|
2857
|
+
}
|
|
2858
|
+
|
|
2859
|
+
/* ── The Dot: sits ON the vertical rail line ── */
|
|
2860
|
+
.tree-dot {
|
|
2861
|
+
position: absolute;
|
|
2862
|
+
left: 5px;
|
|
2863
|
+
top: 50%;
|
|
2864
|
+
transform: translateY(-50%);
|
|
2865
|
+
width: 12px;
|
|
2866
|
+
height: 12px;
|
|
2867
|
+
border-radius: 50%;
|
|
2868
|
+
border: 2.5px solid var(--bg-secondary);
|
|
2869
|
+
z-index: 3;
|
|
2870
|
+
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
|
2871
|
+
}
|
|
2872
|
+
|
|
2873
|
+
/* File dots: filled solid */
|
|
2874
|
+
.tree-node[data-type="file"] .tree-dot {
|
|
2875
|
+
/* background + box-shadow set inline via style attr */
|
|
2876
|
+
}
|
|
2877
|
+
|
|
2878
|
+
/* Folder dots: hollow ring with glow */
|
|
2879
|
+
.tree-node[data-type="folder"] .tree-dot {
|
|
2880
|
+
background: var(--bg-secondary) !important;
|
|
2881
|
+
border-width: 2.5px;
|
|
2882
|
+
}
|
|
2883
|
+
|
|
2884
|
+
/* Hover: dot grows + stronger glow */
|
|
2885
|
+
.tree-node:hover .tree-dot {
|
|
2886
|
+
transform: translateY(-50%) scale(1.35);
|
|
2887
|
+
}
|
|
2888
|
+
|
|
2889
|
+
/* Selected: dot pulses */
|
|
2890
|
+
.tree-node.selected .tree-dot {
|
|
2891
|
+
transform: translateY(-50%) scale(1.4);
|
|
2892
|
+
border-color: var(--bg-primary);
|
|
2893
|
+
}
|
|
2894
|
+
|
|
2895
|
+
/* ── Folder toggle arrow (after dot, before name) ── */
|
|
2896
|
+
.tree-toggle {
|
|
2897
|
+
display: inline-flex;
|
|
2898
|
+
align-items: center;
|
|
2899
|
+
justify-content: center;
|
|
2900
|
+
width: 14px;
|
|
2901
|
+
height: 14px;
|
|
2902
|
+
font-size: 7px;
|
|
2903
|
+
color: var(--text-secondary);
|
|
2904
|
+
transition: transform 0.2s ease, color 0.15s;
|
|
2905
|
+
flex-shrink: 0;
|
|
2906
|
+
user-select: none;
|
|
2907
|
+
margin-right: 2px;
|
|
2908
|
+
}
|
|
2909
|
+
|
|
2910
|
+
.tree-toggle.open {
|
|
2911
|
+
transform: rotate(90deg);
|
|
2912
|
+
}
|
|
2913
|
+
|
|
2914
|
+
.tree-node:hover .tree-toggle {
|
|
2915
|
+
color: var(--accent);
|
|
2916
|
+
}
|
|
2917
|
+
|
|
2918
|
+
/* ── Tree node name ── */
|
|
2919
|
+
.tree-name {
|
|
2920
|
+
flex: 1;
|
|
2921
|
+
overflow: hidden;
|
|
2922
|
+
text-overflow: ellipsis;
|
|
2923
|
+
white-space: nowrap;
|
|
2924
|
+
transition: color 0.15s;
|
|
2925
|
+
}
|
|
2926
|
+
|
|
2927
|
+
.tree-name.folder-name {
|
|
2928
|
+
font-weight: 600;
|
|
2929
|
+
color: var(--text-secondary);
|
|
2930
|
+
letter-spacing: 0.3px;
|
|
2931
|
+
}
|
|
2932
|
+
|
|
2933
|
+
.tree-node:hover .tree-name.folder-name {
|
|
2934
|
+
color: var(--accent);
|
|
2935
|
+
}
|
|
2936
|
+
|
|
2937
|
+
/* Folder file count badge */
|
|
2938
|
+
.tree-folder-count {
|
|
2939
|
+
font-size: 8px;
|
|
2940
|
+
color: var(--text-secondary);
|
|
2941
|
+
margin-left: 6px;
|
|
2942
|
+
padding: 0 5px;
|
|
2943
|
+
background: rgba(0,212,255,0.06);
|
|
2944
|
+
border: 1px solid rgba(26,45,77,0.4);
|
|
2945
|
+
border-radius: 8px;
|
|
2946
|
+
font-variant-numeric: tabular-nums;
|
|
2947
|
+
flex-shrink: 0;
|
|
2948
|
+
opacity: 0.7;
|
|
2949
|
+
}
|
|
2950
|
+
|
|
2951
|
+
/* ── Badges ── */
|
|
2952
|
+
.tree-badge {
|
|
2953
|
+
font-size: 8px;
|
|
2954
|
+
padding: 0 4px;
|
|
2955
|
+
border-radius: 2px;
|
|
2956
|
+
margin-left: 4px;
|
|
2957
|
+
font-weight: 700;
|
|
2958
|
+
letter-spacing: 0.5px;
|
|
2959
|
+
flex-shrink: 0;
|
|
2960
|
+
}
|
|
2961
|
+
|
|
2962
|
+
.tree-badge.badge-deps {
|
|
2963
|
+
color: var(--text-secondary);
|
|
2964
|
+
background: rgba(90,117,153,0.15);
|
|
2965
|
+
}
|
|
2966
|
+
|
|
2967
|
+
.tree-badge.badge-lines {
|
|
2968
|
+
color: var(--text-secondary);
|
|
2969
|
+
background: rgba(90,117,153,0.15);
|
|
2970
|
+
}
|
|
2971
|
+
|
|
2972
|
+
.tree-badge.badge-risk-HIGH {
|
|
2973
|
+
color: var(--risk-high);
|
|
2974
|
+
background: rgba(255,45,85,0.15);
|
|
2975
|
+
}
|
|
2976
|
+
|
|
2977
|
+
.tree-badge.badge-risk-MEDIUM {
|
|
2978
|
+
color: var(--risk-medium);
|
|
2979
|
+
background: rgba(255,159,10,0.15);
|
|
2980
|
+
}
|
|
2981
|
+
|
|
2982
|
+
.tree-badge.badge-risk-LOW {
|
|
2983
|
+
color: var(--risk-low);
|
|
2984
|
+
background: rgba(48,209,88,0.15);
|
|
2985
|
+
}
|
|
2986
|
+
|
|
2987
|
+
.tree-badge.badge-risk-NONE {
|
|
2988
|
+
color: var(--risk-none);
|
|
2989
|
+
background: rgba(58,79,111,0.1);
|
|
2990
|
+
}
|
|
2991
|
+
|
|
2992
|
+
/* Modification status badges */
|
|
2993
|
+
.tree-mod-badge {
|
|
2994
|
+
font-size: 8px;
|
|
2995
|
+
font-weight: 700;
|
|
2996
|
+
padding: 0 5px;
|
|
2997
|
+
border-radius: 2px;
|
|
2998
|
+
margin-left: 4px;
|
|
2999
|
+
letter-spacing: 0.5px;
|
|
3000
|
+
flex-shrink: 0;
|
|
3001
|
+
}
|
|
3002
|
+
|
|
3003
|
+
.tree-mod-badge.mod-M {
|
|
3004
|
+
color: var(--risk-medium);
|
|
3005
|
+
background: rgba(255,159,10,0.2);
|
|
3006
|
+
}
|
|
3007
|
+
|
|
3008
|
+
.tree-mod-badge.mod-A {
|
|
3009
|
+
color: var(--risk-low);
|
|
3010
|
+
background: rgba(48,209,88,0.2);
|
|
3011
|
+
}
|
|
3012
|
+
|
|
3013
|
+
.tree-mod-badge.mod-D {
|
|
3014
|
+
color: var(--risk-high);
|
|
3015
|
+
background: rgba(255,45,85,0.2);
|
|
3016
|
+
}
|
|
3017
|
+
|
|
3018
|
+
/* ── Modified file: white pulse animation ── */
|
|
3019
|
+
@keyframes tree-file-pulse {
|
|
3020
|
+
0%, 100% {
|
|
3021
|
+
text-shadow: 0 0 6px rgba(255,255,255,0.3);
|
|
3022
|
+
}
|
|
3023
|
+
50% {
|
|
3024
|
+
text-shadow: 0 0 14px rgba(255,255,255,0.7);
|
|
3025
|
+
}
|
|
3026
|
+
}
|
|
3027
|
+
|
|
3028
|
+
@keyframes tree-dot-pulse {
|
|
3029
|
+
0%, 100% {
|
|
3030
|
+
transform: translateY(-50%) scale(1);
|
|
3031
|
+
box-shadow: 0 0 8px rgba(255,255,255,0.4);
|
|
3032
|
+
}
|
|
3033
|
+
50% {
|
|
3034
|
+
transform: translateY(-50%) scale(1.5);
|
|
3035
|
+
box-shadow: 0 0 16px rgba(255,255,255,0.8);
|
|
3036
|
+
}
|
|
3037
|
+
}
|
|
3038
|
+
|
|
3039
|
+
.tree-node.modified {
|
|
3040
|
+
color: #ffffff;
|
|
3041
|
+
animation: tree-file-pulse 1.5s ease-in-out infinite;
|
|
3042
|
+
}
|
|
3043
|
+
|
|
3044
|
+
.tree-node.modified .tree-name {
|
|
3045
|
+
color: #ffffff;
|
|
3046
|
+
font-weight: 700;
|
|
3047
|
+
}
|
|
3048
|
+
|
|
3049
|
+
.tree-node.modified .tree-dot {
|
|
3050
|
+
background: #ffffff !important;
|
|
3051
|
+
border-color: rgba(255,255,255,0.6) !important;
|
|
3052
|
+
animation: tree-dot-pulse 1.5s ease-in-out infinite;
|
|
3053
|
+
}
|
|
3054
|
+
|
|
3055
|
+
/* Folder glow when child is modified */
|
|
3056
|
+
.tree-node.folder-glow .tree-dot {
|
|
3057
|
+
box-shadow: 0 0 10px rgba(255,255,255,0.3) !important;
|
|
3058
|
+
}
|
|
3059
|
+
|
|
3060
|
+
.tree-node.folder-glow .tree-name {
|
|
3061
|
+
color: rgba(255,255,255,0.6);
|
|
3062
|
+
}
|
|
3063
|
+
|
|
3064
|
+
/* ── Rail line glow when group has modifications ── */
|
|
3065
|
+
.tree-group.has-modified::before {
|
|
3066
|
+
background: linear-gradient(180deg,
|
|
3067
|
+
rgba(0,212,255,0.08),
|
|
3068
|
+
rgba(255,255,255,0.3) 15%,
|
|
3069
|
+
rgba(255,255,255,0.3) 85%,
|
|
3070
|
+
rgba(0,212,255,0.08)
|
|
3071
|
+
);
|
|
3072
|
+
}
|
|
3073
|
+
|
|
3074
|
+
/* ── Checkbox styling for SET panel ── */
|
|
3075
|
+
.set-row-checkbox {
|
|
3076
|
+
justify-content: space-between;
|
|
3077
|
+
}
|
|
3078
|
+
|
|
3079
|
+
.set-row-checkbox input[type="checkbox"] {
|
|
3080
|
+
-webkit-appearance: none;
|
|
3081
|
+
appearance: none;
|
|
3082
|
+
width: 32px;
|
|
3083
|
+
height: 16px;
|
|
3084
|
+
border-radius: 8px;
|
|
3085
|
+
background: var(--border);
|
|
3086
|
+
position: relative;
|
|
3087
|
+
cursor: pointer;
|
|
3088
|
+
transition: all 0.2s;
|
|
3089
|
+
flex-shrink: 0;
|
|
3090
|
+
}
|
|
3091
|
+
|
|
3092
|
+
.set-row-checkbox input[type="checkbox"]::before {
|
|
3093
|
+
content: '';
|
|
3094
|
+
position: absolute;
|
|
3095
|
+
top: 2px;
|
|
3096
|
+
left: 2px;
|
|
3097
|
+
width: 12px;
|
|
3098
|
+
height: 12px;
|
|
3099
|
+
border-radius: 50%;
|
|
3100
|
+
background: var(--text-secondary);
|
|
3101
|
+
transition: all 0.2s;
|
|
3102
|
+
}
|
|
3103
|
+
|
|
3104
|
+
.set-row-checkbox input[type="checkbox"]:checked {
|
|
3105
|
+
background: rgba(0,212,255,0.3);
|
|
3106
|
+
border-color: var(--accent);
|
|
3107
|
+
}
|
|
3108
|
+
|
|
3109
|
+
.set-row-checkbox input[type="checkbox"]:checked::before {
|
|
3110
|
+
left: 18px;
|
|
3111
|
+
background: var(--accent);
|
|
3112
|
+
box-shadow: 0 0 6px rgba(0,212,255,0.5);
|
|
3113
|
+
}
|
|
3114
|
+
|
|
3115
|
+
.set-row-checkbox .set-val {
|
|
3116
|
+
display: none;
|
|
3117
|
+
}
|
package/dist/web/server.js
CHANGED
|
@@ -746,6 +746,7 @@ function createWebServer(getGraphFn, initialFileCache, switchProjectFn, getProje
|
|
|
746
746
|
fileCount: graph.files.size,
|
|
747
747
|
edgeCount,
|
|
748
748
|
plan: license?.plan || "free",
|
|
749
|
+
planSource: license?.source || "default",
|
|
749
750
|
expiresAt: license?.expiresAt || null,
|
|
750
751
|
freeFileLimit: 50,
|
|
751
752
|
sykeVersion,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syke1/mcp-server",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"mcpName": "io.github.khalomsky/syke",
|
|
5
5
|
"description": "AI code impact analysis MCP server — dependency graphs, cascade detection, and a mandatory build gate for AI coding agents",
|
|
6
6
|
"main": "dist/index.js",
|