功能标志
为一个项目启用 Beeuni 界面,并查看每个标志控制的功能。
功能标志用于为单个项目启用 Beeuni 的一项功能界面。任何功能界面都可以在标志后发布——无论是实验性、Beta 版还是完全稳定的功能。「实验性」是标志的稳定性徽章,不是系统的名称。
标志按项目设置。在一个项目中启用标志不会影响其他项目,也不会影响其他账户。
启用标志
- 打开 Settings → Feature flags。此标签页会列出平台支持的所有标志。
- 查看该行:标志名称、稳定性徽章、一句说明,以及来源——
Default on、Default off或Overridden for this project。 - 使用开关。更改会立即应用于当前项目。
你需要拥有项目的 project.settings.write 权限。其他调用者访问该路由时会收到
403。
使用 CLI
脚本和代理也可以通过 beeuni projects features 使用相同的开关:
beeuni projects features # every flag: key, state, origin
beeuni projects features enable reminders
beeuni projects features disable reminders
beeuni projects features reset reminders # drop the override; follow the platform default
beeuni projects features --json # the full catalog as JSON
添加 --project <id>,即可操作链接的项目或默认项目之外的其他项目。如果平台标记某个标志为不可用,则无论项目覆盖设置如何,该标志都会保持关闭;CLI 会将其显示为 n/a / unavailable。
稳定性徽章
徽章描述的是契约,而不是开关。stable 标志仍然需要主动选择启用:apps 是稳定的,但默认仍处于关闭状态。
| 徽章 | 含义 |
|---|---|
| Experimental | 功能界面及其契约仍可能发生变化。 |
| Beta | 功能界面可用,形式也逐渐稳定。 |
| Stable | 契约稳定。该标志仍需主动选择启用。 |
标志的执行方式
每个标志都声明一种执行模式。
| 模式 | 标志关闭时服务器的行为 |
|---|---|
routes |
HTTP 接口会以 403 拒绝请求。 |
behavioral |
不会发生相应行为——不会生成连接器、不会注入环境变量,也不会注册代理。 |
ui-only |
服务器有意不执行检查。该标志仅隐藏客户端界面。 |
routes 拒绝响应在任何地方都完全相同:
{
"error": "Apps is not enabled for this project. Contact Beeuni to enable it.",
"code": "feature_disabled",
"feature": "apps"
}
error 字符串指的是标志列表,而不是某个特定标签页。该列表位于 Settings 的 Experimental 标签页。
应根据 code 进行分支判断,绝不要根据消息文本判断。SDK 导出了 isFeatureDisabledError(error) 和 featureDisabledKey(error),专供此用途。
所有标志
注册表顺序——与 Settings → Feature flags 中显示的顺序相同。
Apps 和 Backends 由 Beeuni 按项目启用。联系 Beeuni 申请开通。启用后,设置中会显示由 Beeuni 管理。
| 键 | 名称 | 稳定性 | 默认值 |
|---|---|---|---|
marketplace |
Marketplace | Beta | 开启 |
connectors_api_discover |
Connectors API Discover | Experimental | 关闭 |
agentmail_email |
AgentMail Email | Experimental | 关闭 |
llm_gateway |
LLM Gateway | Experimental | 开启(运维人员可以将默认值设为关闭) |
meta_agent |
Meta Agent | Experimental | 关闭 |
apps |
Apps | Stable | 关闭 |
monitors |
Monitors | Experimental | 关闭 |
reminders |
Reminders | Beta | 关闭 |
warm_sessions |
Warm Sessions | Beta | 开启 |
secrets_egress |
Network-Enforced Secrets | Experimental | 开启 |
pi_harness |
Pi Harness | Experimental | 关闭 |
每个标志控制的功能
marketplace— 从社区和供应商注册表浏览并安装技能。connectors_api_discover— 在 托管 OAuth 应用旁浏览直接 API、MCP、GraphQL、CLI 和 Postman 功能界面。参见 Connectors。agentmail_email— 分配 AgentMail 收件箱连接,让收到的邮件能够启动并继续会话。llm_gateway— 通过 Beeuni 托管的 LLM 网关路由项目请求。参见 Models。meta_agent— 添加由平台管理的协调代理,以启动和管理专用会话。apps— 将静态网站、bundles、Dockerfile 和 OCI 镜像部署到稳定的无服务器 URL。参见 Apps。monitors— 从代码仓库运行全天候监视器,并将触发事件发送到会话。参见 Triggers。reminders— 计划签到,用于向一个会话重新发送提示,可执行一次或重复执行。关闭后,提醒路由会返回feature_disabled,现有提醒也不会触发。参见 Reminders。warm_sessions— 项目打开期间保持一个沙盒运行,以便新会话无需冷启动即可开始。secrets_egress— 为密钥启用网络强制执行:沙盒持有一个句柄,Beeuni 只会在请求经过批准的主机时替换为真实值。参见 Secrets。pi_harness— 在普通会话沙盒(BEEUNI_HARNESS=pi)内,使用 pi 代理运行时来运行此项目的会话。开启时,无论清单中如何设置,每个新会话或重启的会话都会启动 pi。关闭时,由清单决定——runtime: pi仍会启动 pi,其他设置则会启动 默认运行时。pi 只能通过 LLM 网关调用模型:关闭llm_gateway后,无论此标志或清单如何设置,每个会话都会启动 默认运行时。两种模式使用相同的代码仓库布局、代理和技能;运行中的会话会继续使用当前运行时,直到重启或恢复。pi 支持子代理:代理使用task工具将任务委派给general、explore(只读),或在其.md中带有mode: subagent的任何项目代理;对话记录会在原位置显示每个子代理的步骤。pi 会话也会加载 pi.dev 软件包:参见harnesses:。pi 并不支持 默认运行时 提供的所有会话功能:参见 Harnesses 中的对照表。
已普及的标志
已普及的功能会对所有项目启用,且没有开关。
- Agents as principals 是无开关的标准行为。代理会话会以代理本身的身份运行——无论由谁启动,它在 Beeuni 中的权限都受其角色上限限制。参见 Agent permissions。
- Review Center 已脱离标志系统。每个项目都会显示 Review 页面、侧边栏中的 Review 行和命令面板中的对应行;
project.review.read和project.review.act权限仍然适用。review_center不再是标志键:PATCH /v1/projects/:id/features会返回400Unknown feature flag,而beeuni projects features enable review_centerprints that error and exits1。普及之前存储的覆盖设置不再生效。 - Computers 已脱离标志系统。每位成员都可以从项目侧边栏连接自己的计算机;平台的
TUNNEL_ENABLED设置是唯一门控。agent_tunnel不再是标志键:PATCH /v1/projects/:id/features会返回400Unknown feature flag。参见 Computers。 - Microsoft Teams 已脱离标志系统。每个项目都可以通过 Connectors → Channels 连接 Teams;租户管理员仍需授权一次,或者项目可以使用自己的机器人。
teams不再是标志键:PATCH /v1/projects/:id/features会返回400Unknown feature flag。普及之前存储的覆盖设置不再生效。参见 Microsoft Teams。
切换开关的副作用
部分标志会在写入提交后使平台状态趋于一致。
| 标志 | 切换后的效果 |
|---|---|
agentmail_email |
Beeuni 会重新执行频道连接器的生成操作,因此连接器会随标志启用或消失。 |
llm_gateway |
Beeuni 会将新的提供方模式传播到活动沙盒。 |
这些效果属于状态收敛工作,不是切换操作成功的一部分。API 响应不会等待它们完成。每项效果都会重试一次,其背后的协调器具有幂等性,并会在定期扫描时重新运行。
在代码中读取和设置标志
通过项目详情或 React hook 读取项目的有效状态:
import { useFeatureFlag } from '@beeuni/sdk/react';
function AppsNavItem({ projectId }: { projectId: string }) {
const apps = useFeatureFlag(projectId, 'apps');
if (!apps.enabled) return null;
return <Link href={`/projects/${projectId}/apps`}>Apps</Link>;
}
只有当服务器准确返回 true 时,enabled 才为 true。项目 ID 缺失、查询进行中以及查询出错时,结果均为 false。门控应采用默认关闭策略。
使用客户端设置项目覆盖:
const p = beeuni.project(projectId);
await p.updateFeatureFlag('apps', true); // turn it on for this project
await p.updateFeatureFlag('apps', null); // clear the override, inherit the default
updateFeatureFlag 会调用 PATCH /v1/projects/:id/features。feature 是 FEATURE_FLAG_KEYS 之一,导出自 @beeuni/sdk,类型为 FeatureFlagKey。参见 SDK 参考文档。
通过代码处理功能已禁用的情况,而不是依赖消息文本:
import { featureDisabledKey, isFeatureDisabledError } from '@beeuni/sdk';
try {
await beeuni.project(projectId).apps.list();
} catch (error) {
if (isFeatureDisabledError(error)) {
console.log(`${featureDisabledKey(error)} is off for this project`);
}
}