Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion config.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
},
{
"name": "18.x",
"branch": "branch/v18",
"branch": "aatuvai/2026-04-28-aif-bottom-callout",
"repo_path": "aatuvai/teleport",
Comment on lines +9 to +10

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restore 18.x to an official content branch

The 18.x entry now points to a personal fork/feature branch, and scripts/update_submodules.sh uses these exact branch/repo_path values in CI to fetch docs archives. This means production/CI builds can ingest non-release content (or fail once that fork branch is deleted), and it already violates the repository’s own scripts/validate-docs-config.sh branch policy for merge-group builds.

Useful? React with 👍 / 👎.

"isDefault": true
},
{
Expand Down
111 changes: 111 additions & 0 deletions src/components/AgenticIdentity/AgenticIdentity.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
.agenticIdentityFramework {
display: flex;
flex-direction: column;
gap: var(--m-3);
margin-top: var(--m-4);

.header {
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--m-3);

.title {
font-size: var(--fs-header-4);
margin-bottom: var(--m-0-5);
}

.description {
font-size: var(--fs-text-xl);
color: var(--color-foreground-muted);
margin: 0;
}

.link {
position: relative;
display: flex;
align-items: center;
height: auto;
padding: var(--m-1-5) var(--m-4);
overflow: unset;
border-radius: 35px;
font-weight: var(--fw-regular);

@media (--lg-scr) {
margin-left: auto;
}
}
}

.pillars {
border-radius: var(--r-lg);
border: 1px solid var(--color-tonal-neutral-0);
}

.pillar {
padding: var(--m-1-5) var(--m-2);
display: grid;
grid-template-columns: minmax(0, 39.6%) minmax(0, 60.4%);
gap: var(--m-1);
border-bottom: 1px solid var(--color-tonal-neutral-0);

@media (--md-scr) {
gap: var(--m-3);
}

&:last-child {
border-bottom: none;
}

& > div {
display: flex;
align-items: center;
}

.pillarHeader {
gap: var(--m-2);

svg {
min-width: var(--m-3);
}
}

.pillarTitle {
font-size: var(--fs-text-xl);
margin-bottom: var(--m-0-5);
}

.pillarDescription {
color: var(--color-foreground-muted);
margin-bottom: 0;
font-size: var(--fs-text-lg);
}

.pillarItems {
list-style: none;
padding-left: 0;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--m-1);

.pillarItem {
font-size: 15px;
/* white-space: nowrap; */
display: flex;
align-items: center;
text-align: center;
justify-content: center;
padding: var(--m-1) var(--m-3);
color: var(--color-foreground-slightly-muted);
background-color: var(--color-background-depth-3);
border-radius: var(--m-3);

&.active {
color: var(--color-white);
background-color: var(--color-dark-purple);
}
}
}
}
}
140 changes: 140 additions & 0 deletions src/components/AgenticIdentity/AgenticIdentity.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
import cn from "clsx";
import styles from "./AgenticIdentity.module.css";
import Icon, { IconName } from "../Icon";
import Button from "../Button";

type AgenticIdentityFrameworkProps = {
name: string;
activeCategoryId: CategoryId;
href: string;
};

type CategoryId =
| "digital-twins"
| "identity-for-long-running-agents"
| "identity-for-llm-apps"
| "mcp-access"
| "mcp-catalog"
| "llm-access"
| "visibility-discovery"
| "audit-security"
| "data-sharing"
| "workflows"
| "developer-experience";

type Category = {
id: CategoryId;
name: string;
};

type Pillar = {
name: string;
description: string;
icon: IconName;
items: Category[];
};

