diff --git a/lib/web/machineid.go b/lib/web/machineid.go index e0c4fa343ca63..65e911b45785e 100644 --- a/lib/web/machineid.go +++ b/lib/web/machineid.go @@ -439,6 +439,7 @@ func (h *Handler) listBotInstances(_ http.ResponseWriter, r *http.Request, _ htt uiInstance.HostNameLatest = heartbeat.Hostname uiInstance.VersionLatest = heartbeat.Version uiInstance.ActiveAtLatest = heartbeat.RecordedAt.AsTime().Format(time.RFC3339) + uiInstance.OSLatest = heartbeat.Os } return uiInstance @@ -462,4 +463,5 @@ type BotInstance struct { HostNameLatest string `json:"host_name_latest,omitempty"` VersionLatest string `json:"version_latest,omitempty"` ActiveAtLatest string `json:"active_at_latest,omitempty"` + OSLatest string `json:"os_latest,omitempty"` } diff --git a/lib/web/machineid_test.go b/lib/web/machineid_test.go index c1403dea6d2f1..451c0ad851318 100644 --- a/lib/web/machineid_test.go +++ b/lib/web/machineid_test.go @@ -593,6 +593,7 @@ func TestListBotInstances(t *testing.T) { Version: "1.0.0", Hostname: "test-hostname", JoinMethod: "test-join-method", + Os: "linux", }, }, }, @@ -616,6 +617,7 @@ func TestListBotInstances(t *testing.T) { HostNameLatest: "test-hostname", VersionLatest: "1.0.0", ActiveAtLatest: "1970-01-01T00:00:03Z", + OSLatest: "linux", }, }, })) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e2dfecb76bc52..81554baaa3148 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -323,6 +323,13 @@ importers: highlight-words-core: specifier: ^1.2.3 version: 1.2.3 + semver: + specifier: ^7.7.2 + version: 7.7.2 + devDependencies: + '@types/semver': + specifier: ^7.7.0 + version: 7.7.0 web/packages/teleport: dependencies: @@ -2765,6 +2772,9 @@ packages: '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/semver@7.7.0': + resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} + '@types/shimmer@1.2.0': resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} @@ -5967,8 +5977,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true @@ -7951,7 +7961,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.1 + semver: 7.7.2 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -7990,7 +8000,7 @@ snapshots: node-api-version: 0.2.1 ora: 5.4.1 read-binary-file-arch: 1.0.6 - semver: 7.7.1 + semver: 7.7.2 tar: 6.2.1 yargs: 17.7.2 transitivePeerDependencies: @@ -8263,7 +8273,7 @@ snapshots: '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 prettier: 3.5.3 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color @@ -8708,11 +8718,11 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.1 + semver: 7.7.2 '@npmcli/fs@4.0.0': dependencies: - semver: 7.7.1 + semver: 7.7.2 '@npmcli/move-file@2.0.1': dependencies: @@ -8827,7 +8837,7 @@ snapshots: '@types/shimmer': 1.2.0 import-in-the-middle: 1.13.1 require-in-the-middle: 7.5.2 - semver: 7.7.1 + semver: 7.7.2 shimmer: 1.2.1 transitivePeerDependencies: - supports-color @@ -9458,6 +9468,8 @@ snapshots: dependencies: '@types/node': 22.15.16 + '@types/semver@7.7.0': {} + '@types/shimmer@1.2.0': {} '@types/stack-utils@2.0.3': {} @@ -9562,7 +9574,7 @@ snapshots: fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 + semver: 7.7.2 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -9786,7 +9798,7 @@ snapshots: minimatch: 10.0.1 plist: 3.1.0 resedit: 1.7.2 - semver: 7.7.1 + semver: 7.7.2 tar: 6.2.1 temp-file: 3.4.0 tiny-async-pool: 1.3.0 @@ -10496,7 +10508,7 @@ snapshots: cspell-lib: 9.0.1 fast-json-stable-stringify: 2.1.0 file-entry-cache: 9.1.0 - semver: 7.7.1 + semver: 7.7.2 tinyglobby: 0.2.13 css-color-keywords@1.0.0: {} @@ -11508,7 +11520,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.7.1 + semver: 7.7.2 serialize-error: 7.0.1 optional: true @@ -11892,7 +11904,7 @@ snapshots: '@babel/parser': 7.27.1 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color @@ -12215,7 +12227,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color @@ -12472,7 +12484,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 make-fetch-happen@10.2.1: dependencies: @@ -12691,7 +12703,7 @@ snapshots: node-abi@3.75.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 node-addon-api@1.7.2: optional: true @@ -12700,7 +12712,7 @@ snapshots: node-api-version@0.2.1: dependencies: - semver: 7.7.1 + semver: 7.7.2 node-forge@1.3.1: {} @@ -12712,7 +12724,7 @@ snapshots: make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 - semver: 7.7.1 + semver: 7.7.2 tar: 7.4.3 tinyglobby: 0.2.13 which: 5.0.0 @@ -13418,7 +13430,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.1: {} + semver@7.7.2: {} send@1.2.0: dependencies: @@ -13522,7 +13534,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 sisteransi@1.0.5: {} @@ -13611,7 +13623,7 @@ snapshots: esbuild: 0.25.4 esbuild-register: 3.6.0(esbuild@0.25.4) recast: 0.23.11 - semver: 7.7.1 + semver: 7.7.2 ws: 8.18.2 optionalDependencies: prettier: 3.5.3 diff --git a/web/packages/design/src/Icon/Icons/ModelContextProtocol.tsx b/web/packages/design/src/Icon/Icons/ModelContextProtocol.tsx index 22f68193dd154..8398f18dc44d1 100644 --- a/web/packages/design/src/Icon/Icons/ModelContextProtocol.tsx +++ b/web/packages/design/src/Icon/Icons/ModelContextProtocol.tsx @@ -59,8 +59,9 @@ export const ModelContextProtocol = forwardRef( {...otherProps} ref={ref} > - - + + + ) ); diff --git a/web/packages/design/src/Label/Label.tsx b/web/packages/design/src/Label/Label.tsx index 783410b32dafd..324891ab20642 100644 --- a/web/packages/design/src/Label/Label.tsx +++ b/web/packages/design/src/Label/Label.tsx @@ -52,13 +52,35 @@ const kind = ({ kind, theme }: { kind?: LabelKind; theme: Theme }) => { }; } - if (kind === 'outline') { + if (kind === 'outline-secondary') { return { + color: theme.colors.text.main, + backgroundColor: 'transparent', borderColor: theme.colors.interactive.tonal.neutral[0], borderWidth: 1, borderStyle: 'solid', - backgroundColor: 'transparent', - color: theme.colors.text.main, + fontWeight: theme.fontWeights.regular, + }; + } + + if (kind === 'outline-warning') { + return { + color: theme.colors.interactive.solid.alert.default, + backgroundColor: theme.colors.interactive.tonal.alert[0], + borderColor: theme.colors.interactive.tonal.alert[2], + borderWidth: 1, + borderStyle: 'solid', + fontWeight: theme.fontWeights.regular, + }; + } + + if (kind === 'outline-danger') { + return { + color: theme.colors.interactive.solid.danger.default, + backgroundColor: theme.colors.interactive.tonal.danger[0], + borderColor: theme.colors.interactive.tonal.danger[2], + borderWidth: 1, + borderStyle: 'solid', fontWeight: theme.fontWeights.regular, }; } @@ -73,10 +95,12 @@ const kind = ({ kind, theme }: { kind?: LabelKind; theme: Theme }) => { export type LabelKind = | 'primary' | 'secondary' - | 'outline' | 'warning' | 'danger' - | 'success'; + | 'success' + | 'outline-secondary' + | 'outline-warning' + | 'outline-danger'; interface LabelProps extends SpaceProps { kind?: LabelKind; @@ -107,12 +131,18 @@ export const Primary = (props: LabelPropsWithoutKind) => ( export const Secondary = (props: LabelPropsWithoutKind) => (