@repobit/dex-system-design 0.25.12 → 0.26.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.
- package/CHANGELOG.md +187 -0
- package/README.md +131 -8
- package/package.json +95 -13
- package/schemas/component-manifest.json +3294 -405
- package/schemas/manifest-omissions.json +173 -0
- package/src/blog/src/breakpoints.js +6 -6
- package/src/blog/src/content/blog-atoms-showcase.js +1 -1
- package/src/blog/src/content/blog-page-layout.js +2 -2
- package/src/blog/src/lib/article-toc.js +7 -7
- package/src/blog/src/shell/blog-shell.js +1 -1
- package/src/blog/src/tokens/blog.js +2 -2
- package/src/blog/src/tokens/core.js +34 -35
- package/src/blog/src/tokens/legacy.js +0 -9
- package/src/blog/tokens/blog.js +2 -2
- package/src/blog/tokens/core.js +34 -35
- package/src/blog/tokens/legacy.js +0 -9
- package/src/blog/tokens.css +36 -46
- package/src/components/accordion/accordion-bg.css.js +83 -59
- package/src/components/accordion/accordion-bg.js +29 -10
- package/src/components/accordion/accordion-bg.stories.js +67 -67
- package/src/components/accordion/accordion-keyboard.js +80 -0
- package/src/components/accordion/accordion.css.js +142 -80
- package/src/components/accordion/accordion.js +37 -10
- package/src/components/accordion/accordion.stories.js +7 -7
- package/src/components/agent-endpoints/agent-endpoints.css.js +36 -39
- package/src/components/agent-endpoints/agent-endpoints.js +30 -20
- package/src/components/agent-endpoints/agent-endpoints.stories.js +1 -1
- package/src/components/ai-guardian-demo.stories.js +91 -91
- package/src/components/alert/alert.css.js +198 -0
- package/src/components/alert/alert.js +103 -0
- package/src/components/alert/alert.stories.js +206 -0
- package/src/components/anchor/anchor-nav.css.js +213 -101
- package/src/components/anchor/anchor-nav.js +26 -40
- package/src/components/anchor/anchor.stories.js +22 -12
- package/src/components/annotation/annotation.css.js +58 -0
- package/src/components/annotation/annotation.js +67 -0
- package/src/components/annotation/annotation.stories.js +63 -0
- package/src/components/architecture.stories.js +285 -0
- package/src/components/atoms.stories.js +342 -0
- package/src/components/avatar/avatar.css.js +67 -0
- package/src/components/avatar/avatar.js +42 -0
- package/src/components/avatar/avatar.stories.js +95 -0
- package/src/components/awards/awards-flex.css.js +209 -23
- package/src/components/awards/awards-flex.js +66 -7
- package/src/components/awards/awards-flex.stories.js +1 -1
- package/src/components/awards/{awards-light.stories.js → awards-summary.stories.js} +54 -64
- package/src/components/awards/awards.css.js +116 -58
- package/src/components/awards/awards.js +102 -28
- package/src/components/awards/awards.stories.js +1 -1
- package/src/components/back/back.css.js +51 -22
- package/src/components/back/back.js +28 -7
- package/src/components/back/back.stories.js +9 -3
- package/src/components/badge/badge.css.js +158 -46
- package/src/components/badge/badge.js +62 -74
- package/src/components/badge/badge.stories.js +176 -248
- package/src/components/bento-grid/bento-grid.css.js +21 -16
- package/src/components/bento-grid/bento-grid.js +16 -4
- package/src/components/bento-grid/bento-grid.stories.js +19 -18
- package/src/components/bento-grid/bento-item.css.js +52 -28
- package/src/components/bento-grid/bento-item.js +2 -2
- package/src/components/blockquote/blockquote.css.js +47 -0
- package/src/components/blockquote/blockquote.js +29 -0
- package/src/components/blockquote/blockquote.stories.js +62 -0
- package/src/components/breadcrumb/breadcrumb.css.js +92 -22
- package/src/components/breadcrumb/breadcrumb.js +56 -11
- package/src/components/button/button.css.js +531 -161
- package/src/components/button/button.js +206 -214
- package/src/components/button/button.stories.js +322 -174
- package/src/components/caption/caption.css.js +21 -0
- package/src/components/caption/caption.js +31 -0
- package/src/components/caption/caption.stories.js +62 -0
- package/src/components/card-features/card-features.css.js +14 -22
- package/src/components/card-features/card-features.js +68 -9
- package/src/components/card-features/card-features.stories.js +11 -11
- package/src/components/cards/card.css.js +60 -81
- package/src/components/cards/card.js +56 -25
- package/src/components/cards/card.stories.js +39 -39
- package/src/components/carousel/carousel.css.js +93 -99
- package/src/components/carousel/carousel.js +32 -4
- package/src/components/checkbox/checkbox.css.js +111 -93
- package/src/components/checkbox/checkbox.js +64 -90
- package/src/components/checkbox/checkbox.stories.js +96 -29
- package/src/components/code/code.css.js +70 -0
- package/src/components/code/code.js +40 -0
- package/src/components/code/code.stories.js +73 -0
- package/src/components/compare/compare.css.js +179 -43
- package/src/components/compare/compare.js +52 -25
- package/src/components/compare/compare.stories.js +61 -4
- package/src/components/comparison-panel/comparison-panel.css.js +38 -51
- package/src/components/comparison-panel/comparison-panel.js +5 -4
- package/src/components/comparison-panel/comparison-panel.stories.js +1 -1
- package/src/components/compatibility-table/compatibility-table.css.js +180 -80
- package/src/components/compatibility-table/compatibility-table.js +37 -9
- package/src/components/control-alignment.stories.js +393 -0
- package/src/components/cta-banner/cta-banner.css.js +41 -13
- package/src/components/cta-banner/cta-banner.js +6 -5
- package/src/components/cta-banner/cta-banner.stories.js +43 -98
- package/src/components/display/display.css.js +25 -1
- package/src/components/display/display.js +46 -13
- package/src/components/display/display.stories.js +270 -40
- package/src/components/divider/divider-horizontal.js +21 -5
- package/src/components/divider/divider-vertical.js +15 -7
- package/src/components/divider/divider.css.js +2 -2
- package/src/components/divider/divider.stories.js +38 -34
- package/src/components/dropdown/dropdown.css.js +93 -126
- package/src/components/dropdown/dropdown.js +114 -34
- package/src/components/dropdown/dropdown.stories.js +56 -24
- package/src/components/features/features.css.js +24 -11
- package/src/components/features/features.js +7 -3
- package/src/components/features/features.stories.js +37 -37
- package/src/components/features-tab/features-tab.css.js +19 -8
- package/src/components/features-tab/features-tab.js +6 -5
- package/src/components/features-tab/features-tab.stories.js +23 -23
- package/src/components/fieldset/fieldset.css.js +30 -0
- package/src/components/fieldset/fieldset.js +28 -0
- package/src/components/fieldset/fieldset.stories.js +84 -0
- package/src/components/footer/footer-links-group.css.js +10 -14
- package/src/components/footer/footer-links-group.js +4 -3
- package/src/components/footer/footer-lp.css.js +59 -30
- package/src/components/footer/footer-lp.js +17 -12
- package/src/components/footer/footer-lp.stories.js +63 -75
- package/src/components/footer/footer-nav-menu.css.js +26 -4
- package/src/components/footer/footer-nav-menu.js +3 -2
- package/src/components/footer/footer.css.js +146 -264
- package/src/components/footer/footer.js +176 -106
- package/src/components/footer/footer.stories.js +9 -9
- package/src/components/footer/localeMap.js +1 -1
- package/src/components/grid/grid.css.js +1 -1
- package/src/components/grid/grid.js +49 -7
- package/src/components/grid/grid.stories.js +111 -0
- package/src/components/header/header-code.css.js +61 -51
- package/src/components/header/header-code.js +28 -14
- package/src/components/header/header-code.stories.js +5 -5
- package/src/components/header/header.css.js +655 -176
- package/src/components/header/header.js +269 -36
- package/src/components/header/header.stories.js +841 -18
- package/src/components/heading/heading.css.js +14 -17
- package/src/components/heading/heading.js +48 -33
- package/src/components/heading/heading.stories.js +27 -25
- package/src/components/help-text/help-text.css.js +21 -0
- package/src/components/help-text/help-text.js +25 -0
- package/src/components/help-text/help-text.stories.js +66 -0
- package/src/components/highlight/highlight.css.js +86 -64
- package/src/components/highlight/highlight.js +18 -27
- package/src/components/highlight/highlight.stories.js +14 -3
- package/src/components/icons/analysis-icon.js +6 -16
- package/src/components/icons/arrow-down-icon.js +6 -19
- package/src/components/icons/arrow-icon.js +44 -0
- package/src/components/icons/arrow-right-icon.js +30 -23
- package/src/components/icons/arrow-up-icon.js +19 -18
- package/src/components/icons/bd-ai-icon.js +1 -1
- package/src/components/icons/brand-marks.stories.js +279 -0
- package/src/components/icons/brand-signature-icon.js +42 -0
- package/src/components/icons/check-icon.js +27 -0
- package/src/components/icons/circle-info-icon.js +33 -0
- package/src/components/icons/close-icon.js +6 -18
- package/src/components/icons/family-icon.js +8 -20
- package/src/components/icons/globe-icon.js +6 -18
- package/src/components/icons/guide-icon.js +6 -18
- package/src/components/icons/icon-element.js +99 -0
- package/src/components/icons/icons.js +36 -0
- package/src/components/icons/icons.stories.js +184 -52
- package/src/components/icons/individual-icon.js +6 -18
- package/src/components/icons/laurel-icon.js +9 -19
- package/src/components/icons/machine-learning-icon.js +6 -17
- package/src/components/icons/marks.js +41 -0
- package/src/components/icons/minus-icon.js +7 -21
- package/src/components/icons/missing-icon.js +52 -0
- package/src/components/icons/plus-icon.js +7 -21
- package/src/components/icons/quote-icon.js +19 -19
- package/src/components/image/image.css.js +72 -25
- package/src/components/image/image.js +11 -6
- package/src/components/image/image.stories.js +2 -2
- package/src/components/input/custom-form.stories.js +214 -62
- package/src/components/input/input-clipboard.css.js +51 -144
- package/src/components/input/input-clipboard.js +31 -15
- package/src/components/input/input.css.js +8 -146
- package/src/components/input/input.js +93 -38
- package/src/components/install-options/install-options.css.js +84 -77
- package/src/components/install-options/install-options.js +33 -30
- package/src/components/install-options/install-options.stories.js +3 -3
- package/src/components/label/label.css.js +35 -0
- package/src/components/label/label.js +38 -0
- package/src/components/label/label.stories.js +82 -0
- package/src/components/light-carousel/light-carousel.css.js +111 -63
- package/src/components/light-carousel/light-carousel.js +85 -11
- package/src/components/light-carousel/light-carousel.stories.js +126 -82
- package/src/components/link/link.css.js +150 -99
- package/src/components/link/link.js +86 -11
- package/src/components/link/link.stories.js +124 -30
- package/src/components/list/list-item/list-item.css.js +74 -22
- package/src/components/list/list-item/list-item.js +32 -10
- package/src/components/list/list-item/list-item.stories.js +23 -23
- package/src/components/list/list.css.js +8 -2
- package/src/components/list/list.js +3 -2
- package/src/components/list/list.stories.js +222 -0
- package/src/components/modal/modal.css.js +114 -24
- package/src/components/modal/modal.js +83 -7
- package/src/components/modal/modal.stories.js +9 -9
- package/src/components/overview/overview.css.js +19 -14
- package/src/components/overview/overview.js +6 -5
- package/src/components/overview/overview.stories.js +10 -10
- package/src/components/page-switcher/page-switcher.css.js +97 -40
- package/src/components/page-switcher/page-switcher.js +28 -5
- package/src/components/page-switcher/page-switcher.stories.js +95 -0
- package/src/components/paragraph/paragraph.css.js +15 -10
- package/src/components/paragraph/paragraph.js +41 -44
- package/src/components/paragraph/paragraph.stories.js +56 -21
- package/src/components/picture/picture.css.js +103 -44
- package/src/components/picture/picture.js +100 -30
- package/src/components/picture/picture.stories.js +1 -1
- package/src/components/pricing-cards/new-pricing-card.js +3 -3
- package/src/components/pricing-cards/new-pricing.css.js +24 -15
- package/src/components/pricing-cards/pricing-card-actions.css.js +1 -1
- package/src/components/pricing-cards/pricing-card-actions.js +3 -4
- package/src/components/pricing-cards/pricing-card-container.css.js +3 -3
- package/src/components/pricing-cards/pricing-card-container.js +3 -2
- package/src/components/pricing-cards/pricing-card-header.css.js +10 -8
- package/src/components/pricing-cards/pricing-card-header.js +6 -7
- package/src/components/pricing-cards/pricing-card-pricing.css.js +16 -9
- package/src/components/pricing-cards/pricing-card-pricing.js +8 -6
- package/src/components/pricing-cards/pricing-card-show-more.css.js +11 -3
- package/src/components/pricing-cards/pricing-card-show-more.js +8 -3
- package/src/components/pricing-cards/pricing-card.css.js +244 -190
- package/src/components/pricing-cards/pricing-card.js +54 -70
- package/src/components/pricing-cards/pricing-feature-item.css.js +25 -8
- package/src/components/pricing-cards/pricing-feature-item.js +8 -3
- package/src/components/process-steps/process-steps.css.js +26 -14
- package/src/components/process-steps/process-steps.js +23 -6
- package/src/components/process-steps/process-steps.stories.js +1 -1
- package/src/components/progress/progress.css.js +80 -0
- package/src/components/progress/progress.js +42 -0
- package/src/components/progress/progress.stories.js +79 -0
- package/src/components/quick-answer/quick-answer.css.js +75 -13
- package/src/components/quick-answer/quick-answer.js +8 -3
- package/src/components/radio/radio.css.js +92 -128
- package/src/components/radio/radio.js +106 -127
- package/src/components/radio/radio.stories.js +54 -19
- package/src/components/review/review-grid.css.js +5 -6
- package/src/components/review/review-grid.js +14 -11
- package/src/components/review/review.css.js +11 -6
- package/src/components/review/review.js +3 -8
- package/src/components/shared/ensemble.css.js +93 -0
- package/src/components/shared/form-field.css.js +206 -0
- package/src/components/shared/prop-vocabulary.js +48 -0
- package/src/components/shared/token-scales.js +306 -0
- package/src/components/skeleton/skeleton.css.js +34 -0
- package/src/components/skeleton/skeleton.js +32 -0
- package/src/components/skeleton/skeleton.stories.js +70 -0
- package/src/components/spinner/spinner.css.js +62 -0
- package/src/components/spinner/spinner.js +38 -0
- package/src/components/spinner/spinner.stories.js +92 -0
- package/src/components/spotlight-section/spotlight-section.css.js +14 -13
- package/src/components/spotlight-section/spotlight-section.js +42 -39
- package/src/components/switch/switch.css.js +103 -0
- package/src/components/switch/switch.js +44 -0
- package/src/components/switch/switch.stories.js +86 -0
- package/src/components/tab-list/content-switcher.stories.js +189 -0
- package/src/components/tab-list/tab-list.css.js +250 -0
- package/src/components/tab-list/tab-list.js +184 -0
- package/src/components/tab-list/tab-list.stories.js +221 -0
- package/src/components/tabs/tabs.css.js +14 -123
- package/src/components/tabs/tabs.js +16 -19
- package/src/components/tabs/tabs.stories.js +95 -95
- package/src/components/tag/tag.css.js +54 -0
- package/src/components/tag/tag.js +32 -0
- package/src/components/tag/tag.stories.js +126 -0
- package/src/components/terminal/terminal-message.css.js +164 -60
- package/src/components/terminal/terminal-message.js +5 -5
- package/src/components/terminal/terminal-message.stories.js +70 -1
- package/src/components/termsOfUse/terms.css.js +25 -20
- package/src/components/termsOfUse/terms.js +13 -9
- package/src/components/termsOfUse/terms.stories.js +1 -1
- package/src/components/textarea/textarea.css.js +51 -0
- package/src/components/textarea/textarea.js +136 -0
- package/src/components/textarea/textarea.stories.js +191 -0
- package/src/components/tooltip/tooltip.css.js +75 -0
- package/src/components/tooltip/tooltip.js +156 -0
- package/src/components/tooltip/tooltip.stories.js +161 -0
- package/src/components/trust-panel/trust-panel.css.js +85 -33
- package/src/components/trust-panel/trust-panel.js +18 -10
- package/src/components/trust-panel/trust-panel.stories.js +1 -1
- package/src/components/ultimate-security-demo.stories.js +431 -0
- package/src/components/video/video.css.js +17 -0
- package/src/components/video/video.js +40 -0
- package/src/components/video/video.stories.js +106 -0
- package/src/components/video-player/video-player.css.js +67 -11
- package/src/components/video-player/video-player.js +35 -4
- package/src/components/video-player/video-player.stories.js +1 -1
- package/src/components/visual-alignment.stories.js +411 -0
- package/src/components/visually-hidden/visually-hidden.css.js +24 -0
- package/src/components/visually-hidden/visually-hidden.js +16 -0
- package/src/components/visually-hidden/visually-hidden.stories.js +56 -0
- package/src/stories/Button.stories.js +17 -17
- package/src/stories/Header.stories.js +10 -10
- package/src/stories/Page.js +1 -1
- package/src/stories/Page.stories.js +6 -6
- package/src/tokens/borders.stories.js +339 -0
- package/src/tokens/color-responsibilities.stories.js +227 -0
- package/src/tokens/dark-derivation.js +309 -0
- package/src/tokens/dark-findings.js +197 -0
- package/src/tokens/dark-mode.stories.js +207 -0
- package/src/tokens/dimension.stories.js +251 -0
- package/src/tokens/elevation.stories.js +143 -0
- package/src/tokens/focus.stories.js +276 -0
- package/src/tokens/fonts.css +20 -20
- package/src/tokens/fonts.stories.js +354 -374
- package/src/tokens/layout.css +25 -11
- package/src/tokens/motion.stories.js +231 -0
- package/src/tokens/shape.stories.js +272 -0
- package/src/tokens/spacing-rhythm.stories.js +359 -0
- package/src/tokens/spacing.stories.js +208 -703
- package/src/tokens/story-chrome.js +503 -0
- package/src/tokens/surfaces.stories.js +224 -0
- package/src/tokens/text-on-surface.stories.js +164 -0
- package/src/tokens/token-map.js +220 -0
- package/src/tokens/token-map.stories.js +257 -0
- package/src/tokens/token-purposes.js +266 -0
- package/src/tokens/tokens-grid.stories.js +388 -900
- package/src/tokens/tokens.css +1633 -1045
- package/src/tokens/tokens.js +1130 -492
- package/src/tokens/tokens.stories.js +137 -47
- package/src/tokens/type-ceiling-words.js +299 -0
- package/src/tokens/typography.stories.js +1003 -965
- package/src/tokens/vertical-rhythm.stories.js +224 -0
- package/src/components/awards/awards-icon.js +0 -56
- package/src/components/awards/awards-light.js +0 -240
- package/src/components/banner/banner.js +0 -60
- package/src/components/banner/banner.stories.js +0 -51
- package/src/components/button/icons.js +0 -24
- package/src/components/input/index.js +0 -0
- package/src/components/light-carousel/light-carousel-simple.css.js +0 -183
- package/src/components/light-carousel/light-carousel-simple.js +0 -74
- package/src/tokens/colors.js +0 -121
- package/src/tokens/typography.css.js +0 -207
- package/src/tokens/typography.js +0 -0
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { LitElement, html, nothing } from "lit";
|
|
2
|
+
import '../button/button.js';
|
|
2
3
|
import { tokens } from "../../tokens/tokens.js";
|
|
3
4
|
import "../heading/heading.js";
|
|
4
5
|
import "../paragraph/paragraph.js";
|
|
5
6
|
import agentEndpointsCSS from "./agent-endpoints.css.js";
|
|
7
|
+
import { ensembleCSS } from "../shared/ensemble.css.js";
|
|
8
|
+
import "../icons/arrow-right-icon.js";
|
|
6
9
|
|
|
7
10
|
class AgentEndpoints extends LitElement {
|
|
8
11
|
static properties = {
|
|
@@ -13,7 +16,7 @@ class AgentEndpoints extends LitElement {
|
|
|
13
16
|
assistants : { type: Array } // [{ label: String, href: String, icon: String }]
|
|
14
17
|
};
|
|
15
18
|
|
|
16
|
-
static styles = [tokens, agentEndpointsCSS];
|
|
19
|
+
static styles = [tokens, ensembleCSS, agentEndpointsCSS];
|
|
17
20
|
|
|
18
21
|
constructor() {
|
|
19
22
|
super();
|
|
@@ -26,9 +29,9 @@ class AgentEndpoints extends LitElement {
|
|
|
26
29
|
|
|
27
30
|
render() {
|
|
28
31
|
return html`
|
|
29
|
-
<div class="bd-agentendpoints-wrapper">
|
|
32
|
+
<div class="bd-ensemble bd-agentendpoints-wrapper">
|
|
30
33
|
${this.eyebrow
|
|
31
|
-
? html`<bd-p
|
|
34
|
+
? html`<bd-p variant="regular" font-weight="semibold" class="bd-agentendpoints-eyebrow"><slot name="eyebrow">${this.eyebrow}</slot></bd-p>`
|
|
32
35
|
: nothing}
|
|
33
36
|
|
|
34
37
|
${this.title
|
|
@@ -36,7 +39,7 @@ class AgentEndpoints extends LitElement {
|
|
|
36
39
|
: nothing}
|
|
37
40
|
|
|
38
41
|
${this.description
|
|
39
|
-
? html`<bd-p
|
|
42
|
+
? html`<bd-p variant="regular" class="bd-agentendpoints-description"><slot name="description">${this.description}</slot></bd-p>`
|
|
40
43
|
: nothing}
|
|
41
44
|
|
|
42
45
|
${this.endpoints && this.endpoints.length
|
|
@@ -44,10 +47,16 @@ class AgentEndpoints extends LitElement {
|
|
|
44
47
|
<div class="bd-agentendpoints-row">
|
|
45
48
|
${this.endpoints.map(
|
|
46
49
|
(ep) => html`
|
|
47
|
-
<
|
|
48
|
-
|
|
50
|
+
<bd-button-link
|
|
51
|
+
class="bd-agentendpoints-pill"
|
|
52
|
+
href=${ep.href}
|
|
53
|
+
target="_blank"
|
|
54
|
+
size="sm"
|
|
55
|
+
variant="tertiary"
|
|
56
|
+
>
|
|
57
|
+
<bd-arrow-right-icon class="bd-agentendpoints-arrow" size="xs" aria-hidden="true"></bd-arrow-right-icon>
|
|
49
58
|
<span class="bd-agentendpoints-mono">${ep.label}</span>
|
|
50
|
-
</
|
|
59
|
+
</bd-button-link>
|
|
51
60
|
`
|
|
52
61
|
)}
|
|
53
62
|
</div>
|
|
@@ -59,19 +68,20 @@ class AgentEndpoints extends LitElement {
|
|
|
59
68
|
<div class="bd-agentendpoints-row">
|
|
60
69
|
${this.assistants.map(
|
|
61
70
|
(a) => html`
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
<bd-button-link
|
|
72
|
+
class="bd-agentendpoints-pill"
|
|
73
|
+
href=${a.href}
|
|
74
|
+
target="_blank"
|
|
75
|
+
size="sm"
|
|
76
|
+
variant="tertiary"
|
|
77
|
+
label="${a.label} (opens in new tab)"
|
|
78
|
+
>
|
|
79
|
+
${a.icon
|
|
80
|
+
? html`<img src=${a.icon} alt="" class="bd-agentendpoints-icon" width="20" height="20" loading="lazy" />`
|
|
81
|
+
: nothing}
|
|
82
|
+
<span>${a.label}</span>
|
|
83
|
+
</bd-button-link>
|
|
84
|
+
`
|
|
75
85
|
)}
|
|
76
86
|
</div>
|
|
77
87
|
`
|
|
@@ -44,7 +44,7 @@ function aiGuardianBody() {
|
|
|
44
44
|
<bd-button-link
|
|
45
45
|
slot="primary-button"
|
|
46
46
|
label="Download BETA Today"
|
|
47
|
-
|
|
47
|
+
variant="primary"
|
|
48
48
|
size="md"
|
|
49
49
|
font-size="18px"
|
|
50
50
|
font-weight="600"
|
|
@@ -53,7 +53,7 @@ function aiGuardianBody() {
|
|
|
53
53
|
<bd-button-link
|
|
54
54
|
slot="secondary-button"
|
|
55
55
|
label="See how it works"
|
|
56
|
-
|
|
56
|
+
variant="primary-outline"
|
|
57
57
|
size="md"
|
|
58
58
|
font-size="18px"
|
|
59
59
|
font-weight="600"
|
|
@@ -75,7 +75,7 @@ function aiGuardianBody() {
|
|
|
75
75
|
</bd-header-code>
|
|
76
76
|
|
|
77
77
|
<section>
|
|
78
|
-
<div
|
|
78
|
+
<div class="bd-container">
|
|
79
79
|
<bd-quick-answer
|
|
80
80
|
label="Quick answer"
|
|
81
81
|
text="Bitdefender AI Guardian is a security layer for autonomous AI agents on macOS. It inspects what an agent does — tool calls, file access, prompts, skills — and returns a verdict of allowed, flagged or blocked against a policy baseline you set. It targets prompt injection, MCP tool poisoning, credential leakage and unauthorised actions. Currently in open BETA."
|
|
@@ -88,7 +88,7 @@ function aiGuardianBody() {
|
|
|
88
88
|
</div>
|
|
89
89
|
</section>
|
|
90
90
|
|
|
91
|
-
<div
|
|
91
|
+
<div>
|
|
92
92
|
<bd-anchor-nav
|
|
93
93
|
aria-label="Page sections"
|
|
94
94
|
cta-label="Download BETA Today"
|
|
@@ -110,7 +110,7 @@ function aiGuardianBody() {
|
|
|
110
110
|
</bd-anchor-nav>
|
|
111
111
|
|
|
112
112
|
<section id="anchor-1-section" style="margin-top: 0; padding-top: 0;">
|
|
113
|
-
<div style="padding: 48px 24px
|
|
113
|
+
<div style="padding-block: 48px 24px;">
|
|
114
114
|
<bd-overview
|
|
115
115
|
title="What is AI Guardian?"
|
|
116
116
|
description="AI Guardian is a Bitdefender security product that helps protect people and organisations from the risks of autonomous AI agents — prompt injection, unsafe tool use, data leakage, and unauthorised actions. It adds a baseline security model of policies, permissions, and auditing, guardrails for tool execution, and monitoring and response workflows."
|
|
@@ -125,7 +125,7 @@ function aiGuardianBody() {
|
|
|
125
125
|
</section>
|
|
126
126
|
|
|
127
127
|
<section id="anchor-2-section">
|
|
128
|
-
<div style="padding: 24px;">
|
|
128
|
+
<div style="padding-block: 24px;">
|
|
129
129
|
<bd-compatibility-table
|
|
130
130
|
title="What does AI Guardian work with?"
|
|
131
131
|
description="AI Guardian attaches to the agent runtime on macOS, so coverage follows what an agent does on the machine rather than which vendor built it."
|
|
@@ -142,7 +142,7 @@ function aiGuardianBody() {
|
|
|
142
142
|
</section>
|
|
143
143
|
|
|
144
144
|
<section id="anchor-3-section">
|
|
145
|
-
<div style="padding: 24px
|
|
145
|
+
<div style="padding-block: 24px 48px;">
|
|
146
146
|
<bd-bento-grid
|
|
147
147
|
eyebrow="Protection"
|
|
148
148
|
title="What does AI Guardian protect against?"
|
|
@@ -175,7 +175,7 @@ function aiGuardianBody() {
|
|
|
175
175
|
</bd-bento-grid>
|
|
176
176
|
</div>
|
|
177
177
|
|
|
178
|
-
<div style="padding: 0
|
|
178
|
+
<div style="padding-block: 0 48px;">
|
|
179
179
|
<bd-comparison-panel
|
|
180
180
|
title="What it is, and what it isn't"
|
|
181
181
|
description="AI Guardian secures the actions an AI agent takes. It is not a traditional antivirus, a network VPN, or a chatbot content filter."
|
|
@@ -223,7 +223,7 @@ function aiGuardianBody() {
|
|
|
223
223
|
</section>
|
|
224
224
|
|
|
225
225
|
<section id="anchor-5-section">
|
|
226
|
-
<div style="padding: 24px
|
|
226
|
+
<div style="padding-block: 24px 48px;">
|
|
227
227
|
<bd-compatibility-table
|
|
228
228
|
variant="outcome"
|
|
229
229
|
title="The same agent, with and without AI Guardian"
|
|
@@ -240,9 +240,9 @@ function aiGuardianBody() {
|
|
|
240
240
|
</section>
|
|
241
241
|
|
|
242
242
|
<section id="anchor-6-section">
|
|
243
|
-
<div style="padding: 24px
|
|
244
|
-
<bd-h as="h2"
|
|
245
|
-
<bd-p
|
|
243
|
+
<div style="padding-block: 24px 48px;">
|
|
244
|
+
<bd-h as="h2" fontWeight="bold" style="margin: 0 0 8px;">Coverage against agentic AI risk categories</bd-h>
|
|
245
|
+
<bd-p variant="regular" style="color: var(--color-neutral-700); margin: 0 0 24px;">
|
|
246
246
|
How AI Guardian maps to the risk categories the industry is standardising on for agentic applications.
|
|
247
247
|
</bd-p>
|
|
248
248
|
|
|
@@ -260,16 +260,16 @@ function aiGuardianBody() {
|
|
|
260
260
|
></bd-compatibility-table>
|
|
261
261
|
</bd-accordion-item>
|
|
262
262
|
|
|
263
|
-
<bd-p
|
|
263
|
+
<bd-p variant="small" style="color: var(--color-neutral-500); margin-top: 16px;">
|
|
264
264
|
Category naming follows OWASP Top 10 for Agentic Applications (2026).
|
|
265
265
|
</bd-p>
|
|
266
266
|
</div>
|
|
267
267
|
</section>
|
|
268
268
|
|
|
269
269
|
<section id="anchor-7-section">
|
|
270
|
-
<div style="padding: 24px
|
|
271
|
-
<bd-h as="h2"
|
|
272
|
-
<bd-p
|
|
270
|
+
<div style="padding-block: 24px 48px;">
|
|
271
|
+
<bd-h as="h2" fontWeight="bold" style="margin: 0 0 8px;">How it runs</bd-h>
|
|
272
|
+
<bd-p variant="regular" style="color: var(--color-neutral-700); margin: 0 0 24px;">
|
|
273
273
|
AI Guardian installs from a signed macOS installer and runs as a background service; the rows below list how it installs, where analysis happens, and what the BETA costs.
|
|
274
274
|
</bd-p>
|
|
275
275
|
|
|
@@ -385,7 +385,7 @@ function aiGuardianBody() {
|
|
|
385
385
|
<bd-button-link
|
|
386
386
|
slot="primary-button"
|
|
387
387
|
label="Download BETA Today"
|
|
388
|
-
|
|
388
|
+
variant="white"
|
|
389
389
|
size="md"
|
|
390
390
|
strong
|
|
391
391
|
>Download BETA Today</bd-button-link>
|
|
@@ -393,7 +393,7 @@ function aiGuardianBody() {
|
|
|
393
393
|
<bd-button-link
|
|
394
394
|
slot="secondary-button"
|
|
395
395
|
label="Read the docs"
|
|
396
|
-
|
|
396
|
+
variant="outline-white"
|
|
397
397
|
size="md"
|
|
398
398
|
strong
|
|
399
399
|
>Read the docs</bd-button-link>
|
|
@@ -421,8 +421,8 @@ function aiGuardianBody() {
|
|
|
421
421
|
</section>
|
|
422
422
|
|
|
423
423
|
<section id="legal">
|
|
424
|
-
<div
|
|
425
|
-
<bd-p
|
|
424
|
+
<div class="bd-container" style="padding-block: 24px;">
|
|
425
|
+
<bd-p variant="small" style="color: var(--color-neutral-500); border-top: 1px solid var(--color-neutral-100); max-width: 90ch; padding-top: var(--spacing-4)">
|
|
426
426
|
No security product guarantees complete protection. Effectiveness depends on configuration, runtime environment and the type of agents used. Features and availability may vary. Initially available on macOS, with further platforms to follow.
|
|
427
427
|
</bd-p>
|
|
428
428
|
</div>
|
|
@@ -446,7 +446,7 @@ function skillScannerBody() {
|
|
|
446
446
|
<bd-button-link
|
|
447
447
|
slot="primary-button"
|
|
448
448
|
label="Install now"
|
|
449
|
-
|
|
449
|
+
variant="primary"
|
|
450
450
|
size="md"
|
|
451
451
|
font-size="18px"
|
|
452
452
|
font-weight="600"
|
|
@@ -455,7 +455,7 @@ function skillScannerBody() {
|
|
|
455
455
|
<bd-button-link
|
|
456
456
|
slot="secondary-button"
|
|
457
457
|
label="View on GitHub"
|
|
458
|
-
|
|
458
|
+
variant="primary-outline"
|
|
459
459
|
size="md"
|
|
460
460
|
font-size="18px"
|
|
461
461
|
font-weight="600"
|
|
@@ -483,7 +483,7 @@ function skillScannerBody() {
|
|
|
483
483
|
</bd-header-code>
|
|
484
484
|
|
|
485
485
|
<section>
|
|
486
|
-
<div
|
|
486
|
+
<div class="bd-container">
|
|
487
487
|
<bd-quick-answer
|
|
488
488
|
label="Quick answer"
|
|
489
489
|
text='Agent Skill Scanner is a Bitdefender agent skill that audits another agent skill before you install or trust it. It walks every file, runs 71 behavioural detectors across 16 threat categories, extracts 18 indicator types, and returns an LLM-generated report with a risk level, summary and per-file findings. Install it with "npx skills add bitdefender/agent-skill-scanner", from GitHub, or as a zip archive.'
|
|
@@ -577,7 +577,7 @@ function skillScannerBody() {
|
|
|
577
577
|
<section id="anchor-3-section">
|
|
578
578
|
<div style="padding: 24px 24px 48px;">
|
|
579
579
|
<bd-p kind="normal" style="color: var(--color-blue-500); font-weight: 600; margin: 0 0 8px;">Detection coverage</bd-p>
|
|
580
|
-
<bd-h as="h2"
|
|
580
|
+
<bd-h as="h2" fontWeight="bold" style="margin: 0 0 8px;">What it detects</bd-h>
|
|
581
581
|
<bd-p kind="regular" style="color: var(--color-neutral-700); margin: 0 0 24px; max-width: 72ch">
|
|
582
582
|
Agent Skill Scanner runs 71 behavioural detectors across 16 threat categories, including code execution, obfuscation, reverse shells, crypto-mining, persistence, time bombs and stealth natural-language directives. It also extracts 18 indicator types from every text file: URLs, IPs, base64 blobs, dangerous shell commands, secret env-var names and invisible Unicode characters among them.
|
|
583
583
|
</bd-p>
|
|
@@ -622,32 +622,32 @@ function skillScannerBody() {
|
|
|
622
622
|
>
|
|
623
623
|
<bd-bento-item title="Layered analysis" tone="tint">
|
|
624
624
|
<bd-analysis-icon slot="icon" width="32" height="32" color="#006DFF"></bd-analysis-icon>
|
|
625
|
-
<bd-p color="
|
|
625
|
+
<bd-p color="muted">Local indicator extraction feeds a server-side LLM that produces the report: a risk level, a plain-language summary, and per-file findings. Enough to decide, without wading through raw indicators.</bd-p>
|
|
626
626
|
</bd-bento-item>
|
|
627
627
|
|
|
628
628
|
<bd-bento-item title="Deep archive inspection">
|
|
629
629
|
<bd-guide-icon slot="icon" width="32" height="32" color="#006DFF"></bd-guide-icon>
|
|
630
|
-
<bd-p color="
|
|
630
|
+
<bd-p color="muted">The scanner recursively unpacks .zip, .tar.gz, .tar.bz2, .tar, .7z and .rar up to 10 levels deep, with limits of 500 MB uncompressed and 10,000 entries per archive. It skips symlinks rather than following them.</bd-p>
|
|
631
631
|
</bd-bento-item>
|
|
632
632
|
|
|
633
633
|
<bd-bento-item title="Prose-aware detection">
|
|
634
634
|
<bd-machine-learning-icon slot="icon" width="32" height="32" color="#006DFF"></bd-machine-learning-icon>
|
|
635
|
-
<bd-p color="
|
|
635
|
+
<bd-p color="muted">Natural-language threats hidden in SKILL.md instructions (stealth exfiltration, covert actions, keyword and counter triggers) are first-class detections.</bd-p>
|
|
636
636
|
</bd-bento-item>
|
|
637
637
|
|
|
638
638
|
<bd-bento-item title="Semantic embeddings">
|
|
639
639
|
<bd-globe-icon slot="icon" width="32" height="32" color="#006DFF"></bd-globe-icon>
|
|
640
|
-
<bd-p color="
|
|
640
|
+
<bd-p color="muted">The scanner computes local sentence embeddings (all-MiniLM-L6-v2, ONNX) to support the analysis. They run on your machine, and you can disable them.</bd-p>
|
|
641
641
|
</bd-bento-item>
|
|
642
642
|
|
|
643
643
|
<bd-bento-item title="Privacy-respecting default">
|
|
644
644
|
<bd-individual-icon slot="icon" width="32" height="32" color="#006DFF"></bd-individual-icon>
|
|
645
|
-
<bd-p color="
|
|
645
|
+
<bd-p color="muted">In scan mode the scanner transmits only hashes, extracted indicators and metadata off the machine.</bd-p>
|
|
646
646
|
</bd-bento-item>
|
|
647
647
|
|
|
648
648
|
<bd-bento-item title="Flexible targets" tone="dark">
|
|
649
649
|
<bd-family-icon slot="icon" width="32" height="32" color="#60a5fa"></bd-family-icon>
|
|
650
|
-
<bd-p color="
|
|
650
|
+
<bd-p color="inverse">Scan a directory, an installed skill by name, a .zip archive, or a URL. The skill resolves whatever you refer to in plain language.</bd-p>
|
|
651
651
|
</bd-bento-item>
|
|
652
652
|
</bd-bento-grid>
|
|
653
653
|
</div>
|
|
@@ -724,29 +724,29 @@ function skillScannerBody() {
|
|
|
724
724
|
<bd-h as="h3" style="margin: 0 0 16px;">The contract the agent is held to</bd-h>
|
|
725
725
|
<ul style="list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 16px;">
|
|
726
726
|
<li style="display: flex; align-items: flex-start; gap: 12px;">
|
|
727
|
-
<span aria-hidden="true" style="flex-shrink: 0; width: 20px; height: 20px; border-radius: 999px; background: var(--color-green-600
|
|
727
|
+
<span aria-hidden="true" style="flex-shrink: 0; width: 20px; height: 20px; border-radius: 999px; background: var(--color-green-600); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; margin-top: 2px;">✓</span>
|
|
728
728
|
<bd-p kind="regular" style="margin:0;">Scan mode is the default: a casual request never uploads your files.</bd-p>
|
|
729
729
|
</li>
|
|
730
730
|
<li style="display: flex; align-items: flex-start; gap: 12px;">
|
|
731
|
-
<span aria-hidden="true" style="flex-shrink: 0; width: 20px; height: 20px; border-radius: 999px; background: var(--color-green-600
|
|
731
|
+
<span aria-hidden="true" style="flex-shrink: 0; width: 20px; height: 20px; border-radius: 999px; background: var(--color-green-600); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; margin-top: 2px;">✓</span>
|
|
732
732
|
<bd-p kind="regular" style="margin:0;">Submit is opt-in only: the agent won't upload the full archive unless you explicitly ask.</bd-p>
|
|
733
733
|
</li>
|
|
734
734
|
<li style="display: flex; align-items: flex-start; gap: 12px;">
|
|
735
|
-
<span aria-hidden="true" style="flex-shrink: 0; width: 20px; height: 20px; border-radius: 999px; background: var(--color-green-600
|
|
735
|
+
<span aria-hidden="true" style="flex-shrink: 0; width: 20px; height: 20px; border-radius: 999px; background: var(--color-green-600); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; margin-top: 2px;">✓</span>
|
|
736
736
|
<bd-p kind="regular" style="margin:0;">The agent relays, it doesn't overrule: it presents the backend's report and never substitutes its own verdict.</bd-p>
|
|
737
737
|
</li>
|
|
738
738
|
<li style="display: flex; align-items: flex-start; gap: 12px;">
|
|
739
|
-
<span aria-hidden="true" style="flex-shrink: 0; width: 20px; height: 20px; border-radius: 999px; background: var(--color-green-600
|
|
739
|
+
<span aria-hidden="true" style="flex-shrink: 0; width: 20px; height: 20px; border-radius: 999px; background: var(--color-green-600); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; margin-top: 2px;">✓</span>
|
|
740
740
|
<bd-p kind="regular" style="margin:0;">Errors are surfaced as they are: on failure you get the specific reason.</bd-p>
|
|
741
741
|
</li>
|
|
742
742
|
<li style="display: flex; align-items: flex-start; gap: 12px;">
|
|
743
|
-
<span aria-hidden="true" style="flex-shrink: 0; width: 20px; height: 20px; border-radius: 999px; background: var(--color-green-600
|
|
743
|
+
<span aria-hidden="true" style="flex-shrink: 0; width: 20px; height: 20px; border-radius: 999px; background: var(--color-green-600); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; margin-top: 2px;">✓</span>
|
|
744
744
|
<bd-p kind="regular" style="margin:0;">Self-updates are Ed25519-signature-verified against a key pinned in the client, staged with path-traversal-safe extraction, and rolled back automatically on failure.</bd-p>
|
|
745
745
|
</li>
|
|
746
746
|
</ul>
|
|
747
747
|
</div>
|
|
748
748
|
|
|
749
|
-
<div style="background: var(--color-yellow-50
|
|
749
|
+
<div style="background: var(--color-yellow-50); border: 1px solid var(--color-yellow-300); border-radius: var(--radius-md); padding: 16px 20px; color: var(--color-yellow-800); margin-top: 24px;">
|
|
750
750
|
<bd-p kind="small" style="margin:0;">A scan that returns no findings means no known threat patterns were detected — not that the skill is safe.</bd-p>
|
|
751
751
|
</div>
|
|
752
752
|
</bd-install-options>
|
|
@@ -922,12 +922,12 @@ function vpnBody() {
|
|
|
922
922
|
|
|
923
923
|
<span
|
|
924
924
|
slot="annotation-top"
|
|
925
|
-
style="display: inline-flex; align-items: center; background: var(--color-blue-50
|
|
925
|
+
style="display: inline-flex; align-items: center; background: var(--color-blue-50); border: 1px solid var(--color-blue-200); color: var(--color-blue-600); font-family: var(--typography-fontFamily-mono); font-size: 12px; font-weight: 600; padding: 6px 14px; border-radius: 999px; white-space: nowrap;"
|
|
926
926
|
>exit: frankfurt · server IP</span>
|
|
927
927
|
|
|
928
928
|
<span
|
|
929
929
|
slot="annotation-bottom"
|
|
930
|
-
style="display: inline-flex; align-items: center; background: var(--color-green-50
|
|
930
|
+
style="display: inline-flex; align-items: center; background: var(--color-green-50); border: 1px solid var(--color-green-200); color: var(--color-green-700); font-family: var(--typography-fontFamily-mono); font-size: 12px; font-weight: 600; padding: 6px 14px; border-radius: 999px; white-space: nowrap;"
|
|
931
931
|
>tunnel closed — session cleared</span>
|
|
932
932
|
|
|
933
933
|
<bd-terminal-message
|
|
@@ -999,33 +999,33 @@ function vpnBody() {
|
|
|
999
999
|
description="Each protection is structural: every request the agent routes through Bitdefender's MCP tools gets it automatically, with no setting to remember."
|
|
1000
1000
|
>
|
|
1001
1001
|
<bd-bento-item>
|
|
1002
|
-
<span slot="icon" style="color: var(--color-blue-500
|
|
1003
|
-
<bd-h as="h5" fontWeight="
|
|
1004
|
-
<bd-p color="
|
|
1002
|
+
<span slot="icon" style="color: var(--color-blue-500); font-weight: 700; font-family: var(--typography-fontFamily-mono); font-size: 14px; letter-spacing: 0.05em;">01</span>
|
|
1003
|
+
<bd-h as="h5" fontWeight="bold" style="margin: 0 0 8px;">IP masking</bd-h>
|
|
1004
|
+
<bd-p color="muted">When your agent reaches a site, it sees the VPN server's exit IP. Not your home address or IP-based location.</bd-p>
|
|
1005
1005
|
</bd-bento-item>
|
|
1006
1006
|
|
|
1007
1007
|
<bd-bento-item>
|
|
1008
|
-
<span slot="icon" style="color: var(--color-blue-500
|
|
1009
|
-
<bd-h as="h5" fontWeight="
|
|
1010
|
-
<bd-p color="
|
|
1008
|
+
<span slot="icon" style="color: var(--color-blue-500); font-weight: 700; font-family: var(--typography-fontFamily-mono); font-size: 14px; letter-spacing: 0.05em;">02</span>
|
|
1009
|
+
<bd-h as="h5" fontWeight="bold" style="margin: 0 0 8px;">Per-prompt encryption</bd-h>
|
|
1010
|
+
<bd-p color="muted">Every request opens its own encrypted tunnel from your device to Bitdefender, so whoever runs the Wi-Fi you're on can't read what the agent sends.</bd-p>
|
|
1011
1011
|
</bd-bento-item>
|
|
1012
1012
|
|
|
1013
1013
|
<bd-bento-item>
|
|
1014
|
-
<span slot="icon" style="color: var(--color-blue-500
|
|
1015
|
-
<bd-h as="h5" fontWeight="
|
|
1016
|
-
<bd-p color="
|
|
1014
|
+
<span slot="icon" style="color: var(--color-blue-500); font-weight: 700; font-family: var(--typography-fontFamily-mono); font-size: 14px; letter-spacing: 0.05em;">03</span>
|
|
1015
|
+
<bd-h as="h5" fontWeight="bold" style="margin: 0 0 8px;">Session isolation</bd-h>
|
|
1016
|
+
<bd-p color="muted">Each tunnel closes the moment the prompt ends. If a site sees two of your agent's requests, it has no network-level way to tell they came from the same prompt.</bd-p>
|
|
1017
1017
|
</bd-bento-item>
|
|
1018
1018
|
|
|
1019
1019
|
<bd-bento-item>
|
|
1020
|
-
<span slot="icon" style="color: var(--color-blue-500
|
|
1021
|
-
<bd-h as="h5" fontWeight="
|
|
1022
|
-
<bd-p color="
|
|
1020
|
+
<span slot="icon" style="color: var(--color-blue-500); font-weight: 700; font-family: var(--typography-fontFamily-mono); font-size: 14px; letter-spacing: 0.05em;">04</span>
|
|
1021
|
+
<bd-h as="h5" fontWeight="bold" style="margin: 0 0 8px;">Clean-IP browsing</bd-h>
|
|
1022
|
+
<bd-p color="muted">Every request exits on the VPN server's IP rather than the same home address every time, useful for QA and monitoring work that needs a neutral, non-residential vantage point.</bd-p>
|
|
1023
1023
|
</bd-bento-item>
|
|
1024
1024
|
|
|
1025
1025
|
<bd-bento-item>
|
|
1026
|
-
<span slot="icon" style="color: var(--color-blue-500
|
|
1027
|
-
<bd-h as="h5" fontWeight="
|
|
1028
|
-
<bd-p color="
|
|
1026
|
+
<span slot="icon" style="color: var(--color-blue-500); font-weight: 700; font-family: var(--typography-fontFamily-mono); font-size: 14px; letter-spacing: 0.05em;">05</span>
|
|
1027
|
+
<bd-h as="h5" fontWeight="bold" style="margin: 0 0 8px;">Regional routing</bd-h>
|
|
1028
|
+
<bd-p color="muted">Need to see a page the way a visitor from a specific country would? Route that one request through a Bitdefender server there, just for that prompt.</bd-p>
|
|
1029
1029
|
</bd-bento-item>
|
|
1030
1030
|
</bd-bento-grid>
|
|
1031
1031
|
</div>
|
|
@@ -1041,18 +1041,18 @@ function vpnBody() {
|
|
|
1041
1041
|
description="VPN for AI Agents is aimed at people running agents that reach the open web — for research, QA, or comparison tasks — and want the traffic to be private and encrypted, without changing how the agent works."
|
|
1042
1042
|
>
|
|
1043
1043
|
<bd-bento-item>
|
|
1044
|
-
<bd-h as="h5"
|
|
1045
|
-
<bd-p color="
|
|
1044
|
+
<bd-h as="h5" fontWeight="bold" style="margin: 0 0 8px;">IP privacy toward the sites you reach</bd-h>
|
|
1045
|
+
<bd-p color="muted">If your agent sends dozens of requests a day, none of them carry your home IP, which makes it harder for sites to correlate requests to a single household, whether it's a research task or a run of price comparisons across competitors.</bd-p>
|
|
1046
1046
|
</bd-bento-item>
|
|
1047
1047
|
|
|
1048
1048
|
<bd-bento-item>
|
|
1049
|
-
<bd-h as="h5"
|
|
1050
|
-
<bd-p color="
|
|
1049
|
+
<bd-h as="h5" fontWeight="bold" style="margin: 0 0 8px;">QA on geolocalized pages</bd-h>
|
|
1050
|
+
<bd-p color="muted">Your team ships a pricing page with different content for five countries. Route the agent through the German exit and check that version renders the way a visitor there would actually see it.</bd-p>
|
|
1051
1051
|
</bd-bento-item>
|
|
1052
1052
|
|
|
1053
1053
|
<bd-bento-item>
|
|
1054
|
-
<bd-h as="h5"
|
|
1055
|
-
<bd-p color="
|
|
1054
|
+
<bd-h as="h5" fontWeight="bold" style="margin: 0 0 8px;">Agents on untrusted networks</bd-h>
|
|
1055
|
+
<bd-p color="muted">You're running a research agent from a conference or a café. The tunnel encrypts what it sends, so whoever runs that Wi-Fi can't read it.</bd-p>
|
|
1056
1056
|
</bd-bento-item>
|
|
1057
1057
|
</bd-bento-grid>
|
|
1058
1058
|
|
|
@@ -1093,25 +1093,25 @@ function vpnBody() {
|
|
|
1093
1093
|
description="Setup happens once. Protection happens every prompt, without the user thinking about it."
|
|
1094
1094
|
>
|
|
1095
1095
|
<bd-bento-item>
|
|
1096
|
-
<span slot="icon" style="color: var(--color-blue-500
|
|
1097
|
-
<bd-h as="h5" fontWeight="
|
|
1098
|
-
<bd-p color="
|
|
1096
|
+
<span slot="icon" style="color: var(--color-blue-500); font-weight: 700; font-family: var(--typography-fontFamily-mono); font-size: 14px; letter-spacing: 0.05em;">01</span>
|
|
1097
|
+
<bd-h as="h5" fontWeight="bold" style="margin: 0 0 8px;">Install & sign in</bd-h>
|
|
1098
|
+
<bd-p color="muted">Download the macOS installer and run it. VPN for AI Agents runs as a lightweight macOS component you install once, no separate app to manage. First run: choose which agents to protect, consent to telemetry, sign in once.</bd-p>
|
|
1099
1099
|
</bd-bento-item>
|
|
1100
1100
|
|
|
1101
1101
|
<bd-bento-item>
|
|
1102
|
-
<span slot="icon" style="color: var(--color-blue-500
|
|
1103
|
-
<bd-h as="h5" fontWeight="
|
|
1104
|
-
<bd-p color="
|
|
1102
|
+
<span slot="icon" style="color: var(--color-blue-500); font-weight: 700; font-family: var(--typography-fontFamily-mono); font-size: 14px; letter-spacing: 0.05em;">02</span>
|
|
1103
|
+
<bd-h as="h5" fontWeight="bold" style="margin: 0 0 8px;">Restart to activate</bd-h>
|
|
1104
|
+
<bd-p color="muted">Claude Desktop, Cursor, Codex, or OpenCode restarts once to pick up the new MCP configuration. No files to edit, nothing else to configure.</bd-p>
|
|
1105
1105
|
</bd-bento-item>
|
|
1106
1106
|
|
|
1107
1107
|
<bd-bento-item>
|
|
1108
|
-
<span slot="icon" style="color: var(--color-blue-500
|
|
1109
|
-
<bd-h as="h5" fontWeight="
|
|
1110
|
-
<bd-p color="
|
|
1108
|
+
<span slot="icon" style="color: var(--color-blue-500); font-weight: 700; font-family: var(--typography-fontFamily-mono); font-size: 14px; letter-spacing: 0.05em;">03</span>
|
|
1109
|
+
<bd-h as="h5" fontWeight="bold" style="margin: 0 0 8px;">Automatic for every MCP call</bd-h>
|
|
1110
|
+
<bd-p color="muted">The tunnel opens when the agent calls a Bitdefender tool and closes when the prompt ends. No cookies, cache, or session state carries over to the next prompt, and idle containers close on their own.</bd-p>
|
|
1111
1111
|
</bd-bento-item>
|
|
1112
1112
|
</bd-bento-grid>
|
|
1113
1113
|
|
|
1114
|
-
<div style="background: var(--color-yellow-50
|
|
1114
|
+
<div style="background: var(--color-yellow-50); border: 1px solid var(--color-yellow-300); border-radius: var(--radius-xl); padding: 16px 20px; color: var(--color-yellow-800); margin-top: 24px;">
|
|
1115
1115
|
<bd-p kind="small" style="margin:0;">External beta on macOS. Downloads the macOS beta installer (.dmg). Windows to follow.</bd-p>
|
|
1116
1116
|
</div>
|
|
1117
1117
|
</div>
|
|
@@ -1120,7 +1120,7 @@ function vpnBody() {
|
|
|
1120
1120
|
<section id="anchor-5-section">
|
|
1121
1121
|
<div style="padding: 24px 24px 48px;">
|
|
1122
1122
|
<bd-p kind="normal" style="color: var(--color-blue-500); font-weight: 600; margin: 0 0 8px;">System requirements</bd-p>
|
|
1123
|
-
<bd-h as="h2"
|
|
1123
|
+
<bd-h as="h2" fontWeight="bold" style="margin: 0 0 8px;">What it needs to run</bd-h>
|
|
1124
1124
|
<bd-p kind="regular" style="color: var(--color-neutral-700); margin: 0 0 24px;">
|
|
1125
1125
|
The floor is set by the container engine that isolates each prompt, not by the VPN itself. Figures are from the beta build.
|
|
1126
1126
|
</bd-p>
|
|
@@ -1263,12 +1263,12 @@ function vpnBody() {
|
|
|
1263
1263
|
strong
|
|
1264
1264
|
>Download for macOS</bd-button-link>
|
|
1265
1265
|
|
|
1266
|
-
<bd-p slot="footer" kind="small" font-family="
|
|
1266
|
+
<bd-p slot="footer" kind="small" font-family="mono" style="color: rgba(255,255,255,0.9); max-width: 700px;">
|
|
1267
1267
|
<strong>Contact & feedback.</strong> Questions or feedback about the beta? Email us at
|
|
1268
1268
|
<a href="mailto:vpn-for-agents-feedback@bitdefender.com" style="color: #fff; text-decoration: underline;">vpn-for-agents-feedback@bitdefender.com</a>.
|
|
1269
1269
|
</bd-p>
|
|
1270
1270
|
|
|
1271
|
-
<bd-p slot="footer" kind="small" font-family="
|
|
1271
|
+
<bd-p slot="footer" kind="small" font-family="mono" style="color: rgba(255,255,255,0.7); max-width: 900px;">
|
|
1272
1272
|
Your AI agent decides when to use the VPN. Bitdefender cannot guarantee every request is routed through it. No security product guarantees complete protection. Features and availability may vary. Initially available on macOS, with Windows to follow.
|
|
1273
1273
|
</bd-p>
|
|
1274
1274
|
</bd-cta-banner>
|
|
@@ -1318,44 +1318,44 @@ function sharedFooter() {
|
|
|
1318
1318
|
</div>
|
|
1319
1319
|
|
|
1320
1320
|
<div slot="nav">
|
|
1321
|
-
<bd-link href="/consumer/"
|
|
1322
|
-
<bd-link href="/small-business/"
|
|
1323
|
-
<bd-link href="/business/"
|
|
1324
|
-
<bd-link href="/partners/"
|
|
1321
|
+
<bd-link href="/consumer/" variant="light">For Consumer</bd-link>
|
|
1322
|
+
<bd-link href="/small-business/" variant="light">For Small Business</bd-link>
|
|
1323
|
+
<bd-link href="/business/" variant="light">For Enterprise</bd-link>
|
|
1324
|
+
<bd-link href="/partners/" variant="light">For Partners</bd-link>
|
|
1325
1325
|
</div>
|
|
1326
1326
|
|
|
1327
1327
|
<bd-footer-links-group slot="quick-links" title="Quick links">
|
|
1328
|
-
<bd-link href="/ai-guardian/"
|
|
1329
|
-
<bd-link href="/docs/"
|
|
1330
|
-
<bd-link href="/agent-skill-scanner/"
|
|
1331
|
-
<bd-link href="https://www.bitdefender.com"
|
|
1328
|
+
<bd-link href="/ai-guardian/" variant="light">AI Guardian</bd-link>
|
|
1329
|
+
<bd-link href="/docs/" variant="light">Documentation</bd-link>
|
|
1330
|
+
<bd-link href="/agent-skill-scanner/" variant="light">Agent Skill Scanner</bd-link>
|
|
1331
|
+
<bd-link href="https://www.bitdefender.com" variant="light">bitdefender.com</bd-link>
|
|
1332
1332
|
</bd-footer-links-group>
|
|
1333
1333
|
|
|
1334
1334
|
<bd-footer-links-group slot="quick-links" title="For agents">
|
|
1335
|
-
<bd-link href="/llms.txt"
|
|
1336
|
-
<bd-link href="/llms-full.txt"
|
|
1337
|
-
<bd-link href="/index.md"
|
|
1338
|
-
<bd-link href="/sitemap.xml"
|
|
1339
|
-
<bd-link href="/robots.txt"
|
|
1335
|
+
<bd-link href="/llms.txt" variant="light">llms.txt</bd-link>
|
|
1336
|
+
<bd-link href="/llms-full.txt" variant="light">llms-full.txt</bd-link>
|
|
1337
|
+
<bd-link href="/index.md" variant="light">index.md</bd-link>
|
|
1338
|
+
<bd-link href="/sitemap.xml" variant="light">Sitemap</bd-link>
|
|
1339
|
+
<bd-link href="/robots.txt" variant="light">robots.txt</bd-link>
|
|
1340
1340
|
</bd-footer-links-group>
|
|
1341
1341
|
|
|
1342
1342
|
<div slot="secondary-nav">
|
|
1343
|
-
<bd-link href="/legal/"
|
|
1343
|
+
<bd-link href="/legal/" variant="light">Legal</bd-link>
|
|
1344
1344
|
<bd-divider-vertical color="white" opacity="0.4"></bd-divider-vertical>
|
|
1345
|
-
<bd-link href="/privacy-policy/"
|
|
1345
|
+
<bd-link href="/privacy-policy/" variant="light">Privacy Policy</bd-link>
|
|
1346
1346
|
<bd-divider-vertical color="white" opacity="0.4"></bd-divider-vertical>
|
|
1347
|
-
<bd-link href="/company/"
|
|
1347
|
+
<bd-link href="/company/" variant="light">Company</bd-link>
|
|
1348
1348
|
<bd-divider-vertical color="white" opacity="0.4"></bd-divider-vertical>
|
|
1349
|
-
<bd-link href="/support/"
|
|
1349
|
+
<bd-link href="/support/" variant="light">Support</bd-link>
|
|
1350
1350
|
<bd-divider-vertical color="white" opacity="0.4"></bd-divider-vertical>
|
|
1351
|
-
<bd-link href="#"
|
|
1351
|
+
<bd-link href="#" variant="light">Cookie settings</bd-link>
|
|
1352
1352
|
</div>
|
|
1353
1353
|
|
|
1354
1354
|
<div slot="address" style="color:#fff; opacity:0.85; font-size:14px;">
|
|
1355
1355
|
© 2001–2026 Bitdefender
|
|
1356
1356
|
</div>
|
|
1357
1357
|
|
|
1358
|
-
<div slot="copyright" style="
|
|
1358
|
+
<div slot="copyright" style="color: rgba(255,255,255,0.75); font-size: 12px; line-height: 1.5;">
|
|
1359
1359
|
Bitdefender trademarks and registered trademarks are the property of Bitdefender or its affiliates. Claude and Claude Code are trademarks of Anthropic. ChatGPT and Codex are trademarks of OpenAI. Gemini and Google are trademarks of Google LLC. Copilot and Microsoft are trademarks of Microsoft Corporation. Perplexity is a trademark of Perplexity AI, Inc. Hermes Agent is a mark of Nous Research. The OpenClaw and opencode marks are the property of their owners. All other names and marks are the property of their respective owners. Third-party names and logos on this page, including those on the buttons that open an assistant, are used for identification only. Their use does not imply any affiliation with, sponsorship by, or endorsement from those owners.
|
|
1360
1360
|
</div>
|
|
1361
1361
|
</bd-footer>
|