const AgenticIdentityFramework: React.FC<AgenticIdentityFrameworkProps> = ({
name,
activeCategoryId,
href,
}) => {
const pillars: Pillar[] = [
{
name: "Identity",
description:
"Issue cryptographic identities to agents without shared secrets or bootstrapping tokens",
icon: "certificate",
items: [
{
id: "digital-twins",
name: "Digital Twins",
},
{
id: "identity-for-long-running-agents",
name: "Identity for long-running agents",
},
{
id: "identity-for-llm-apps",
name: "Identity for LLM Apps",
},
],
},
{
name: "Access",
description:
"Control and audit what agents can access via MCP proxy, catalog, and LLM rate limits",
icon: "keyholePurple",
items: [
{ id: "mcp-access", name: "MCP Access" },
{ id: "mcp-catalog", name: "MCP Catalog" },
{ id: "llm-access", name: "LLM Access" },
],
},
{
name: "Security",
description:
"Discover unmanaged agents, detect policy violations, and maintain full audit trails",
icon: "shieldCheck2",
items: [
{ id: "visibility-discovery", name: "Visibility & Discovery" },
{ id: "audit-security", name: "Audit & Security" },
],
},
{
name: "Scheduling & Orchestration",
description:
"Run agents reliably on Kubernetes and Temporal with retries, data sharing, and debugging",
icon: "calendarCheck",
items: [
{ id: "data-sharing", name: "Data Sharing" },
{ id: "workflows", name: "Workflows" },
{ id: "developer-experience", name: "Developer Experience" },
],
},
];
return (
<div className={styles.agenticIdentityFramework}>
<div className={styles.header}>
<div>
<h2 className={styles.title}>Understand the complete framework</h2>
<p className={styles.description}>
{name} is part of one of the four pillars. Explore what comes next.
</p>
</div>
<Button as="link" href={href} className={styles.link}>
Explore full framework →
</Button>
</div>
<div className={styles.pillars}>
{pillars.map((pillar) => (
<div key={pillar.name} className={styles.pillar}>
<div className={styles.pillarHeader}>
<Icon name={pillar.icon} size="md" />
<div>
<h3 className={styles.pillarTitle}>{pillar.name}</h3>
<p className={styles.pillarDescription}>{pillar.description}</p>
</div>
</div>
<div>
<ul className={styles.pillarItems}>
{pillar.items.map((item) => (
<li
key={item.name}
className={cn(styles.pillarItem, {
[styles.active]: item.id === activeCategoryId,
})}
>
{item.name}
</li>
))}
</ul>
</div>
</div>
))}
</div>
</div>
);
};

export default AgenticIdentityFramework;
1 change: 1 addition & 0 deletions src/components/AgenticIdentity/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from "./AgenticIdentity";
5 changes: 5 additions & 0 deletions src/components/Icon/icons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ export { default as bolt } from "./svg/bolt.svg";
export { default as book } from "./svg/book.svg";
export { default as building } from "./svg/building.svg";
export { default as calendar } from "./svg/calendar.svg";
export { default as calendarCheck } from "./svg/calendar-check.svg";
export { default as card } from "./svg/card.svg";
export { default as checkCircle } from "./svg/check-circle.svg";
export { default as checkRound } from "./svg/check-round.svg";
Expand Down Expand Up @@ -99,6 +100,7 @@ export { default as quickstart } from "./svg/quickstart.svg";
export { default as redis } from "./svg/redis.svg";
export { default as server } from "./svg/server-access.svg";
export { default as shieldCheck } from "./svg/shield-check.svg";
export { default as shieldCheck2 } from "./svg/shield-check2.svg";
export { default as building2 } from "./svg/simple-building.svg";
export { default as cloud2 } from "./svg/simple-cloud.svg";
export { default as code3 } from "./svg/simple-code.svg";
Expand All @@ -121,6 +123,8 @@ export { default as chat } from "./svg/chat-circle.svg";
export { default as lightbulb } from "./svg/lightbulb.svg";
export { default as githubLogo } from "./svg/github-logo.svg";
export { default as markdown } from "./svg/markdown.svg";
export { default as keyhole } from "./svg/keyhole.svg";
export { default as keyholePurple } from "./svg/keyhole-purple.svg";

// Teleport svgs
export { default as agent } from "./teleport-svg/agent.svg";
Expand All @@ -138,3 +142,4 @@ export { default as teleportCommunity } from "./teleport-svg/teleport-community-
export { default as teleportEnterpriseCloud } from "./teleport-svg/teleport-enterprise-cloud.svg";
export { default as teleportEnterpriseSelfHosted } from "./teleport-svg/teleport-enterprise-self-hosted.svg";
export { default as windowsDesktops } from "./teleport-svg/windows-desktops.svg";
export { default as certificate } from "./teleport-svg/certificate.svg";
4 changes: 4 additions & 0 deletions src/components/Icon/svg/calendar-check.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions src/styles/variables.css
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
--color-interactive-primary: #9f85ff;
--color-interactive-primary-hover: #4126a1;
--color-background-depth-2: #fbfbfc;
--color-background-depth-3: #f1f2f4;
--color-data-purple-tertiary: #b9a6ff;
--color-data-purple-secondary: #6f4ced;
--color-data-caribbean-tertiary: #2effd5;
Expand Down
2 changes: 2 additions & 0 deletions src/theme/MDXComponents/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import { ChangelogLink } from "/src/components/ChangelogLink";
import InlineCTA from "/src/components/InlineCTA/InlineCTA";
import EnterpriseFeatureWidget from "@site/src/components/EnterpriseFeatureWidget/EnterpriseFeatureWidget";
import Callout from "@site/src/components/Callout";
import AgenticIdentityFramework from "@site/src/components/AgenticIdentity";

const MDXComponents: MDXComponentsObject = {
...OriginalMDXComponents,
Expand Down Expand Up @@ -69,6 +70,7 @@ const MDXComponents: MDXComponentsObject = {
EnterpriseFeatureWidget,
InlineCTA,
Callout,
AgenticIdentityFramework,
};

export default MDXComponents;
Loading