@@ -150,39 +147,37 @@ const lines = computed
(() => {
.lab {
display: grid;
grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.4fr);
- gap: 20px;
+ gap: 24px;
}
.lab-controls {
display: grid;
- gap: 14px;
+ gap: 16px;
align-content: start;
}
fieldset {
+ position: relative;
border: 1px solid var(--l-line);
border-radius: 10px;
- padding: 10px 10px 8px;
+ padding: 8px;
margin: 0;
background: var(--l-panel);
}
legend {
- padding: 0 6px;
- font: 500 12px/1 var(--l-mono);
- text-transform: uppercase;
- letter-spacing: 0.08em;
- color: var(--l-muted);
-}
-.dollar {
- color: var(--l-accent);
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
+ clip: rect(0 0 0 0);
}
.opt {
display: grid;
- grid-template-columns: 18px 1fr auto;
+ grid-template-columns: 18px 1fr;
align-items: center;
gap: 8px;
width: 100%;
- padding: 7px 8px;
+ padding: 9px 10px;
border-radius: 6px;
- font: 14px/1.3 var(--l-mono);
+ font: 15px/1.3 var(--l-mono);
color: var(--l-text-2);
text-align: left;
transition: background 0.15s, color 0.15s;
@@ -206,13 +201,8 @@ legend {
.opt.unsupported.on .name {
color: var(--l-danger);
}
-.opt code {
- font-size: 11px;
- color: var(--l-muted);
- white-space: nowrap;
-}
.box {
- font-size: 12px;
+ font-size: 14px;
}
.lab-code {
display: flex;
@@ -229,7 +219,7 @@ legend {
gap: 12px;
padding: 10px 14px;
border-bottom: 1px solid rgba(232, 241, 235, 0.08);
- font: 12px var(--l-mono);
+ font: 14px var(--l-mono);
color: #7f8f85;
}
.dots {
@@ -249,7 +239,7 @@ legend {
margin: 0;
padding: 16px 18px;
overflow-x: auto;
- font: 13px/1.7 var(--l-mono);
+ font: 14px/1.7 var(--l-mono);
color: var(--l-code-text);
animation: settle 0.35s ease-out;
}
@@ -286,7 +276,7 @@ legend {
align-items: baseline;
padding: 12px 18px;
border-top: 1px solid rgba(232, 241, 235, 0.08);
- font: 13px/1.5 var(--l-mono);
+ font: 14px/1.5 var(--l-mono);
}
.verdict.pass {
color: #4ade80;
@@ -307,13 +297,15 @@ legend {
}
.lab-foot {
grid-column: 1 / -1;
- margin: 0;
- font-size: 14px;
- color: var(--l-muted);
+ margin: 12px 0 0;
+ font-size: 16px;
+ line-height: 1.6;
+ color: var(--l-text-2);
}
.lab-foot a {
color: var(--l-accent);
font-family: var(--l-mono);
+ white-space: nowrap;
text-decoration: none;
}
@keyframes settle {
diff --git a/website/.vitepress/theme/components/Landing.vue b/website/.vitepress/theme/components/Landing.vue
index 498ad7cc3..d1c754e4a 100644
--- a/website/.vitepress/theme/components/Landing.vue
+++ b/website/.vitepress/theme/components/Landing.vue
@@ -1,14 +1,15 @@
@@ -23,7 +23,6 @@ const rows = computed(() => [
-
{{ row.label }}
@@ -41,9 +40,9 @@ const rows = computed(() => [
+
+
diff --git a/website/.vitepress/theme/components/TypeTerminal.vue b/website/.vitepress/theme/components/TypeTerminal.vue
deleted file mode 100644
index b5ee7a58e..000000000
--- a/website/.vitepress/theme/components/TypeTerminal.vue
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
-
-
- {{ title }}
-
-
❯ {{ shown[i] }}█
-
-
-
-
-
diff --git a/website/.vitepress/theme/index.ts b/website/.vitepress/theme/index.ts
index c05406789..1bc256aff 100644
--- a/website/.vitepress/theme/index.ts
+++ b/website/.vitepress/theme/index.ts
@@ -1,7 +1,6 @@
import DefaultTheme from 'vitepress/theme'
import type { Theme } from 'vitepress'
import '@fontsource-variable/inter'
-import '@fontsource-variable/space-grotesk'
import '@fontsource-variable/geist-mono'
import Layout from './Layout.vue'
import Landing from './components/Landing.vue'
diff --git a/website/.vitepress/theme/landing-content.ts b/website/.vitepress/theme/landing-content.ts
index e5879da97..d150fcc0c 100644
--- a/website/.vitepress/theme/landing-content.ts
+++ b/website/.vitepress/theme/landing-content.ts
@@ -1,284 +1,170 @@
// Landing page copy. Every product claim here is backed by a page in docs/ or
-// contracts/; each section links to the page that owns the detail.
+// contracts/; link labels equal the target page titles.
export type Lang = 'en' | 'zh'
+export interface FlowCopy {
+ label: string
+ stages: string[]
+ captions: string[]
+ app: string
+ api: string
+ state: string
+ orchestration: string
+ events: string
+ workspace: string
+ loop: string
+ runtime: string
+ model: string
+ provider: string
+ compute: string
+ next: string
+ back: string
+ play: string
+ pause: string
+ step: string
+}
+
export interface LandingCopy {
- hero: {
- eyebrow: string
- title: [string, string]
- lede: string
- primary: string
- secondary: string
- installLabel: string
- copied: string
- copy: string
- hud: [string, string][]
- }
- video: { title: string; expand: string; close: string; pause: string; play: string }
- ticker: string[]
+ hero: { title: [string, string]; lede: string; primary: string; secondary: string; copied: string; copy: string; installTabs: [string, string] }
+ video: { title: string; expand: string; close: string }
compose: {
- index: string
- kicker: string
- title: string
- titleAccent: string
- lede: string
harness: string
protocol: string
environment: string
accepted: string
rejected: (harness: string, protocols: string) => string
- envs: Record<'openai_hosted' | 'self_hosted', { label: string; note: string }>
+ envs: Record<'openai_hosted' | 'self_hosted', string>
input: string
footnote: string
footnoteLink: string
}
- architecture: {
- index: string
- kicker: string
- title: string
- titleAccent: string
- lede: string
- tabs: { id: string; label: string; alt: string }[]
- more: string
- }
- session: {
- index: string
- kicker: string
- title: string
- titleAccent: string
- lede: string
- rules: { title: string; body: string; art: string }[]
- animation: { label: string; steps: string[]; messages: string[]; states: string[]; pause: string; play: string; replay: string; next: string; note: string }
- more: string
- }
- observe: {
- index: string
- kicker: string
- title: string
- titleAccent: string
- lede: string
- tabs: { id: 'overview' | 'metrics'; label: string; alt: string }[]
- caption: string
- }
- start: {
- index: string
- kicker: string
- title: string
- titleAccent: string
- lede: string
- steps: { title: string; body: string }[]
- cta: string
- trial: string
- }
+ architecture: { title: string; titleAccent: string; alt: string; more: string }
+ session: { title: string; titleAccent: string; more: string; flow: FlowCopy }
+ observe: { title: string; titleAccent: string; tabs: { id: 'overview' | 'metrics'; label: string; alt: string }[] }
docs: { title: string; links: { label: string; path: string }[] }
- ecosystem: { title: string; titleAccent: string; agents: string; compute: string; pause: string; resume: string }
+ ecosystem: { title: string; titleAccent: string; pause: string; resume: string }
+ start: { title: string; titleAccent: string; steps: { label: string; path: string }[] }
}
const en: LandingCopy = {
hero: {
- eyebrow: 'open source · self-hosted · OpenAI Agents API',
title: ['One core.', 'Many agents.'],
- lede: 'An open-source, self-hosted implementation of the OpenAI Agents API. Run Codex, Claude Code or MiniMax Code with your own models, on your own machines, through the official OpenAI SDK.',
- primary: 'Run your first Session',
+ lede: 'The OpenAI Agents API, open source and self-hosted. Run Codex, Claude Code or MiniMax Code on your own machines with your own models, through the official OpenAI SDK.',
+ primary: 'Get started',
secondary: 'Read the docs',
- installLabel: 'Linux amd64 · Docker · Python 3.9+',
copied: 'copied',
copy: 'copy',
- hud: [
- ['api', '/v1 · OpenAI Agents API'],
- ['harness', 'codex | claude_sdk | mcode'],
- ['protocol', 'responses | anthropic | chat_completions'],
- ['sandbox', 'microsandbox | e2b | docker'],
- ['workspace', 'independent filesystem adapter'],
- ['machine', 'linux | macos | windows'],
- ],
+ installTabs: ['macOS / Linux', 'Windows'],
},
- video: { title: 'Meet OpenAgentCore', expand: 'Watch the launch film', close: 'Close video', pause: 'Pause preview', play: 'Play preview' },
- ticker: ['Codex', 'Claude Code', 'MiniMax Code', 'Responses API', 'Anthropic Messages', 'Chat Completions', 'microsandbox', 'E2B', 'Docker', 'Linux', 'macOS', 'Windows', 'PostgreSQL', 'OpenAI SDK'],
+ video: { title: 'Meet OpenAgentCore', expand: 'Watch the launch film', close: 'Close video' },
compose: {
- index: '01',
- kicker: 'pick each part',
- title: 'Your agent. Your model. Your machine.', titleAccent: 'Your machine.',
- lede: 'Choose a combination. See the API call.',
- harness: 'harness',
- protocol: 'model protocol',
- environment: 'environment',
+ harness: 'Harness',
+ protocol: 'Model protocol',
+ environment: 'Environment',
accepted: 'accepted · Session created',
rejected: (harness, protocols) => `rejected before the Session is created · ${harness} speaks only ${protocols}`,
- envs: {
- openai_hosted: { label: 'managed sandbox', note: 'microsandbox + persistent FS · E2B' },
- self_hosted: { label: 'your machine', note: 'Linux · macOS · Windows' },
- },
+ envs: { openai_hosted: 'managed sandbox', self_hosted: 'your machine' },
input: 'Fix the failing test and explain the change.',
- footnote: 'The supported combinations are declared by each harness, not guessed.',
+ footnote: 'Each Harness declares the protocols it speaks; Core rejects other combinations before it creates the Session.',
footnoteLink: 'Harness capabilities',
},
architecture: {
- index: '02',
- kicker: 'protocols at every boundary',
title: 'One API. Replaceable parts.', titleAccent: 'Replaceable parts.',
- lede: 'Core orchestrates. Native harnesses run inside sandboxes. Compute and persistent workspace storage have separate adapters.',
- tabs: [
- { id: 'ecosystem', label: 'ecosystem', alt: 'Applications call Core through the Agents API; native Harnesses run inside sandboxes and call models directly. Separate adapters manage compute and persistent workspace storage.' },
- { id: 'protocols', label: 'components', alt: 'Agents API and Core API on top of Core; Sandbox Provider, Runtime, Harness and Model Provider connected by protocols.' },
- { id: 'surfaces', label: 'api namespaces', alt: 'Three namespaces with three credentials: Agents API for applications, Core API for operators, Machine API for nodes.' },
- ],
- more: 'Read the architecture',
+ alt: 'Applications call Core through the Agents API; native Harnesses run inside sandboxes and call models directly. Separate adapters manage compute and persistent workspace storage.',
+ more: 'Architecture',
},
session: {
- index: '03',
- kicker: 'execution you can manage',
- title: 'Session is all you need.', titleAccent: 'Session',
- lede: 'Submit work, follow its progress, and pick up the conversation.',
- rules: [
- { title: 'Connection ≠ work', body: 'Submitted work continues after the stream closes.', art: 'client ──────╳ disconnect\nturn ━━━━━━━━━━━━━━▶ completed' },
- { title: 'Retries have identity', body: 'Stable keys prevent duplicates on supported submission paths.', art: 'POST Idempotency-Key: a1f ──▶ turn_01\nPOST Idempotency-Key: a1f ──▶ turn_01' },
- { title: 'Cancel has a receipt', body: 'Core confirms the target Turn\'s execution and cleanup.', art: 'cancel ──▶ turn in_progress\n ──▶ turn cancelled ✓ confirmed' },
- { title: 'Compute can sleep', body: 'microsandbox suspends idle compute. Independent workspace files survive snapshot expiry; new work resumes or cold-starts execution.', art: 'compute ━━━┫ sleep ┣━━━\nworkspace ━━━━━━━━━━━━━━━' },
- ],
- animation: {
- label: 'Execution demo', steps: ['Submit', 'Run', 'Input needed', 'Resume', 'Complete'],
- messages: ['Your application submits a task.', 'The native harness runs the task.', 'The turn waits for input from your application.', 'Your application responds. Execution continues.', 'The result is ready for your application.'],
- states: ['Submitted', 'Running', 'Waiting', 'Running', 'Completed'],
- pause: 'Pause', play: 'Play', replay: 'Replay', next: 'Next', note: 'Illustrative workflow · Each harness declares its supported interactions.',
+ title: 'One Session, from request to result.', titleAccent: 'from request to result.',
+ more: 'A Session, end to end',
+ flow: {
+ label: 'Inside a Session', stages: ['Native agent', 'Managed execution', 'Many combinations'],
+ captions: ['Runtime prepares the environment. The native Harness owns the model and tool loop.', 'Your app creates a Session through the Agents API. Core manages execution and durable state.', 'Sessions use different Harnesses and models. Managed Sessions here share one microsandbox deployment; independent workspaces outlive compute.'],
+ app: 'Your application', api: 'OpenAI SDK · Agents API', state: 'Sessions & Turns', orchestration: 'Schedule · cancel · interact', events: 'Events · results · durable state', workspace: 'Mounted workspace · shell · tools', loop: 'Native agent loop', runtime: 'Prepare · execute · report', model: 'Model provider', provider: 'Sandbox Provider', compute: 'Provision & reclaim compute', next: 'Next', back: 'Back', play: 'Play', pause: 'Pause', step: 'Architecture stage',
},
- more: 'Session lifecycle',
},
observe: {
- index: '04',
- kicker: 'see it run',
- title: 'Operations you can actually see.', titleAccent: 'actually see.',
- lede: 'Sessions · Compute capacity · Usage',
+ title: 'Run it from one console.', titleAccent: 'one console.',
tabs: [
- { id: 'overview', label: 'overview', alt: 'Web console overview: service status, running Sessions, sandbox capacity, fleet and Projects.' },
- { id: 'metrics', label: 'agent metrics', alt: 'Web console agent metrics: requests, errors, latency, tokens and tool calls.' },
+ { id: 'overview', label: 'Overview', alt: 'Web console overview: service status, running Sessions, sandbox capacity, fleet and Projects.' },
+ { id: 'metrics', label: 'Agent metrics', alt: 'Web console agent metrics: requests, errors, latency, tokens and tool calls.' },
],
- caption: 'Screenshot values are illustrative. Usage visibility depends on what each native harness reports.',
},
+ docs: { title: 'Documentation', links: [
+ { label: 'Run your first Session', path: '/docs/getting-started/quickstart' },
+ { label: 'Agents API guide', path: '/docs/api/public-agent-api' },
+ { label: 'Install Core and Web', path: '/docs/getting-started/install' },
+ { label: 'Develop OpenAgentCore', path: '/docs/development' },
+ ] },
+ ecosystem: { title: 'An open ecosystem.', titleAccent: 'open ecosystem.', pause: 'Pause', resume: 'Resume' },
start: {
- index: '05',
- kicker: 'get started',
title: 'From install to first Session.', titleAccent: 'first Session.',
- lede: 'On a Linux amd64 host with Docker and Python 3.9+:',
steps: [
- { title: 'Install & sign in', body: '' },
- { title: 'Configure model & compute', body: '' },
- { title: 'Run your first Session', body: '' },
+ { label: 'Install Core and Web', path: '/docs/getting-started/install' },
+ { label: 'Add and manage nodes', path: '/docs/getting-started/nodes' },
+ { label: 'Run your first Session', path: '/docs/getting-started/quickstart' },
],
- cta: 'Installation guide',
- trial: 'Quickstart',
},
- docs: { title: 'Explore the docs', links: [
- { label: 'Quickstart', path: '/docs/getting-started/quickstart' },
- { label: 'API reference', path: '/docs/api/public-agent-api' },
- { label: 'Deployment', path: '/docs/getting-started/install' },
- { label: 'Build an adapter', path: '/docs/development' },
- ] },
- ecosystem: { title: 'One core. An open ecosystem.', titleAccent: 'An open ecosystem.', agents: 'Harnesses & models', compute: 'Cloud & compute', pause: 'Pause', resume: 'Resume' },
}
const zh: LandingCopy = {
hero: {
- eyebrow: '开源 · 可自部署 · OpenAI Agents API',
title: ['One core.', 'Many agents.'],
- lede: 'OpenAI Agents API 的开源实现。用官方 OpenAI SDK,在你自己的模型和机器上运行 Codex、Claude Code 或 MiniMax Code。',
- primary: '运行第一个 Session',
+ lede: '开源、可自部署的 OpenAI Agents API。用官方 OpenAI SDK,在你自己的机器上用你自己的模型运行 Codex、Claude Code 或 MiniMax Code。',
+ primary: '开始使用',
secondary: '阅读文档',
- installLabel: 'Linux amd64 · Docker · Python 3.9+',
copied: '已复制',
copy: '复制',
- hud: [
- ['api', '/v1 · OpenAI Agents API'],
- ['harness', 'codex | claude_sdk | mcode'],
- ['protocol', 'responses | anthropic | chat_completions'],
- ['sandbox', 'microsandbox | e2b | docker'],
- ['workspace', '独立文件系统 adapter'],
- ['machine', 'linux | macos | windows'],
- ],
+ installTabs: ['macOS / Linux', 'Windows'],
},
- video: { title: '认识 OpenAgentCore', expand: '观看发布视频', close: '关闭视频', pause: '暂停预览', play: '播放预览' },
- ticker: en.ticker,
+ video: { title: '认识 OpenAgentCore', expand: '观看发布视频', close: '关闭视频' },
compose: {
- index: '01',
- kicker: '自由组合',
- title: 'Agent、模型、机器,自由组合。', titleAccent: '自由组合。',
- lede: '选一个组合,看看对应的 API 调用。',
- harness: 'harness',
+ harness: 'Harness',
protocol: '模型协议',
environment: '执行环境',
accepted: '通过校验 · Session 已创建',
rejected: (harness, protocols) => `创建前即被拒绝 · ${harness} 只支持 ${protocols}`,
- envs: {
- openai_hosted: { label: '托管沙箱', note: 'microsandbox + 持久 FS · E2B' },
- self_hosted: { label: '你自己的机器', note: 'Linux · macOS · Windows' },
- },
+ envs: { openai_hosted: '托管沙箱', self_hosted: '你自己的机器' },
input: '修复失败的测试,并说明改动。',
- footnote: '支持哪些组合,由每个 Harness 明确声明,而不是猜测。',
- footnoteLink: 'Harness 能力表',
+ footnote: '每个 Harness 声明自己支持的协议;其他组合在创建 Session 前即被拒绝。',
+ footnoteLink: 'Harness 能力',
},
architecture: {
- index: '02',
- kicker: '每条边界都是协议',
title: '一个 API,部件自由替换。', titleAccent: '部件自由替换。',
- lede: 'Core 编排,原生 Harness 在沙箱内执行;计算与持久工作区存储由独立 adapter 管理。',
- tabs: [
- { id: 'ecosystem', label: '生态', alt: '应用通过 Agents API 接入 Core;原生 Harness 在沙箱内运行并调用模型,计算与持久工作区存储由独立 adapter 管理。' },
- { id: 'protocols', label: '组件', alt: 'Core 之上是 Agents API 与 Core API;沙箱提供商、Runtime、Harness、模型提供商通过协议连接。' },
- { id: 'surfaces', label: 'API 命名空间', alt: '三个命名空间、三种凭据:应用用 Agents API,管理员用 Core API,节点用 Machine API。' },
- ],
- more: '阅读架构文档',
+ alt: '应用通过 Agents API 接入 Core;原生 Harness 在沙箱内运行并调用模型,计算与持久工作区存储由独立 adapter 管理。',
+ more: '架构',
},
session: {
- index: '03',
- kicker: '可管理的执行',
- title: 'Session is all you need.', titleAccent: 'Session',
- lede: '提交任务,追踪进度,继续对话。',
- rules: [
- { title: '连接 ≠ 任务', body: '关闭输出流,已提交的任务仍继续执行。', art: en.session.rules[0].art },
- { title: '重试有身份', body: '支持的提交路径用稳定标识避免重复任务。', art: en.session.rules[1].art },
- { title: '取消要有回执', body: 'Core 确认任务停止与资源清理。', art: en.session.rules[2].art },
- { title: '计算可以休眠', body: 'microsandbox 自动挂起空闲计算;独立工作区文件在快照过期后保留,新任务到来时恢复或冷启动。', art: en.session.rules[3].art },
- ],
- animation: {
- label: '执行流程演示', steps: ['提交', '执行', '等待输入', '继续执行', '完成'],
- messages: ['应用提交一项任务。', '原生 Harness 开始执行。', 'Turn 等待应用提供输入。', '应用回应,任务继续执行。', '结果已就绪,应用可以读取。'],
- states: ['已提交', '执行中', '等待中', '执行中', '已完成'],
- pause: '暂停', play: '播放', replay: '重播', next: '下一步', note: '流程示意 · 交互支持范围由各 Harness 声明。',
+ title: '一个 Session,从请求到结果。', titleAccent: '从请求到结果。',
+ more: '一个 Session 的完整流程',
+ flow: {
+ label: 'Session 内部', stages: ['原生 Agent', '统一执行', '自由组合'],
+ captions: ['Runtime 准备环境,原生 Harness 运行模型与工具循环。', '应用通过 Agents API 创建 Session,Core 管理执行与持久状态。', '不同 Session 使用不同 Harness 与模型;此示例中的托管 Session 共用 microsandbox 部署,独立工作区可跨计算生命周期保留。'],
+ app: '你的应用', api: 'OpenAI SDK · Agents API', state: 'Session 与 Turn', orchestration: '调度 · 取消 · 交互', events: '事件 · 结果 · 持久状态', workspace: '挂载工作区 · Shell · 工具', loop: '原生 Agent 循环', runtime: '环境准备 · 执行管理', model: '模型提供商', provider: '沙箱提供商', compute: '创建与回收计算资源', next: '下一步', back: '上一步', play: '播放', pause: '暂停', step: '演示阶段',
},
- more: 'Session 生命周期',
},
observe: {
- index: '04',
- kicker: '看见运行',
- title: '运行情况,看得见。', titleAccent: '看得见。',
- lede: 'Session 状态 · 计算资源 · 用量',
+ title: '一个控制台管理全部运行。', titleAccent: '一个控制台',
tabs: [
- { id: 'overview', label: '部署概览', alt: 'Web 控制台概览:服务状态、运行中的 Session、沙箱容量、节点与项目。' },
+ { id: 'overview', label: '概览', alt: 'Web 控制台概览:服务状态、运行中的 Session、沙箱容量、节点与项目。' },
{ id: 'metrics', label: 'Agent 监控', alt: 'Web 控制台 Agent 监控:请求、错误、耗时、Token 与工具调用。' },
],
- caption: '截图数值仅用于展示界面。用量可见性取决于原生 Harness 提供的数据。',
},
+ docs: { title: '文档', links: [
+ { label: '运行第一个 Session', path: '/docs/getting-started/quickstart' },
+ { label: 'Agents API 指南', path: '/docs/api/public-agent-api' },
+ { label: '安装 Core 和 Web', path: '/docs/getting-started/install' },
+ { label: '开发 OpenAgentCore', path: '/docs/development' },
+ ] },
+ ecosystem: { title: '开放的生态。', titleAccent: '开放的生态。', pause: '暂停', resume: '继续' },
start: {
- index: '05',
- kicker: '开始使用',
title: '从安装到第一个 Session。', titleAccent: '第一个 Session。',
- lede: '在装有 Docker 和 Python 3.9+ 的 Linux amd64 主机上:',
steps: [
- { title: '安装并登录', body: '' },
- { title: '配置模型与计算资源', body: '' },
- { title: '运行第一个 Session', body: '' },
+ { label: '安装 Core 和 Web', path: '/docs/getting-started/install' },
+ { label: '添加和管理节点', path: '/docs/getting-started/nodes' },
+ { label: '运行第一个 Session', path: '/docs/getting-started/quickstart' },
],
- cta: '安装指南',
- trial: '快速开始',
},
- docs: { title: '文档入口', links: [
- { label: '快速开始', path: '/docs/getting-started/quickstart' },
- { label: 'API 参考', path: '/docs/api/public-agent-api' },
- { label: '部署指南', path: '/docs/getting-started/install' },
- { label: '扩展适配器', path: '/docs/development' },
- ] },
- ecosystem: { title: '一个内核,开放的生态。', titleAccent: '开放的生态。', agents: 'Harness 与模型', compute: '云计算与沙箱', pause: '暂停', resume: '继续' },
}
export const copy: Record = { en, zh }
@@ -292,6 +178,9 @@ export const harnesses = [
export const protocols = ['responses', 'anthropic', 'chat_completions'] as const
-export const installCommand = 'curl -fsSL https://openagentcore.dev/install.sh | bash'
+export const installCommands = {
+ unix: 'curl -fsSL https://openagentcore.dev/install.sh | bash',
+ windows: 'irm https://github.com/MiniMax-AI/OpenAgentCore/releases/latest/download/install.ps1 | iex',
+} as const
export const repoUrl = 'https://github.com/MiniMax-AI/OpenAgentCore'
diff --git a/website/README.md b/website/README.md
index ff417011f..0b6a74f88 100644
--- a/website/README.md
+++ b/website/README.md
@@ -19,25 +19,25 @@ pnpm --dir website preview # serve the build at http://127.0.0.1:4181
- Each page's source Markdown is published next to its HTML (`/docs/architecture.md`), and the `README` paths declared in `docs.json` redirect to their section index.
- Relative links from a page to a file that is not a published page, such as `CONTRIBUTING.md` or `openapi.yaml`, are rewritten to GitHub at build time, so the Markdown works unchanged on GitHub and on the site.
-The visual system combines warm paper surfaces, green accents, ruled sections and ASCII artwork. Landing headings use self-hosted Space Grotesk; body text uses Inter and code uses Geist Mono. Chinese text uses the system Chinese sans-serif stack. Both light and dark themes share the same hierarchy.
+The visual system combines warm paper surfaces, green accents and ruled sections. Landing headings use self-hosted Space Grotesk (loaded by the landing only); body text uses Inter and code uses Geist Mono. Chinese text uses the system Chinese sans-serif stack. Both light and dark themes share the same hierarchy.
Site appearance and metadata are configured in `.vitepress/config.mts` and `.vitepress/theme/`.
-The landing page lives in `.vitepress/theme/`. `landing-content.ts` holds its English and Chinese copy; every claim there must be backed by a page in `docs/` or `contracts/`, and its harness protocols follow [Model execution](../contracts/agents-api/model-execution.md).
+The landing page lives in `.vitepress/theme/`. `landing-content.ts` holds its English and Chinese copy; every claim there must be backed by a page in `docs/` or `contracts/`, link labels equal the target page titles, and its Harness protocols follow [Model execution](../contracts/agents-api/model-execution.md). The hero lede and the `description` in `config.mts` are the same sentence.
-The landing page has five numbered sections: the interactive combination example, an architecture image, execution lifecycle, console screenshots and installation. Four documentation shortcuts link to the detailed guides. `components/SessionFlow.vue` illustrates native execution, Core orchestration and multiple Session environments through a three-stage hand-drawn animation. It autoplays while visible and offers previous/next buttons, a stage slider and pause/play. Reduced-motion preferences disable autoplay. The diagram uses the locally bundled [Virgil font](https://github.com/excalidraw/virgil); its OFL license is stored beside the font in `.vitepress/theme/assets/fonts/`. Section headings share the hero’s display font with white text and green italic accents.
+The hero holds the title, the lede, the install command and the interactive example (`components/ComposeLab.vue`). Below it are four sections: an architecture image, the Session diagram, console screenshots and next steps, with four documentation shortcuts and the logo wall between the last two. `components/SessionFlow.vue` illustrates native execution, Core orchestration and multiple Session environments through a three-stage hand-drawn animation that scales to the column width. It autoplays while visible and offers previous/next buttons, a stage slider and pause/play. Reduced-motion preferences disable autoplay. The diagram uses the locally bundled [Virgil font](https://github.com/excalidraw/virgil); its OFL license is stored beside the font in `.vitepress/theme/assets/fonts/`.
### Launch video
-`components/LaunchVideo.vue` embeds the CDN-hosted launch film in the hero’s right column, below an interactive ASCII brand panel, in both languages. Green corner marks frame the preview. On narrow screens, the video fills the content width between the hero actions and installation command. The compact preview loops silently and has a pause control; reduced-motion preferences leave it paused. Opening the preview pauses it and continues from the same position in a modal player with native playback and audio controls. The close button, Escape and backdrop dismiss the player and return focus to the preview.
+`components/LaunchVideo.vue` renders the "Watch the launch film" link in the hero. The CDN-hosted video loads only when the link opens the modal player; nothing autoplays. The close button, Escape and backdrop dismiss the player.
### Ecosystem logo wall
-`components/LogoWall.vue` places two full-width white logo rows between the documentation shortcuts and the closing installation section. The wall is transparent and borderless, allowing the landing page's background and grid to continue through it. Harness and model brands occupy the first row; cloud and compute brands occupy the second. They scroll in opposite directions, pause on hover or row keyboard focus, and have an explicit pause control. Reduced-motion preferences disable animation and leave both rows manually scrollable. Labels and controls use the landing page's English and Chinese copy.
+`components/LogoWall.vue` places two full-width logo rows between the documentation shortcuts and the closing section. The wall is transparent and borderless, allowing the landing page's background and grid to continue through it. Harness and model brands occupy the first row; cloud and compute brands occupy the second. They scroll in opposite directions, pause on hover or row keyboard focus, and have an explicit pause control. Reduced-motion preferences disable animation and leave both rows manually scrollable.
-`.vitepress/theme/ecosystem-logos.ts` owns the brand list. These are ecosystem illustrations; supported Harness combinations remain defined by [Model execution](../contracts/agents-api/model-execution.md), and host requirements by [Installation](../docs/getting-started/install.md). Brand artwork does not establish deployment qualification or a partnership.
+`.vitepress/theme/ecosystem-logos.ts` owns the brand list. These are ecosystem illustrations; supported Harness combinations remain defined by [Model execution](../contracts/agents-api/model-execution.md), and host requirements by [Install Core and Web](../docs/getting-started/install.md). Brand artwork does not establish deployment qualification or a partnership.
-SVG files are bundled under `.vitepress/theme/assets/logos/` and rendered in white with CSS, preserving their proportions. Their sources are:
+SVG files are bundled under `.vitepress/theme/assets/logos/` and tinted with CSS (dark in the light theme, white in the dark theme), preserving their proportions. Their sources are:
- AI brands, AWS, Azure, Google Cloud, Alibaba Cloud, Tencent Cloud, Huawei Cloud, Volcengine, Baidu AI Cloud and DigitalOcean: [Lobe Icons](https://github.com/lobehub/lobe-icons), from `@lobehub/icons-static-svg` version `1.95.1`, using the matching filename in its `icons/` directory. MIT license: `LICENSE-lobe-icons.txt` beside the assets.
- Docker: [SVGL's Docker SVG](https://github.com/pheralb/svgl/blob/main/static/library/docker.svg). MIT license: `LICENSE-svgl.txt` beside the assets.
diff --git a/website/index.md b/website/index.md
index 92771439e..bab529dc7 100644
--- a/website/index.md
+++ b/website/index.md
@@ -2,7 +2,6 @@
layout: page
title: OpenAgentCore — One core. Many agents.
titleTemplate: false
-description: An open-source, self-hosted implementation of the OpenAI Agents API with multiple native Harnesses.
---
diff --git a/website/zh/index.md b/website/zh/index.md
index 05facbf58..775163080 100644
--- a/website/zh/index.md
+++ b/website/zh/index.md
@@ -2,7 +2,6 @@
layout: page
title: OpenAgentCore — One core. Many agents.
titleTemplate: false
-description: OpenAI Agents API 的开源实现,支持多种原生 Harness,可自部署。
---