- v2 foundation: ActionResult/DevError/ActorContext/ResourceRef/Execution types - ActionRegistry + ResourceRegistry (namespaced types, FAIL FAST on duplicates) - ActionRuntime pipeline: validate -> authorize -> middleware -> handler -> output validation -> audit -> event -> execution persisted (devos_action_executions) - Legacy bridge: v1 services registered as devops.*/core.* resources & actions (47 actions, 9 resources) - Unified Action API: POST /api/v2/actions/:actionId, GET discovery (actions/resources) - 10 v2 unit tests (registry fail-fast, validation, authz, failure audit, events)
45 KiB
07_UI_SHELL_APP_MODULE.md
DevOS Developer Work OS
UI Shell / App / Module / Plugin Runtime 设计规范
Version: 1.0
1. 文档目标
本文定义 DevOS 前端 UI 平台架构。
目标不是开发一个固定的 Admin Dashboard,而是建立一个:
可复用、可扩展、可插拔、可被 App/Plugin/MCP/Agent 动态扩展的前端 UI Shell。
DevOS 前端应该能够支持:
- Core 页面
- App 页面
- Module 页面
- Plugin 页面
- Resource 页面
- Action 页面
- Settings 页面
- Dashboard Widget
- Statistics Widget
- Chat Widget
- Report Widget
- Context Action
- Command Palette
- Global Search
- Workspace
- Agent UI
最终结构:
DevOS UI Shell
│
├── Core UI
│ ├── Layout
│ ├── Navigation
│ ├── Header
│ ├── Sidebar
│ ├── Workspace
│ ├── Command Palette
│ ├── Global Search
│ ├── Notifications
│ └── User Menu
│
├── App Runtime
│ ├── App Registry
│ ├── Module Registry
│ ├── Route Registry
│ ├── Navigation Registry
│ └── Widget Registry
│
├── Resource UI
│ ├── List
│ ├── Detail
│ ├── Create
│ ├── Edit
│ └── Actions
│
├── Plugin UI
│ ├── Pages
│ ├── Settings
│ ├── Dashboard
│ ├── Statistics
│ ├── Reports
│ ├── Chat
│ └── Context Actions
│
└── Agent UI
├── Goals
├── Runs
├── Tasks
├── Execution Trace
└── Agent Chat
2. 核心原则
DevOS UI 必须遵循:
UI
↓
UI Action / Query
↓
API
↓
Action Runtime / Resource Runtime
↓
Backend
禁止:
UI
↓
直接操作数据库
禁止:
UI
↓
自己实现业务逻辑
禁止:
Plugin UI
↓
绕过 DevOS Runtime
前端负责:
- 展示
- 用户交互
- 表单
- 状态
- 路由
- 权限可见性
- 调用 API
- 展示执行结果
后端负责:
- Authentication
- Authorization
- Business Logic
- Action Runtime
- Resource Runtime
- Task
- Job
- Queue
- Audit
- Transaction
3. App / Module / Plugin 的区别
必须明确三者边界。
3.1 App
App 是一个完整的产品/业务应用。
例如:
DevOS
SEO App
DevOps App
CRM App
Content App
App 可以包含:
Pages
Resources
Actions
Skills
Plugins
Widgets
Settings
Agents
例如:
SEO App
├── Websites
├── Keywords
├── Content
├── Backlinks
├── Reports
└── SEO Agent
4. Module
Module 是 App 内部的功能模块。
例如:
SEO App
├── Website Module
├── Keyword Module
├── Content Module
├── Backlink Module
└── Report Module
Module 通常不应该成为独立安装包。
它主要解决:
如何组织大型 App。
5. Plugin
Plugin 是可独立安装/卸载/启用/禁用的扩展。
例如:
GitHub Plugin
Browser Plugin
Cloudflare Plugin
Google Search Console Plugin
OpenAI Plugin
Plugin 可以提供:
Resource
Action
Skill
MCP
Workflow
Page
Settings
Widget
Context Action
例如:
GitHub Plugin
├── Resource
│ ├── repository
│ ├── issue
│ └── pull_request
│
├── Action
│ ├── repository.clone
│ ├── repository.create
│ └── issue.create
│
├── Skill
│ └── github.code_review
│
├── MCP
│ └── github
│
└── UI
├── Repositories
├── Settings
└── Statistics
6. UI Shell
DevOS Shell 是所有 App/Plugin 共用的 UI 基础。
推荐:
React
TypeScript
React Router
Ant Design
TanStack Query
Zustand
TipTap
Shell:
┌───────────────────────────────────────────────┐
│ Header │
│ Logo | Search | Command | Notifications | Me │
├──────────────┬────────────────────────────────┤
│ │ │
│ Navigation │ Workspace │
│ │ │
│ Dashboard │ Breadcrumb │
│ Apps │ │
│ Resources │ Page │
│ Plugins │ │
│ Settings │ │
│ │ │
│ │ │
└──────────────┴────────────────────────────────┘
7. App Registry
所有 App 都必须通过 Registry 注册。
export interface AppManifest {
id: string;
name: string;
description?: string;
version: string;
icon?: string;
route?: string;
navigation?: NavigationItem[];
modules?: ModuleManifest[];
widgets?: WidgetManifest[];
permissions?: string[];
metadata?: Record<string, unknown>;
}
例如:
{
id: "seo",
name: "SEO",
version: "1.0.0",
route: "/seo"
}
8. Module Manifest
export interface ModuleManifest {
id: string;
appId: string;
name: string;
version: string;
routes?: RouteDefinition[];
navigation?: NavigationItem[];
widgets?: WidgetManifest[];
resources?: string[];
permissions?: string[];
}
例如:
seo.website
seo.keyword
seo.content
seo.backlink
9. Plugin UI Manifest
Plugin UI 必须与 Plugin Manifest 统一。
export interface PluginUIManifest {
pluginId: string;
routes?: RouteDefinition[];
navigation?: NavigationItem[];
widgets?: WidgetManifest[];
settings?: SettingsPageDefinition[];
contextActions?: ContextActionDefinition[];
}
10. Route Registry
不要让每个 Plugin 自己修改 React Router。
统一:
Route Registry
↓
React Router
定义:
export interface RouteDefinition {
id: string;
path: string;
title: string;
component: string;
icon?: string;
permission?: string;
children?: RouteDefinition[];
metadata?: Record<string, unknown>;
}
例如:
{
id: "github.repositories",
path: "/plugins/github/repositories",
title: "Repositories",
component: "github.repositories"
}
11. Route Namespace
Plugin 路由必须隔离。
推荐:
/plugins/{pluginId}/...
例如:
/plugins/github/repositories
/plugins/github/issues
/plugins/cloudflare/zones
/plugins/cloudflare/dns
/plugins/browser/sessions
App:
/seo/...
/devops/...
/crm/...
Core:
/dashboard
/tasks
/agents
/settings
/plugins
禁止 Plugin 任意覆盖:
/settings
/users
/tasks
除非明确声明扩展点。
12. Navigation Registry
Navigation 不应该硬编码。
统一:
NavigationRegistry.register(...)
结构:
export interface NavigationItem {
id: string;
title: string;
path?: string;
icon?: string;
parentId?: string;
order?: number;
permission?: string;
visible?: boolean;
badge?: BadgeDefinition;
metadata?: Record<string, unknown>;
}
例如:
SEO
├── Overview
├── Websites
├── Keywords
├── Content
└── Backlinks
Plugin 安装后:
Plugins
├── GitHub
│ ├── Repositories
│ └── Issues
│
├── Cloudflare
│ └── Zones
│
└── Browser
└── Sessions
13. Navigation 权限
前端可以根据权限隐藏菜单。
例如:
permission: "seo.website.read"
没有权限:
Navigation → hidden
但是:
前端隐藏不是安全机制。
用户直接访问:
/seo/websites
后端仍必须检查:
seo.website.read
真正的安全边界始终是 Backend Authorization。
14. Dynamic Navigation
Plugin 启用后:
Plugin Runtime
↓
Plugin Manifest
↓
Navigation Registry
↓
UI Shell
↓
Navigation 更新
不应该修改:
Sidebar.tsx
来添加 Plugin。
15. Resource UI
Resource Metadata 应该能够驱动通用 UI。
例如:
Resource:
seo.website
定义:
{
id: "seo.website",
fields: {
name: {...},
domain: {...},
status: {...}
},
actions: [
"seo.website.create",
"seo.website.update",
"seo.website.delete",
"seo.website.scan"
]
}
UI 可以自动生成:
Website List
Website Detail
Create Website
Edit Website
16. Resource List
通用 Resource List:
┌─────────────────────────────────────────────┐
│ Websites + Create │
├─────────────────────────────────────────────┤
│ Search │
│ │
│ Domain Status Last Scan │
│ example.com Healthy 2 min ago │
│ example.org Warning 1 hour ago │
│ │
└─────────────────────────────────────────────┘
表格定义可以来自:
ResourceMetadata
但允许业务页面覆盖默认 UI。
17. Resource Detail
/seo/websites/:id
Detail 页面:
Website
├── Overview
├── SEO
├── Keywords
├── Content
├── Backlinks
├── Tasks
├── Executions
└── Activity
其中:
Overview
可以是通用 Resource UI。
而:
SEO
Keywords
Backlinks
可以是 App 自定义页面。
18. Action UI
Action 不是简单的 Button。
Action Metadata:
export interface ActionUIConfig {
actionId: string;
label: string;
icon?: string;
confirm?: boolean;
danger?: boolean;
form?: FormSchema;
resultView?: ResultViewDefinition;
}
例如:
Website Detail
[Scan Website]
点击:
seo.website.scan
进入:
Action Runtime
而不是:
POST /scan
再由 Controller 自己实现业务逻辑。
19. Action 状态
对于异步 Action:
pending
running
completed
failed
cancelled
UI 应该统一展示:
ActionExecution
例如:
Scan Website
Running...
████████████░░░░░░ 65%
Current:
Checking backlinks
20. Task UI
Action 如果创建 Task:
Action
↓
Task
↓
Job
↓
Execution
UI:
Task
├── Status
├── Progress
├── Jobs
├── Logs
├── Executions
└── Output
Agent、用户、Plugin 都应该使用同一 Task UI。
21. Agent UI
Agent 页面:
/agents
列表:
SEO Agent
DevOps Agent
General Agent
Content Agent
Agent Detail:
Agent
├── Overview
├── Goals
├── Runs
├── Skills
├── Capabilities
├── Policies
└── Settings
22. Agent Chat
Chat 只是 Agent 的一种 UI。
例如:
┌─────────────────────────────────────────────┐
│ SEO Agent │
├─────────────────────────────────────────────┤
│ │
│ User: │
│ 检查 example.com 的 SEO │
│ │
│ Agent: │
│ 我发现该网站存在 12 个问题。 │
│ │
│ [View Report] [Create Tasks] │
│ │
└─────────────────────────────────────────────┘
Chat 不应该直接执行业务。
流程:
Chat
↓
Agent Goal
↓
Agent Runtime
↓
Capability
↓
Action Runtime
23. Widget Registry
Widget 是 DevOS UI 的重要扩展机制。
Plugin 可以提供:
Dashboard Widget
Statistics Widget
Report Widget
Chat Widget
Resource Widget
Agent Widget
定义:
export interface WidgetManifest {
id: string;
title: string;
type:
| "dashboard"
| "statistics"
| "report"
| "chat"
| "resource"
| "agent";
component: string;
size?: "small" | "medium" | "large";
permissions?: string[];
dataSource?: string;
metadata?: Record<string, unknown>;
}
24. Dashboard Extension
Dashboard 不应该写死。
例如:
Dashboard
├── System Health
├── Tasks
├── Agent Activity
│
├── SEO Traffic
├── SEO Issues
│
├── GitHub PRs
└── Cloudflare Traffic
其中:
SEO Traffic
来自 SEO App。
GitHub PRs
来自 GitHub Plugin。
25. Widget Slot
Shell 提供 Extension Point:
dashboard.main
dashboard.sidebar
resource.detail.before
resource.detail.after
resource.list.toolbar
resource.detail.toolbar
agent.sidebar
agent.chat.toolbar
Plugin 可以:
WidgetRegistry.register({
slot: "dashboard.main",
widget: "github.pull_requests"
});
这样 Plugin 不需要修改 Core Dashboard。
26. Context Action
Context Action 是 Plugin 非常重要的 UI 能力。
例如:
用户查看:
Website: example.com
右上角:
More
├── Scan SEO
├── Open in Browser
├── Search Google
├── Create Content
└── Ask Agent
定义:
export interface ContextActionDefinition {
id: string;
label: string;
icon?: string;
resourceTypes?: string[];
actionId: string;
permission?: string;
}
例如:
{
id: "browser.open_website",
resourceTypes: ["seo.website"],
actionId: "browser.open_url"
}
27. Resource Context Action
对于:
seo.website
Plugin 可以注册:
Open Browser
Run SEO Scan
Search Backlinks
Create Article
Ask SEO Agent
所有这些最终必须转换为:
Action
或者:
Agent Goal
28. Settings UI
Settings 必须支持:
Core Settings
App Settings
Plugin Settings
User Settings
Organization Settings
Project Settings
结构:
Settings
├── General
├── Account
├── Organization
├── Security
├── Agents
├── Models
├── Plugins
│ ├── GitHub
│ ├── Cloudflare
│ └── Browser
└── Developer
29. Plugin Settings
Plugin 自己可以定义 Settings Page:
export interface SettingsPageDefinition {
id: string;
pluginId: string;
title: string;
path: string;
component: string;
permissions?: string[];
}
例如:
/settings/plugins/github
页面:
GitHub
Connection
[ Connected ]
Default Organization
[ example ]
Webhook
[ Enabled ]
[ Save ]
保存:
UI
↓
Action
↓
Action Runtime
30. Settings 不应该直接调用 Plugin API
禁止:
fetch("https://api.github.com/...")
在 React Component 中直接执行。
应该:
GitHub Settings UI
↓
github.connection.update
↓
Action Runtime
↓
GitHub Plugin
这样才能统一:
- Permission
- Audit
- Validation
- Retry
- Error
- Secret
- Logging
31. Secret UI
Plugin 可能需要:
API Key
Token
OAuth
Secret
UI 只能操作:
Secret Reference
不要让普通 UI State 长期保存明文 Secret。
例如:
{
credentialId: "cred_xxx"
}
后端负责:
Credential Store
32. Global Search
DevOS 应提供统一搜索。
搜索范围:
Resources
Tasks
Agents
Plugins
Actions
Users
Projects
Documentation
例如:
Search: example.com
结果:
Websites
example.com
Tasks
SEO Scan example.com
Reports
SEO Audit example.com
Agent Runs
SEO Agent / example.com
33. Search Provider
不要让 Search UI 知道具体数据库。
统一:
export interface SearchProvider {
search(
query: SearchQuery
): Promise<SearchResult[]>;
}
Backend 根据:
Resource Registry
Plugin Registry
Search Index
返回结果。
34. Command Palette
DevOS 应提供:
Cmd/Ctrl + K
Command Palette。
例如:
> scan example.com
Actions
Scan Website
Pages
Website
Agents
Ask SEO Agent
Command Palette 可以搜索:
Navigation
Resources
Actions
Commands
Agents
35. Command Registry
export interface CommandDefinition {
id: string;
title: string;
description?: string;
keywords?: string[];
actionId?: string;
route?: string;
permission?: string;
}
Plugin 可以注册 Command。
例如:
GitHub:
Create Repository
Open Pull Requests
36. Breadcrumb
Breadcrumb 不应该硬编码。
由 Route / Resource Context 自动生成。
例如:
SEO
/
Websites
/
example.com
如果进入:
SEO
/
Websites
/
example.com
/
Scan
Action 页面可以显示:
SEO / Websites / example.com / Scan
37. Workspace
DevOS 应支持 Workspace 概念。
Workspace 可以理解为:
用户当前工作的上下文空间。
例如:
Workspace
├── Project
├── Organization
├── Environment
└── Active Resources
Header:
[ Organization ▼ ]
[ Project ▼ ]
切换 Workspace 后:
Navigation
Data
Permissions
Agents
Tasks
都应该根据 Workspace Context 更新。
38. Workspace Context
前端:
interface WorkspaceContext {
organizationId?: string;
projectId?: string;
environmentId?: string;
}
所有 API Query 都应该带:
organizationId
projectId
但是:
前端传入的 Workspace Context 不能作为安全依据。
Backend 必须重新验证:
Actor
+
Organization
+
Project
+
Resource Scope
39. React Query
Server State 统一使用:
TanStack Query
例如:
useQuery({
queryKey: [
"resource",
"seo.website",
websiteId
],
queryFn: ...
});
禁止使用 Zustand 保存大量 Server State。
40. Zustand
Zustand 用于:
UI State
Session UI
Sidebar State
Workspace UI
Command Palette
Modal
Theme
Preferences
不要:
Zustand
↓
保存整个后端数据库
41. Form
通用 Resource Form 可以根据 Schema 自动生成。
例如:
{
fields: {
name: {
type: "string",
required: true
},
domain: {
type: "url",
required: true
}
}
}
生成:
Name
[________________]
Domain
[________________]
[ Save ]
但复杂业务表单允许完全自定义 React Component。
42. Dynamic UI 与 Custom UI
DevOS 不应该追求:
所有页面都自动生成。
正确原则:
简单 CRUD
↓
Schema-driven UI
复杂业务
↓
Custom React UI
例如:
User CRUD
→ Dynamic UI
SEO Website
→ Custom UI + Resource metadata
Agent Workspace
→ Custom UI
DevOps Terminal
→ Custom UI
43. UI Registry
统一 UI Registry:
AppRegistry
ModuleRegistry
PluginRegistry
RouteRegistry
NavigationRegistry
WidgetRegistry
CommandRegistry
ContextActionRegistry
建议:
export interface UIRegistry {
apps: AppRegistry;
modules: ModuleRegistry;
routes: RouteRegistry;
navigation: NavigationRegistry;
widgets: WidgetRegistry;
commands: CommandRegistry;
contextActions: ContextActionRegistry;
}
44. Registry 生命周期
系统启动:
Load Core
↓
Load Apps
↓
Load Modules
↓
Load Plugins
↓
Register Routes
↓
Register Navigation
↓
Register Widgets
↓
Register Commands
↓
Register Context Actions
↓
Render Shell
Plugin 动态启用:
Plugin Enable
↓
Load Manifest
↓
Register UI
↓
Invalidate Registry
↓
Shell Update
Plugin 禁用:
Plugin Disable
↓
Unregister UI
↓
Invalidate Registry
↓
Routes disappear
↓
Navigation disappears
↓
Widgets disappear
45. Lazy Loading
Plugin 页面必须支持 Lazy Loading。
不要:
App Startup
↓
加载所有 Plugin UI
应该:
Shell
↓
Load Manifest
↓
User opens Plugin page
↓
Lazy Load Component
例如:
const GitHubRepositories =
lazy(() =>
import("@devos/plugin-github/ui/repositories")
);
46. Plugin UI Isolation
Plugin UI 必须:
- 使用自己的 namespace
- 不能覆盖 Core Route
- 不能随意修改全局 State
- 不能直接访问数据库
- 不能绕过 Permission
- 不能绕过 Action Runtime
Plugin 可以通过:
Registry
Extension Point
Action
Resource
Event
与 Core 集成。
47. Error Boundary
每个 App/Plugin UI 都必须有 Error Boundary。
例如:
Shell
├── Core Error Boundary
│
├── SEO Error Boundary
│
├── GitHub Plugin Error Boundary
│
└── Browser Plugin Error Boundary
如果 GitHub Plugin 崩溃:
GitHub Plugin failed
不能导致:
整个 DevOS 白屏
48. Permission Guard
前端:
<PermissionGuard
permission="seo.website.scan"
>
<Button>
Scan
</Button>
</PermissionGuard>
作用:
UI visibility
不是:
Security
Backend 必须再次验证。
49. Feature Flag
UI 支持 Feature Flag:
feature("new_agent_ui")
可以控制:
App
Module
Plugin
Widget
Route
例如:
agent.workspace.v2
50. UI Extension API
建议提供:
ui.registerRoute(...)
ui.registerNavigation(...)
ui.registerWidget(...)
ui.registerCommand(...)
ui.registerContextAction(...)
ui.registerSettings(...)
ui.registerSlotExtension(...)
Plugin 开发者不需要修改:
Core UI source
51. 示例:GitHub Plugin
安装:
GitHub Plugin
Plugin Runtime 注册:
Resources:
github.repository
github.issue
github.pull_request
Actions:
github.repository.create
github.repository.clone
github.issue.create
github.pull_request.merge
Skills:
github.code_review
MCP:
github
UI:
Repositories
Issues
Pull Requests
Settings
Statistics
UI 自动出现:
Plugins
└── GitHub
├── Repositories
├── Issues
├── Pull Requests
├── Statistics
└── Settings
同时 Dashboard:
GitHub PR Widget
Command Palette:
Create GitHub Repository
Context Action:
Resource: github.repository
Open
Clone
Create Issue
Ask Agent
52. 示例:Browser Plugin
Browser Plugin:
Resource:
browser.session
Actions:
browser.open
browser.navigate
browser.screenshot
MCP:
browser
Skill:
browser.research
UI:
Browser Sessions
Browser Console
Browser Settings
SEO Website 页面:
example.com
Context Actions:
Open Browser
Screenshot
Run SEO Audit
Ask Agent
其中:
Open Browser
↓
browser.open
↓
Action Runtime
53. 示例:SEO App
SEO App 不应该重新实现:
Layout
Navigation
Task UI
Agent UI
Settings
Notification
Permission
Search
Command Palette
这些全部由 DevOS Core 提供。
SEO App 只提供:
Resources
Actions
Skills
Agents
Pages
Widgets
Reports
例如:
SEO
├── Overview
├── Websites
├── Keywords
├── Content
├── Backlinks
├── Reports
└── Agent
54. App Fork 模式
DevOS 必须支持:
DevOS Core
↓
Starter App
开发者可以:
Fork DevOS Starter
然后:
Remove unused Apps
Remove unused Plugins
Add custom modules
形成:
My Product
而不是:
必须运行完整 DevOS
55. Core / Starter / Full Distribution
建议提供三种发行模式。
Core
DevOS Core
只包含:
Identity
Resource
Action
Task
Plugin
Agent
MCP
UI Shell
Starter
DevOS Starter
包含:
Core
+
基础 Dashboard
+
基础 Settings
+
示例 Plugin
Full
DevOS Full
包含:
Core
+
多个 App
+
常用 Plugins
56. 不允许 Core 与 App 强耦合
错误:
import SEOWebsitePage from
"@devos/seo/pages/Website";
然后 Core Dashboard 写死 SEO。
正确:
SEO App
↓
App Registry
↓
Route Registry
↓
Navigation Registry
↓
UI Shell
Core 不需要知道:
SEO
GitHub
Cloudflare
CRM
具体存在什么 App。
57. App 间集成
App 不应该直接互相 import 内部业务代码。
例如:
SEO App
↓
Browser Plugin
应该:
SEO App
↓
Capability / Action
↓
Browser Action
例如:
browser.open
这样:
Browser Plugin
不存在时:
Capability unavailable
SEO App 仍然可以正常运行。
58. UI → Capability
UI 可以展示 Capability:
Capability:
browser.open
然后:
executeAction({
actionId: "browser.open",
input: {
url: "https://example.com"
}
});
API Client 最终:
POST /api/actions/execute
或者:
POST /api/actions/browser.open
但后端必须统一进入:
Action Runtime
59. API Client
前端建议统一:
devos.api
例如:
devos.api.resources.list(...)
devos.api.resources.get(...)
devos.api.actions.execute(...)
devos.api.tasks.get(...)
devos.api.agents.createGoal(...)
devos.api.search(...)
UI Component 不应该自己拼接 API URL。
60. Notification
所有:
Action
Task
Agent
Plugin
System Event
都可以产生 Notification。
统一:
Notification Center
例如:
✓ SEO Scan completed
⚠ GitHub token expires in 7 days
✕ Deployment failed
Notification 来源可以是:
Event Bus
而不是组件之间互相调用。
61. Event → UI
例如:
seo.website.scan.completed
Event Bus:
Event
↓
Notification
↓
Query Invalidation
↓
Widget Refresh
例如:
Website Scan
完成
↓
Website Detail 自动刷新
↓
Dashboard SEO Issues 自动刷新
62. Query Invalidation
Action 成功后:
queryClient.invalidateQueries({
queryKey: ["resource", "seo.website"]
});
但最好由 Action/Event Metadata 提供:
Action
↓
Events
↓
UI Query Invalidation
避免 UI 到处硬编码业务依赖。
63. Audit UI
用户应该能够看到:
Activity
例如:
10:21 User started SEO Scan
10:21 Agent created Task
10:22 Website Scan running
10:23 Website Scan completed
10:23 Agent generated report
来自:
Audit
+
Execution
+
Event
+
Agent Trace
64. Agent Trace UI
Agent Trace:
Goal
↓
Plan
↓
Capability Discovery
↓
Action
↓
Task
↓
Execution
↓
Observation
↓
Evaluation
↓
Report
UI:
SEO Agent
Goal:
检查 example.com SEO
✓ Discover capabilities
✓ Scan website
✓ Analyze issues
✓ Generate report
Result:
12 issues found
[View Report]
不要展示模型隐藏 Chain-of-Thought。
只展示:
Decision Summary
Action
Input Summary
Result Summary
Reason / Status
65. Mobile / Responsive
Shell 必须支持:
Desktop
Tablet
Mobile
但核心 Developer Work OS 优先:
Desktop
Mobile 主要支持:
Monitoring
Notifications
Task Status
Agent Chat
Approval
复杂:
Terminal
Table
Workflow
优先 Desktop。
66. Theme
Core UI 支持:
Light
Dark
System
Plugin UI 必须使用 DevOS Design Tokens。
禁止 Plugin 自己创建完全独立的:
Color System
Typography System
Spacing System
否则整个 DevOS 会出现视觉碎片化。
67. Design Tokens
统一:
colors
spacing
radius
typography
shadow
breakpoints
z-index
例如:
devos.theme
Plugin 只能:
使用 Token
而不是覆盖整个 Theme。
68. Developer API
最终开发者应该可以这样开发:
export default definePlugin({
id: "github",
ui: {
routes: [
{
path: "/plugins/github/repositories",
component: "repositories"
}
],
navigation: [
{
title: "Repositories",
path: "/plugins/github/repositories"
}
],
widgets: [
{
slot: "dashboard.main",
component: "pull_requests"
}
]
}
});
然后 Plugin 安装:
Install Plugin
↓
Registry
↓
UI automatically available
69. Plugin Page API
Plugin Page:
definePluginPage({
id: "github.repositories",
route: "/plugins/github/repositories",
permission: "github.repository.read",
component: GithubRepositoriesPage
});
70. Widget API
defineWidget({
id: "github.pull_requests",
slot: "dashboard.main",
title: "Pull Requests",
permission: "github.pull_request.read",
component: PullRequestWidget
});
71. Context Action API
defineContextAction({
id: "github.create_issue",
resourceTypes: [
"github.repository"
],
actionId: "github.issue.create"
});
72. UI 与 Backend Contract
前端和 Backend 不应该通过:
任意 JSON
随意通信。
必须定义:
Resource Schema
Action Input Schema
Action Output Schema
Task Schema
Execution Schema
Event Schema
Capability Schema
推荐:
Zod
+
OpenAPI
前端可以生成:
TypeScript Types
API Client
Form Schema
73. UI Error Model
统一 Error:
interface DevOSError {
code: string;
message: string;
details?: unknown;
retryable?: boolean;
actionId?: string;
executionId?: string;
}
UI 根据:
code
决定:
Toast
Modal
Inline Error
Retry Button
Login
Permission
74. Loading State
禁止每个页面自己发明:
Loading...
Please wait...
Processing...
统一组件:
Loading
Skeleton
Progress
ActionProgress
TaskProgress
ExecutionStatus
75. Empty State
Resource:
No websites yet.
[Create Website]
Plugin:
GitHub is not connected.
[Connect GitHub]
Agent:
No goals yet.
[Create Goal]
Empty State 可以由 Resource/Plugin Metadata 提供。
76. Confirmation
危险 Action:
Delete
Deploy
Merge
Rotate Credentials
Drop Database
必须由 Action Metadata 指定:
requiresApproval: true
UI 显示:
Confirm
但真正的安全控制仍然在 Backend。
77. Approval UI
统一:
/approvals
例如:
SEO Agent wants to:
Publish 20 articles
Risk:
Medium
[Approve]
[Reject]
Approval:
Agent
↓
Action
↓
Approval Required
↓
Human
↓
Action Runtime
78. Command + Agent
Command Palette 可以直接进入 Agent:
> optimize example.com
系统可以识别:
This is a Goal
然后:
Command
↓
Agent Goal
因此 Command Palette 不是简单:
route search
它也是 DevOS 的 Agent Entry Point。
79. UI Architecture
推荐最终目录:
apps/
└── web/
packages/
├── ui/
├── shell/
├── registry/
├── navigation/
├── routing/
├── resource-ui/
├── action-ui/
├── task-ui/
├── agent-ui/
├── plugin-ui/
├── widget-ui/
├── command/
├── search/
├── workspace/
├── permissions/
├── api-client/
└── theme/
80. Shell Package
packages/shell/
├── AppShell
├── Header
├── Sidebar
├── Workspace
├── Breadcrumb
├── CommandPalette
├── GlobalSearch
├── NotificationCenter
└── UserMenu
81. Registry Package
packages/registry/
├── app-registry.ts
├── module-registry.ts
├── route-registry.ts
├── navigation-registry.ts
├── widget-registry.ts
├── command-registry.ts
└── context-action-registry.ts
82. Resource UI Package
packages/resource-ui/
├── ResourceList
├── ResourceDetail
├── ResourceForm
├── ResourceCreate
├── ResourceEdit
├── ResourceActions
└── ResourceActivity
83. Agent UI Package
packages/agent-ui/
├── AgentList
├── AgentDetail
├── AgentChat
├── AgentGoal
├── AgentRun
├── AgentTrace
└── AgentApproval
84. Plugin UI Package
packages/plugin-ui/
├── PluginPage
├── PluginSettings
├── PluginWidget
├── PluginNavigation
├── PluginContextAction
└── PluginErrorBoundary
85. 不允许的架构
以下全部禁止:
❌ Plugin 修改 Sidebar.tsx
❌ Plugin 修改 Core Router
❌ UI 直接访问 Database
❌ UI 直接调用第三方 API
❌ UI 自己实现业务 Action
❌ Agent UI 直接调用 Plugin API
❌ Plugin 绕过 Permission
❌ Frontend Permission 代替 Backend Permission
❌ 每个 App 自己实现 Layout
❌ 每个 Plugin 自己实现 Settings Framework
❌ 每个 Plugin 自己实现 Notification
❌ 每个 Plugin 自己实现 Task UI
86. 推荐架构
最终:
DevOS UI Shell
│
┌────────────────┼────────────────┐
│ │ │
Core UI App UI Plugin UI
│ │ │
└────────────────┼────────────────┘
│
UI Registry
│
┌──────────┬───────────┼──────────┬───────────┐
│ │ │ │ │
Routes Navigation Widgets Commands Context
│ │ │ │ │
└──────────┴───────────┼──────────┴───────────┘
│
API / Runtime
│
┌────────────────┼────────────────┐
│ │ │
Resource Action Agent
│ │ │
└────────────────┼────────────────┘
│
DevOS Backend
87. 最重要的设计结论
DevOS UI 不是:
一个 Admin Dashboard
而是:
一个可扩展的 UI Runtime
核心能力:
Shell
+
Registry
+
Route
+
Navigation
+
Resource UI
+
Action UI
+
Task UI
+
Agent UI
+
Plugin UI
+
Widget
+
Command
+
Context Action
最终实现:
安装 Plugin
↓
Plugin 注册 Resource
↓
Plugin 注册 Action
↓
Plugin 注册 Skill
↓
Plugin 注册 MCP
↓
Plugin 注册 Route
↓
Plugin 注册 Navigation
↓
Plugin 注册 Widget
↓
Plugin 注册 Settings
↓
Plugin 注册 Context Actions
↓
DevOS UI 自动获得完整功能
Core 不需要修改。
88. Zcode 必须实现的 Acceptance Criteria
AC-01
可以动态注册 App:
AppRegistry.register()
并自动出现 Navigation。
AC-02
可以动态注册 Plugin。
Plugin 安装后自动出现:
Route
Navigation
Settings
Widget
AC-03
Plugin 禁用后:
Navigation 消失
Route 不可访问
Widget 不再显示
且不能导致 Shell 崩溃。
AC-04
实现:
Resource List
Resource Detail
Resource Create
Resource Edit
并能读取 Resource Metadata。
AC-05
Resource Action 必须通过:
Action Runtime
执行。
AC-06
实现:
Task Detail
Execution Detail
Progress
Logs
Output
AC-07
实现:
Command Palette
至少支持:
Navigation
Action
Resource
Agent
AC-08
实现:
Global Search
支持:
Resource
Task
Agent
Plugin
Action
AC-09
实现:
Widget Slot
至少支持:
dashboard.main
dashboard.sidebar
resource.detail.toolbar
resource.list.toolbar
AC-10
实现:
Context Action
例如:
seo.website
↓
Open Browser
Scan SEO
Ask Agent
AC-11
实现:
Plugin Settings
Plugin 可以拥有自己的:
/settings/plugins/{pluginId}
AC-12
实现:
PermissionGuard
并确保:
Frontend Permission 仅用于 UI,Backend Authorization 才是最终安全边界。
AC-13
实现:
Agent Chat
Agent Goal
Agent Run
Agent Trace
Agent Approval
并与 DevOS Agent Runtime 对接。
AC-14
实现:
Workspace Context
支持:
Organization
Project
Environment
AC-15
实现 Plugin Error Boundary。
单个 Plugin 崩溃不能导致整个 DevOS Shell 崩溃。
AC-16
实现 Lazy Loading。
Plugin UI 不应该在 DevOS 首屏全部加载。
AC-17
实现完整 UI Registry:
AppRegistry
ModuleRegistry
RouteRegistry
NavigationRegistry
WidgetRegistry
CommandRegistry
ContextActionRegistry
AC-18
至少完成以下 Demo:
Demo A
安装:
GitHub Plugin
自动出现:
GitHub
├── Repositories
├── Issues
└── Settings
Demo B
GitHub Plugin 注册:
dashboard.main
Widget。
Dashboard 自动显示。
Demo C
SEO Website:
example.com
右上角自动出现:
Open Browser
Scan SEO
Ask Agent
Demo D
Command Palette:
Cmd/Ctrl + K
输入:
scan example.com
可以发现:
SEO Scan
并执行:
seo.website.scan
Demo E
Agent:
检查 example.com 的 SEO
UI 显示:
Goal
↓
Plan
↓
Action
↓
Task
↓
Execution
↓
Report
89. Zcode 开发优先级
严格按照:
P0
├── UI Shell
├── Registry
├── Route
├── Navigation
├── Permission
├── API Client
└── Action UI
P1
├── Resource UI
├── Task UI
├── Plugin UI
├── Widget
├── Settings
└── Context Action
P2
├── Agent UI
├── Command Palette
├── Global Search
├── Workspace
└── Approval UI
P3
├── Advanced Dashboard
├── UI Marketplace
├── Dynamic UI Schema
└── Advanced Extension System
90. 最终 Golden Rule
DevOS 前端必须遵守:
Shell 不知道业务
App 不拥有 Shell
Plugin 不修改 Core
Module 不绕过 App
UI 不实现业务逻辑
UI 不直接访问 DB
UI 不绕过 Action Runtime
Agent UI 不绕过 Agent Runtime
Frontend Permission 不等于 Security
真正的扩展模型:
DevOS Core
│
UI Runtime
│
┌─────────────┼─────────────┐
│ │ │
App Plugin Agent
│ │ │
└─────────────┼─────────────┘
│
Registry
│
┌─────────────┼─────────────┐
│ │ │
Route Navigation Widget
│ │ │
└─────────────┼─────────────┘
│
Action Runtime
│
DevOS Backend
最终目标:
开发者只需要开发 Resource / Action / Skill / Plugin / App,而不需要重复开发 Admin、Layout、Navigation、Task、Agent、Settings、Permission、Search、Notification 等基础设施。
这才是 DevOS UI Shell 的核心价值。