agent-discover 1.3.8 → 1.4.0

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 (40) hide show
  1. package/CHANGELOG.md +44 -1
  2. package/README.md +34 -8
  3. package/agent-desk-plugin.json +10 -3
  4. package/dist/context.d.ts +2 -0
  5. package/dist/context.d.ts.map +1 -1
  6. package/dist/context.js +15 -0
  7. package/dist/context.js.map +1 -1
  8. package/dist/domain/log.d.ts +7 -3
  9. package/dist/domain/log.d.ts.map +1 -1
  10. package/dist/domain/log.js +15 -5
  11. package/dist/domain/log.js.map +1 -1
  12. package/dist/domain/presets.d.ts +30 -0
  13. package/dist/domain/presets.d.ts.map +1 -0
  14. package/dist/domain/presets.js +76 -0
  15. package/dist/domain/presets.js.map +1 -0
  16. package/dist/domain/proxy.d.ts +153 -0
  17. package/dist/domain/proxy.d.ts.map +1 -1
  18. package/dist/domain/proxy.js +396 -3
  19. package/dist/domain/proxy.js.map +1 -1
  20. package/dist/domain/sampling.d.ts +9 -0
  21. package/dist/domain/sampling.d.ts.map +1 -0
  22. package/dist/domain/sampling.js +68 -0
  23. package/dist/domain/sampling.js.map +1 -0
  24. package/dist/storage/database.js +21 -0
  25. package/dist/storage/database.js.map +1 -1
  26. package/dist/transport/rest.d.ts.map +1 -1
  27. package/dist/transport/rest.js +349 -0
  28. package/dist/transport/rest.js.map +1 -1
  29. package/dist/transport/ws.d.ts.map +1 -1
  30. package/dist/transport/ws.js +32 -0
  31. package/dist/transport/ws.js.map +1 -1
  32. package/dist/ui/app.js +16 -0
  33. package/dist/ui/index.html +3 -0
  34. package/dist/ui/markdown.js +102 -0
  35. package/dist/ui/schema-form.js +393 -0
  36. package/dist/ui/styles.css +724 -0
  37. package/dist/ui/tester-window.html +116 -0
  38. package/dist/ui/tester-window.js +153 -0
  39. package/dist/ui/tester.js +1412 -0
  40. package/package.json +1 -1
@@ -1627,3 +1627,727 @@ body {
1627
1627
  padding: 6px 10px;
1628
1628
  }
1629
1629
  }
1630
+
1631
+ /* ============================================================
1632
+ * Tester (MCP Inspector-parity drawer)
1633
+ * ============================================================ */
1634
+
1635
+ .tester-shell {
1636
+ display: flex;
1637
+ flex-direction: column;
1638
+ gap: 8px;
1639
+ padding: 8px 0;
1640
+ }
1641
+
1642
+ .tester-tabs {
1643
+ display: flex;
1644
+ flex-wrap: wrap;
1645
+ gap: 4px;
1646
+ border-bottom: 1px solid var(--border);
1647
+ padding-bottom: 6px;
1648
+ }
1649
+
1650
+ .tester-tab {
1651
+ background: transparent;
1652
+ border: 1px solid transparent;
1653
+ color: var(--text-muted);
1654
+ padding: 4px 10px;
1655
+ font-size: 12px;
1656
+ font-weight: 500;
1657
+ cursor: pointer;
1658
+ border-radius: 4px;
1659
+ }
1660
+
1661
+ .tester-tab:hover:not(.disabled) {
1662
+ background: var(--bg-alt);
1663
+ color: var(--text);
1664
+ }
1665
+
1666
+ .tester-tab.active {
1667
+ background: var(--accent);
1668
+ color: var(--btn-fg);
1669
+ border-color: var(--accent);
1670
+ }
1671
+
1672
+ .tester-tab.disabled {
1673
+ opacity: 0.45;
1674
+ cursor: not-allowed;
1675
+ }
1676
+
1677
+ .tester-popout {
1678
+ margin-left: auto;
1679
+ background: transparent;
1680
+ border: 1px solid var(--border);
1681
+ border-radius: 4px;
1682
+ padding: 2px 6px;
1683
+ cursor: pointer;
1684
+ color: var(--text-muted);
1685
+ }
1686
+
1687
+ .tester-popout:hover {
1688
+ color: var(--accent);
1689
+ border-color: var(--accent);
1690
+ }
1691
+
1692
+ .tester-body {
1693
+ font-size: 13px;
1694
+ }
1695
+
1696
+ .tester-split {
1697
+ display: grid;
1698
+ grid-template-columns: minmax(160px, 220px) 1fr;
1699
+ gap: 12px;
1700
+ }
1701
+
1702
+ .tester-list {
1703
+ display: flex;
1704
+ flex-direction: column;
1705
+ gap: 4px;
1706
+ max-height: 420px;
1707
+ overflow-y: auto;
1708
+ }
1709
+
1710
+ .tester-listitem {
1711
+ background: var(--bg-alt);
1712
+ border: 1px solid var(--border);
1713
+ border-radius: 4px;
1714
+ padding: 6px 8px;
1715
+ text-align: left;
1716
+ cursor: pointer;
1717
+ font-family: inherit;
1718
+ }
1719
+
1720
+ .tester-listitem:hover {
1721
+ border-color: var(--accent);
1722
+ }
1723
+
1724
+ .tester-listitem.active {
1725
+ border-color: var(--accent);
1726
+ background: var(--bg);
1727
+ box-shadow: inset 2px 0 0 var(--accent);
1728
+ }
1729
+
1730
+ .tester-listitem-name {
1731
+ font-weight: 600;
1732
+ font-size: 12px;
1733
+ font-family: 'JetBrains Mono', monospace;
1734
+ color: var(--accent);
1735
+ overflow: hidden;
1736
+ text-overflow: ellipsis;
1737
+ white-space: nowrap;
1738
+ }
1739
+
1740
+ .tester-listitem-desc {
1741
+ color: var(--text-muted);
1742
+ font-size: 11px;
1743
+ margin-top: 3px;
1744
+ line-height: 1.35;
1745
+ display: -webkit-box;
1746
+ -webkit-line-clamp: 2;
1747
+ -webkit-box-orient: vertical;
1748
+ overflow: hidden;
1749
+ }
1750
+
1751
+ .tester-detail {
1752
+ min-width: 0;
1753
+ }
1754
+
1755
+ .tester-form-head {
1756
+ margin-bottom: 8px;
1757
+ }
1758
+
1759
+ .tester-desc {
1760
+ color: var(--text-muted);
1761
+ font-size: 12px;
1762
+ margin: 4px 0;
1763
+ }
1764
+
1765
+ .tester-form-fields,
1766
+ .tester-prompt-fields {
1767
+ display: flex;
1768
+ flex-direction: column;
1769
+ gap: 8px;
1770
+ }
1771
+
1772
+ .sf-field {
1773
+ display: flex;
1774
+ flex-direction: column;
1775
+ gap: 3px;
1776
+ }
1777
+
1778
+ .sf-field label {
1779
+ font-size: 11px;
1780
+ text-transform: uppercase;
1781
+ letter-spacing: 0.06em;
1782
+ color: var(--text-muted);
1783
+ font-weight: 600;
1784
+ }
1785
+
1786
+ .sf-field-bool label {
1787
+ text-transform: none;
1788
+ letter-spacing: 0;
1789
+ font-size: 13px;
1790
+ color: var(--text);
1791
+ font-weight: 500;
1792
+ }
1793
+
1794
+ .sf-bool-label {
1795
+ display: inline-flex;
1796
+ align-items: center;
1797
+ gap: 6px;
1798
+ }
1799
+
1800
+ .sf-input {
1801
+ background: var(--bg);
1802
+ border: 1px solid var(--border);
1803
+ border-radius: 4px;
1804
+ padding: 5px 8px;
1805
+ color: var(--text);
1806
+ font-family: inherit;
1807
+ font-size: 13px;
1808
+ }
1809
+
1810
+ .sf-input:focus {
1811
+ outline: none;
1812
+ border-color: var(--accent);
1813
+ }
1814
+
1815
+ .sf-textarea {
1816
+ font-family: 'JetBrains Mono', monospace;
1817
+ font-size: 12px;
1818
+ min-height: 60px;
1819
+ }
1820
+
1821
+ .sf-desc {
1822
+ font-size: 11px;
1823
+ color: var(--text-muted);
1824
+ }
1825
+
1826
+ .sf-hint {
1827
+ font-size: 10px;
1828
+ color: var(--text-muted);
1829
+ text-transform: none;
1830
+ letter-spacing: 0;
1831
+ }
1832
+
1833
+ .sf-req {
1834
+ color: #c9394b;
1835
+ }
1836
+
1837
+ .sf-field-object {
1838
+ border: 1px solid var(--border);
1839
+ border-radius: 4px;
1840
+ padding: 8px 10px;
1841
+ }
1842
+
1843
+ .sf-field-object legend {
1844
+ font-size: 11px;
1845
+ text-transform: uppercase;
1846
+ color: var(--text-muted);
1847
+ padding: 0 6px;
1848
+ }
1849
+
1850
+ .sf-array-rows {
1851
+ display: flex;
1852
+ flex-direction: column;
1853
+ gap: 4px;
1854
+ }
1855
+
1856
+ .sf-array-row {
1857
+ display: flex;
1858
+ align-items: flex-end;
1859
+ gap: 6px;
1860
+ }
1861
+
1862
+ .sf-array-row .sf-field {
1863
+ flex: 1;
1864
+ }
1865
+
1866
+ .sf-array-add,
1867
+ .sf-array-remove {
1868
+ background: var(--bg-alt);
1869
+ border: 1px solid var(--border);
1870
+ color: var(--text);
1871
+ border-radius: 4px;
1872
+ padding: 3px 8px;
1873
+ cursor: pointer;
1874
+ font-size: 12px;
1875
+ }
1876
+
1877
+ .sf-array-add:hover,
1878
+ .sf-array-remove:hover {
1879
+ border-color: var(--accent);
1880
+ }
1881
+
1882
+ .tester-form-actions {
1883
+ display: flex;
1884
+ gap: 6px;
1885
+ margin-top: 8px;
1886
+ align-items: center;
1887
+ flex-wrap: wrap;
1888
+ }
1889
+
1890
+ .tester-preset-sel {
1891
+ background: var(--bg);
1892
+ color: var(--text);
1893
+ border: 1px solid var(--border);
1894
+ border-radius: 4px;
1895
+ padding: 4px 6px;
1896
+ font-size: 12px;
1897
+ }
1898
+
1899
+ .tester-result {
1900
+ margin-top: 12px;
1901
+ border: 1px solid var(--border);
1902
+ border-radius: 4px;
1903
+ background: var(--bg);
1904
+ }
1905
+
1906
+ .tester-result.loading {
1907
+ padding: 10px;
1908
+ color: var(--text-muted);
1909
+ }
1910
+
1911
+ .tester-result.error {
1912
+ padding: 10px;
1913
+ color: #c9394b;
1914
+ border-color: #c9394b;
1915
+ }
1916
+
1917
+ .tester-result-tabs {
1918
+ display: flex;
1919
+ gap: 4px;
1920
+ border-bottom: 1px solid var(--border);
1921
+ padding: 4px 6px;
1922
+ align-items: center;
1923
+ }
1924
+
1925
+ .tester-result-tabs button {
1926
+ background: transparent;
1927
+ border: 1px solid transparent;
1928
+ color: var(--text-muted);
1929
+ padding: 2px 8px;
1930
+ font-size: 11px;
1931
+ cursor: pointer;
1932
+ border-radius: 3px;
1933
+ }
1934
+
1935
+ .tester-result-tabs button.active {
1936
+ background: var(--bg-alt);
1937
+ color: var(--text);
1938
+ border-color: var(--border);
1939
+ }
1940
+
1941
+ .tester-pill {
1942
+ margin-left: auto;
1943
+ font-size: 11px;
1944
+ padding: 1px 6px;
1945
+ border-radius: 10px;
1946
+ text-transform: uppercase;
1947
+ letter-spacing: 0.06em;
1948
+ }
1949
+
1950
+ .tester-pill.ok {
1951
+ background: rgba(39, 174, 96, 0.15);
1952
+ color: #27ae60;
1953
+ }
1954
+
1955
+ .tester-pill.fail {
1956
+ background: rgba(201, 57, 75, 0.15);
1957
+ color: #c9394b;
1958
+ }
1959
+
1960
+ .tester-latency {
1961
+ font-size: 11px;
1962
+ color: var(--text-muted);
1963
+ margin-left: 8px;
1964
+ }
1965
+
1966
+ .tester-result-body {
1967
+ padding: 10px;
1968
+ max-height: 360px;
1969
+ overflow: auto;
1970
+ }
1971
+
1972
+ .tester-result-raw pre,
1973
+ .tester-curl,
1974
+ .tester-event-payload {
1975
+ font-family: 'JetBrains Mono', monospace;
1976
+ font-size: 12px;
1977
+ color: var(--text);
1978
+ white-space: pre-wrap;
1979
+ word-break: break-word;
1980
+ margin: 0;
1981
+ }
1982
+
1983
+ .tester-content-text {
1984
+ font-size: 13px;
1985
+ line-height: 1.5;
1986
+ }
1987
+
1988
+ .md-code {
1989
+ background: var(--bg-alt);
1990
+ border-radius: 4px;
1991
+ padding: 6px 8px;
1992
+ font-family: 'JetBrains Mono', monospace;
1993
+ font-size: 12px;
1994
+ overflow-x: auto;
1995
+ }
1996
+
1997
+ .tester-content-img,
1998
+ .tester-content-audio {
1999
+ max-width: 100%;
2000
+ border: 1px solid var(--border);
2001
+ border-radius: 4px;
2002
+ margin: 4px 0;
2003
+ }
2004
+
2005
+ .tester-content-resource {
2006
+ padding: 6px 8px;
2007
+ background: var(--bg-alt);
2008
+ border-radius: 4px;
2009
+ font-size: 12px;
2010
+ margin: 2px 0;
2011
+ }
2012
+
2013
+ .tester-messages {
2014
+ display: flex;
2015
+ flex-direction: column;
2016
+ gap: 6px;
2017
+ margin-top: 10px;
2018
+ }
2019
+
2020
+ .tester-message {
2021
+ border: 1px solid var(--border);
2022
+ border-radius: 4px;
2023
+ padding: 8px 10px;
2024
+ }
2025
+
2026
+ .tester-msg-role {
2027
+ font-size: 10px;
2028
+ text-transform: uppercase;
2029
+ letter-spacing: 0.08em;
2030
+ color: var(--text-muted);
2031
+ margin-bottom: 4px;
2032
+ }
2033
+
2034
+ .tester-msg-body {
2035
+ font-size: 13px;
2036
+ }
2037
+
2038
+ .tester-events {
2039
+ display: flex;
2040
+ flex-direction: column;
2041
+ gap: 4px;
2042
+ max-height: 420px;
2043
+ overflow: auto;
2044
+ }
2045
+
2046
+ .tester-event {
2047
+ border: 1px solid var(--border);
2048
+ border-radius: 4px;
2049
+ padding: 6px 8px;
2050
+ font-size: 12px;
2051
+ background: var(--bg);
2052
+ display: grid;
2053
+ grid-template-columns: 80px 90px 1fr;
2054
+ gap: 8px;
2055
+ align-items: start;
2056
+ }
2057
+
2058
+ .tester-event-ts {
2059
+ color: var(--text-muted);
2060
+ font-family: 'JetBrains Mono', monospace;
2061
+ }
2062
+
2063
+ .tester-event-kind {
2064
+ color: var(--accent);
2065
+ font-weight: 600;
2066
+ }
2067
+
2068
+ .tester-event-payload {
2069
+ grid-column: 1 / -1;
2070
+ max-height: 120px;
2071
+ overflow: auto;
2072
+ }
2073
+
2074
+ .tester-info-grid {
2075
+ display: grid;
2076
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
2077
+ gap: 10px;
2078
+ margin-bottom: 10px;
2079
+ }
2080
+
2081
+ .tester-info-grid > div {
2082
+ display: flex;
2083
+ flex-direction: column;
2084
+ }
2085
+
2086
+ .tester-info-k {
2087
+ font-size: 10px;
2088
+ text-transform: uppercase;
2089
+ letter-spacing: 0.06em;
2090
+ color: var(--text-muted);
2091
+ }
2092
+
2093
+ .tester-info-v {
2094
+ font-size: 13px;
2095
+ color: var(--text);
2096
+ font-weight: 500;
2097
+ }
2098
+
2099
+ .tester-info-instr {
2100
+ margin: 10px 0;
2101
+ padding: 8px 10px;
2102
+ background: var(--bg-alt);
2103
+ border-radius: 4px;
2104
+ }
2105
+
2106
+ .tester-info-instr h4,
2107
+ .tester-diagnostics h4 {
2108
+ margin: 0 0 6px 0;
2109
+ font-size: 12px;
2110
+ }
2111
+
2112
+ .tester-caps {
2113
+ display: flex;
2114
+ flex-direction: column;
2115
+ gap: 2px;
2116
+ }
2117
+
2118
+ .tester-cap-row {
2119
+ display: flex;
2120
+ justify-content: space-between;
2121
+ gap: 8px;
2122
+ font-size: 12px;
2123
+ font-family: 'JetBrains Mono', monospace;
2124
+ padding: 3px 6px;
2125
+ border-radius: 3px;
2126
+ background: var(--bg-alt);
2127
+ }
2128
+
2129
+ .tester-cap-name {
2130
+ color: var(--accent);
2131
+ }
2132
+
2133
+ .tester-cap-val {
2134
+ color: var(--text-muted);
2135
+ word-break: break-all;
2136
+ }
2137
+
2138
+ .tester-form-row {
2139
+ display: flex;
2140
+ align-items: center;
2141
+ gap: 8px;
2142
+ padding: 6px 0;
2143
+ font-size: 13px;
2144
+ }
2145
+
2146
+ .tester-form-row label {
2147
+ min-width: 120px;
2148
+ font-size: 11px;
2149
+ text-transform: uppercase;
2150
+ letter-spacing: 0.06em;
2151
+ color: var(--text-muted);
2152
+ }
2153
+
2154
+ /* floating panel CSS removed — pop-out is now a real browser window (see
2155
+ * /tester/:id route + tester-window.html). */
2156
+
2157
+ /* Unified scrollbars — Chromium/Safari */
2158
+ *::-webkit-scrollbar {
2159
+ width: 10px;
2160
+ height: 10px;
2161
+ }
2162
+
2163
+ *::-webkit-scrollbar-track {
2164
+ background: transparent;
2165
+ }
2166
+
2167
+ *::-webkit-scrollbar-thumb {
2168
+ background: var(--border);
2169
+ border-radius: 10px;
2170
+ border: 2px solid transparent;
2171
+ background-clip: content-box;
2172
+ }
2173
+
2174
+ *::-webkit-scrollbar-thumb:hover {
2175
+ background: var(--text-muted);
2176
+ background-clip: content-box;
2177
+ border: 2px solid transparent;
2178
+ }
2179
+
2180
+ *::-webkit-scrollbar-corner {
2181
+ background: transparent;
2182
+ }
2183
+
2184
+ /* Firefox */
2185
+ * {
2186
+ scrollbar-width: thin;
2187
+ scrollbar-color: var(--border) transparent;
2188
+ }
2189
+
2190
+ .tester-export-head {
2191
+ display: flex;
2192
+ align-items: center;
2193
+ justify-content: space-between;
2194
+ gap: 10px;
2195
+ margin-bottom: 8px;
2196
+ }
2197
+
2198
+ .tester-segmented {
2199
+ display: inline-flex;
2200
+ border: 1px solid var(--border);
2201
+ border-radius: 6px;
2202
+ overflow: hidden;
2203
+ }
2204
+
2205
+ .tester-seg {
2206
+ background: transparent;
2207
+ color: var(--text-muted);
2208
+ border: none;
2209
+ border-right: 1px solid var(--border);
2210
+ padding: 6px 14px;
2211
+ font-size: 12px;
2212
+ font-weight: 500;
2213
+ cursor: pointer;
2214
+ font-family: inherit;
2215
+ }
2216
+
2217
+ .tester-seg:last-child {
2218
+ border-right: none;
2219
+ }
2220
+
2221
+ .tester-seg:hover {
2222
+ background: var(--bg-alt);
2223
+ color: var(--text);
2224
+ }
2225
+
2226
+ .tester-seg.active {
2227
+ background: var(--accent);
2228
+ color: var(--btn-fg, #fff);
2229
+ }
2230
+
2231
+ .tester-copy-btn {
2232
+ display: inline-flex;
2233
+ align-items: center;
2234
+ gap: 4px;
2235
+ background: var(--bg-alt);
2236
+ color: var(--text);
2237
+ border: 1px solid var(--border);
2238
+ border-radius: 6px;
2239
+ padding: 6px 10px;
2240
+ font-size: 12px;
2241
+ font-family: inherit;
2242
+ cursor: pointer;
2243
+ }
2244
+
2245
+ .tester-copy-btn:hover {
2246
+ border-color: var(--accent);
2247
+ color: var(--accent);
2248
+ }
2249
+
2250
+ .tester-copy-btn.copied {
2251
+ border-color: #27ae60;
2252
+ color: #27ae60;
2253
+ }
2254
+
2255
+ .tester-export-hint {
2256
+ color: var(--text-muted);
2257
+ font-size: 11px;
2258
+ margin-bottom: 8px;
2259
+ }
2260
+
2261
+ .tester-result-raw .jk {
2262
+ color: #c9394b;
2263
+ }
2264
+
2265
+ .tester-result-raw .js {
2266
+ color: #27ae60;
2267
+ }
2268
+
2269
+ .tester-result-raw .jn {
2270
+ color: #8e44ad;
2271
+ }
2272
+
2273
+ .tester-result-raw .jb {
2274
+ color: #2980b9;
2275
+ }
2276
+
2277
+ .md h1,
2278
+ .md h2,
2279
+ .md h3,
2280
+ .md h4 {
2281
+ margin: 8px 0 4px 0;
2282
+ }
2283
+
2284
+ .md p {
2285
+ margin: 4px 0;
2286
+ }
2287
+
2288
+ .md ul,
2289
+ .md ol {
2290
+ margin: 4px 0 4px 20px;
2291
+ }
2292
+
2293
+ .tester-elicit-backdrop {
2294
+ position: fixed;
2295
+ inset: 0;
2296
+ background: rgba(0, 0, 0, 0.55);
2297
+ z-index: 10000;
2298
+ display: flex;
2299
+ align-items: center;
2300
+ justify-content: center;
2301
+ padding: 24px;
2302
+ }
2303
+
2304
+ .tester-elicit-modal {
2305
+ background: var(--bg);
2306
+ border: 1px solid var(--border);
2307
+ border-radius: 10px;
2308
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.45);
2309
+ width: min(560px, 100%);
2310
+ max-height: 85vh;
2311
+ display: flex;
2312
+ flex-direction: column;
2313
+ overflow: hidden;
2314
+ }
2315
+
2316
+ .tester-elicit-head {
2317
+ display: flex;
2318
+ align-items: center;
2319
+ gap: 8px;
2320
+ padding: 10px 14px;
2321
+ border-bottom: 1px solid var(--border);
2322
+ background: var(--bg-alt);
2323
+ }
2324
+
2325
+ .tester-elicit-message {
2326
+ padding: 12px 14px;
2327
+ font-size: 13px;
2328
+ color: var(--text);
2329
+ max-height: 200px;
2330
+ overflow: auto;
2331
+ border-bottom: 1px solid var(--border);
2332
+ }
2333
+
2334
+ .tester-elicit-form {
2335
+ padding: 12px 14px;
2336
+ overflow: auto;
2337
+ flex: 1;
2338
+ }
2339
+
2340
+ .tester-elicit-form .sf-form-root {
2341
+ display: flex;
2342
+ flex-direction: column;
2343
+ gap: 10px;
2344
+ }
2345
+
2346
+ .tester-elicit-actions {
2347
+ display: flex;
2348
+ gap: 6px;
2349
+ justify-content: flex-end;
2350
+ padding: 10px 14px;
2351
+ border-top: 1px solid var(--border);
2352
+ background: var(--bg-alt);
2353
+ }