- 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)
42 KiB
DevOS Plugin Runtime
Version: 1.0 Status: Implementation Specification Target: Zcode Previous: 10_EVENT_AUDIT_OBSERVABILITY_RUNTIME.md Next: 12_*
1. 目标
DevOS Plugin Runtime 是整个 DevOS 的扩展系统。
Plugin 必须能够扩展:
- Resource
- Action
- Capability
- Skill
- MCP
- Workflow
- Event
- UI
- Navigation
- Settings
- Dashboard
- Widget
- Notification
- Scheduler
- Worker Capability
Plugin 不是简单的 npm package。
Plugin 是:
可以被 DevOS 安装、配置、启停、升级、卸载,并向 DevOS Runtime 注册能力和 UI 的扩展单元。
2. 核心原则
Plugin 必须运行在 DevOS Runtime 之上。
正确:
Plugin ↓ Plugin Runtime ↓ DevOS Registry ↓ DevOS Runtime
禁止:
Plugin ↓ 自己的数据库 ↓ 自己的 Queue ↓ 自己的 Auth ↓ 自己的 EventBus ↓ 自己的 Task System
除非明确声明为 external service,并通过标准 Adapter 接入。
3. Plugin 的本质
Plugin 是:
Extension Package
+
Manifest
+
Runtime
+
Capabilities
+
UI
+
Configuration
例如 SEO Plugin:
seo.plugin
├── Resource
│ ├── seo.website
│ ├── seo.keyword
│ └── seo.article
│
├── Action
│ ├── seo.website.scan
│ ├── seo.keyword.research
│ └── seo.article.generate
│
├── Skill
│ ├── seo-audit
│ └── content-generation
│
├── MCP
│ ├── search-engine
│ └── browser
│
├── Workflow
│ └── seo-audit-workflow
│
├── Event
│ ├── seo.website.scanned
│ └── seo.article.generated
│
└── UI
├── Website
├── Keywords
├── Articles
└── Settings
4. Plugin Namespace
每个 Plugin 必须拥有唯一 namespace。
格式:
<vendor>.<plugin>
例如:
devos.seo
devos.devops
devos.crm
github.integration
cloudflare.integration
Plugin 内部 Resource:
devos.seo.website
devos.seo.keyword
Action:
devos.seo.website.scan
Skill:
devos.seo.audit
禁止两个 Plugin 注册同一个 namespace。
5. Plugin ID
Plugin ID:
type PluginId = string
例如:
devos.seo
必须满足:
^[a-z0-9][a-z0-9._-]*$
6. Plugin Manifest
每个 Plugin 必须提供:
plugin.json
推荐:
{
"id": "devos.seo",
"name": "SEO",
"version": "1.0.0",
"description": "SEO automation capabilities",
"runtime": "devos",
"apiVersion": "1",
"author": "DevOS",
"license": "MIT"
}
7. 完整 Manifest
interface PluginManifest {
id: string
name: string
version: string
description?: string
apiVersion: string
runtime: 'devos'
author?: string
homepage?: string
repository?: string
license?: string
icon?: string
categories?: string[]
dependencies?: PluginDependency[]
optionalDependencies?: PluginDependency[]
permissions?: PluginPermission[]
capabilities?: PluginCapabilityDeclaration[]
resources?: PluginResourceDeclaration[]
actions?: PluginActionDeclaration[]
skills?: PluginSkillDeclaration[]
mcp?: PluginMCPDeclaration[]
workflows?: PluginWorkflowDeclaration[]
events?: PluginEventDeclaration[]
ui?: PluginUIDeclaration[]
settings?: PluginSettingDeclaration[]
workers?: PluginWorkerDeclaration[]
}
8. Plugin 生命周期
Plugin 状态:
discovered
↓
installing
↓
installed
↓
configuring
↓
enabled
↓
running
↓
disabled
↓
uninstalling
↓
uninstalled
异常:
install_failed
activation_failed
runtime_error
upgrade_failed
9. Plugin Runtime 状态
type PluginStatus =
| 'discovered'
| 'installing'
| 'installed'
| 'configuring'
| 'enabled'
| 'running'
| 'disabled'
| 'uninstalling'
| 'uninstalled'
| 'install_failed'
| 'activation_failed'
| 'runtime_error'
| 'upgrade_failed'
10. Plugin Resource
Plugin 本身必须成为 DevOS Resource:
core.plugin
Plugin Resource:
core.plugin.installation
11. Plugin Actions
至少:
core.plugin.install
core.plugin.uninstall
core.plugin.enable
core.plugin.disable
core.plugin.restart
core.plugin.upgrade
core.plugin.configure
core.plugin.health
core.plugin.reload
12. 所有 Plugin 管理操作必须走 Action Runtime
错误:
POST /plugins/:id/enable
controller:
plugin.enable()
正确:
HTTP
↓
core.plugin.enable
↓
Action Runtime
↓
Plugin Runtime
CLI:
devos plugin enable devos.seo
也必须:
CLI
↓
Action Runtime
↓
core.plugin.enable
Agent:
Agent
↓
core.plugin.enable
↓
Action Runtime
三者执行路径必须完全一致。
13. Plugin Installation Record
数据库:
interface PluginInstallation {
id: string
pluginId: string
version: string
status: PluginStatus
source: PluginSource
enabled: boolean
installedAt: Date
updatedAt: Date
activatedAt?: Date
disabledAt?: Date
error?: string
metadata?: Record<string, unknown>
}
14. Plugin Source
支持:
type PluginSource =
| {
type: 'builtin'
}
| {
type: 'local'
path: string
}
| {
type: 'package'
package: string
version?: string
}
| {
type: 'git'
repository: string
ref?: string
}
| {
type: 'url'
url: string
}
第一阶段至少实现:
builtin
local
package
Git / URL 可以作为后续扩展。
15. Built-in Plugin
DevOS 自己的功能也可以 Plugin 化。
例如:
devos.core
devos.seo
devos.devops
但 Core Runtime 本身不能依赖 Plugin Runtime 才能启动。
即:
Core Runtime
↓
Plugin Runtime
↓
Optional Plugins
而不是:
Plugin Runtime
↓
Core Runtime
16. Plugin Registration
Plugin 激活后:
Plugin
↓
Manifest
↓
Validate
↓
Register
├── Resources
├── Actions
├── Capabilities
├── Skills
├── MCP
├── Events
├── Workflows
└── UI
17. Plugin Registry
实现:
interface PluginRegistry {
register(plugin: RegisteredPlugin): Promise<void>
unregister(pluginId: string): Promise<void>
get(pluginId: string): RegisteredPlugin | undefined
list(): RegisteredPlugin[]
has(pluginId: string): boolean
}
18. Registered Plugin
interface RegisteredPlugin {
manifest: PluginManifest
status: PluginStatus
runtime: PluginRuntime
registeredAt: Date
}
19. Plugin Runtime
interface PluginRuntime {
initialize(context: PluginContext): Promise<void>
activate(context: PluginContext): Promise<void>
deactivate(context: PluginContext): Promise<void>
dispose(context: PluginContext): Promise<void>
health(): Promise<PluginHealth>
}
20. Plugin Context
interface PluginContext {
pluginId: string
version: string
logger: Logger
eventBus: EventBus
resourceRegistry: ResourceRegistry
actionRegistry: ActionRegistry
capabilityRegistry: CapabilityRegistry
skillRegistry: SkillRegistry
mcpRegistry: MCPRegistry
config: PluginConfigService
storage: PluginStorage
signal: AbortSignal
}
Plugin 不应该直接拿:
PrismaClient
RedisClient
BullMQ
Plugin 应该使用 DevOS 提供的抽象。
21. Plugin Storage
某些 Plugin 需要自己的持久化数据。
提供:
interface PluginStorage {
get<T>(key: string): Promise<T | undefined>
set<T>(key: string, value: T): Promise<void>
delete(key: string): Promise<void>
}
但这是:
Plugin Storage
不是:
Plugin 自己拥有一套数据库系统。
22. Plugin Database
如果 Plugin 需要复杂业务数据:
必须通过 DevOS Database / ORM / Migration Runtime。
例如:
packages/plugins/seo
migrations/
schema/
数据库表必须带 Plugin Namespace。
例如:
seo_websites
seo_keywords
seo_articles
禁止 Plugin 私自建立第二个 PostgreSQL 实例。
23. Plugin Configuration
Plugin 可以声明 Settings。
例如:
{
"settings": [
{
"key": "defaultModel",
"type": "string",
"required": true
},
{
"key": "apiEndpoint",
"type": "url"
}
]
}
24. Plugin Setting Schema
interface PluginSettingDeclaration {
key: string
type:
| 'string'
| 'number'
| 'boolean'
| 'secret'
| 'url'
| 'select'
| 'multiselect'
| 'json'
label: string
description?: string
required?: boolean
default?: unknown
options?: {
label: string
value: string
}[]
}
25. Plugin Settings Resource
Plugin 配置应该属于:
core.plugin.settings
而不是:
plugin_database_table
API:
GET
/api/plugins/:pluginId/settings
PUT
/api/plugins/:pluginId/settings
但是最终执行:
core.plugin.configure
26. Secret Settings
例如:
OpenAI API Key
Cloudflare API Token
GitHub Token
SMTP Password
必须使用:
type = secret
数据库不得明文保存。
推荐:
Encryption at Rest
读取时默认:
********
只有真正执行需要时才能在 Runtime 内解密。
27. Plugin Settings 权限
必须区分:
plugin.view
plugin.configure
plugin.install
plugin.uninstall
plugin.enable
plugin.disable
普通用户:
plugin.view
管理员:
plugin.configure
系统管理员:
plugin.install
plugin.uninstall
具体策略由 RBAC / Policy Runtime 控制。
28. Plugin UI
Plugin 可以提供自己的页面。
例如:
SEO
├── Overview
├── Websites
├── Keywords
├── Articles
├── Tasks
└── Settings
Plugin UI 不是独立 SPA。
必须挂载到:
DevOS UI Shell
29. Plugin UI Manifest
interface PluginUIDeclaration {
routes?: PluginRoute[]
navigation?: PluginNavigationItem[]
dashboards?: PluginDashboard[]
widgets?: PluginWidget[]
settingsPage?: boolean
}
30. Plugin Route
interface PluginRoute {
id: string
path: string
title: string
component: string
icon?: string
permissions?: string[]
}
例如:
{
"id": "seo-websites",
"path": "/seo/websites",
"title": "Websites",
"component": "SeoWebsitesPage",
"permissions": [
"devos.seo.website.read"
]
}
31. Plugin Navigation
Plugin 可以向左侧导航注册:
SEO
Overview
Websites
Keywords
Articles
Tasks
但不能直接修改 DevOS Shell。
必须:
Plugin
↓
Navigation Registry
↓
UI Shell
32. Navigation Registry
interface NavigationRegistry {
register(item: NavigationItem): void
unregister(pluginId: string): void
list(context: NavigationContext): NavigationItem[]
}
必须根据:
permission
organization
project
plugin enabled
动态过滤。
33. Plugin Dashboard
Plugin 可以提供 Dashboard:
SEO Overview
Websites: 127
Keywords: 3,821
Articles: 1,240
Tasks Running: 17
Errors: 3
Dashboard 只负责:
展示
查询
触发 Action
不能在 UI 内实现业务逻辑。
34. Plugin Widget
Plugin 可以注册:
Dashboard Widget
Chat Widget
Task Widget
Resource Widget
Report Widget
例如:
SEO Health Score
Widget 可以声明:
interface PluginWidget {
id: string
title: string
component: string
size: 'small' | 'medium' | 'large'
permissions?: string[]
}
35. Plugin Page 与 Action Runtime
页面:
按钮:Scan Website
不能:
fetch('/seo/scan')
应该:
UI
↓
Action Client
↓
devos.seo.website.scan
↓
Action Runtime
36. Plugin Resource UI
如果 Plugin 注册:
seo.website
可以自动获得:
List
Detail
Create
Edit
Delete
如果 Resource 声明:
ui.list
ui.detail
DevOS Generic UI 可以自动生成。
Plugin 只需要实现复杂页面。
37. Plugin Actions
Plugin Action:
interface PluginActionDeclaration {
id: string
name: string
description?: string
inputSchema: unknown
outputSchema: unknown
mode: 'sync' | 'async' | 'stream'
permissions: string[]
requiresApproval?: boolean
}
Action 最终进入:
Action Registry
38. Plugin Capability
Plugin Action 自动成为 Capability。
例如:
devos.seo.website.scan
注册:
Capability
type = action
source = plugin
Agent 就能够发现。
39. Plugin Skill
Plugin 可以注册 Skill:
interface PluginSkillDeclaration {
id: string
name: string
description: string
version: string
instructions: string
requiredCapabilities: string[]
inputSchema?: unknown
outputSchema?: unknown
}
40. Plugin 与 Agent
例如:
SEO Plugin
↓
Skill:
seo.audit
↓
Capabilities:
seo.website.scan
seo.keyword.research
seo.article.generate
↓
Agent
Agent 不需要知道:
这个能力来自哪个数据库
哪个 Controller
哪个 Plugin 文件
只看到:
Capability
41. Plugin MCP
Plugin 可以声明 MCP:
interface PluginMCPDeclaration {
id: string
name: string
transport:
| 'stdio'
| 'http'
| 'sse'
endpoint?: string
command?: string
args?: string[]
}
但是:
MCP 仍然必须通过 MCP Runtime + Action Runtime。
42. Plugin Event
Plugin 可以声明 Event:
devos.seo.website.scanned
devos.seo.article.generated
Event 进入:
Event Registry
并可以被:
Agent
Workflow
Notification
Webhook
Plugin
消费。
43. Plugin Event Handler
Plugin Handler:
Event
↓
Plugin Handler
↓
Action Runtime
禁止:
Event
↓
Plugin Handler
↓
直接 DB mutation
44. Plugin Workflow
Plugin 可以提供 Workflow:
seo.full.audit
例如:
scan website
↓
collect keywords
↓
analyze pages
↓
generate report
Workflow 由:
Action
Task
Job
组成。
45. Plugin Scheduler
Plugin 可以注册 Schedule Definition。
例如:
SEO daily scan
Every day at 03:00
最终还是:
Scheduler
↓
Task
↓
Action
Plugin 不得自己运行:
setInterval()
或:
node-cron
来承担业务调度。
46. Plugin Worker
某些 Plugin 可能需要特殊 Worker。
例如:
browser
ffmpeg
docker
ssh
Plugin 可以声明 Worker Capability:
interface PluginWorkerDeclaration {
id: string
queues: string[]
capabilities: string[]
concurrency?: number
}
最终由:
Worker Runtime
管理。
47. Plugin Dependencies
例如:
{
"dependencies": [
{
"id": "devos.browser",
"version": "^1.0.0"
}
]
}
安装时:
Plugin A
↓
Dependency Resolver
↓
Plugin B
↓
Install
48. Dependency Version
必须支持:
exact
range
例如:
1.2.3
^1.2.0
>=1.0.0 <2.0.0
49. Dependency Graph
Plugin Runtime 必须检测:
A → B
B → C
C → A
发现:
circular dependency
直接拒绝安装。
50. Plugin API Version
Plugin 必须声明:
apiVersion
例如:
apiVersion = 1
DevOS Runtime 升级:
API v1
API v2
可以兼容旧 Plugin。
51. Plugin Compatibility
安装之前必须执行:
Manifest
↓
API Compatibility
↓
Dependency Compatibility
↓
Permission Validation
↓
Resource Conflict Check
↓
Action Conflict Check
↓
Install
52. Resource Conflict
例如:
Plugin A:
seo.website
Plugin B:
seo.website
必须拒绝:
RESOURCE_NAMESPACE_CONFLICT
除非明确声明:
override
第一阶段:
禁止 Override。
53. Action Conflict
同样:
seo.website.scan
只能由一个 Plugin 注册。
54. Capability Conflict
Capability ID 也必须唯一。
55. Plugin Enable
Enable:
core.plugin.enable
↓
Load Plugin
↓
Validate
↓
Register
↓
Activate
↓
Health Check
↓
enabled
如果失败:
activation_failed
不得标记为 enabled。
56. Plugin Disable
Disable:
core.plugin.disable
↓
Stop accepting new work
↓
Drain active work
↓
Deactivate
↓
Unregister runtime capabilities
↓
disabled
已经运行中的 Task:
默认继续完成
除非 Plugin 声明:
shutdownPolicy = cancel
57. Plugin Uninstall
不能直接删除。
必须:
Disable
↓
Check Running Tasks
↓
Check Dependencies
↓
Check Data Policy
↓
Unregister
↓
Remove
58. Plugin Data Policy
Manifest 可以声明:
dataPolicy: {
preserveOnDisable: boolean
preserveOnUninstall: boolean
destructiveUninstall: boolean
}
默认:
preserveOnUninstall = true
即:
卸载 Plugin 默认不删除业务数据。
59. Plugin Upgrade
升级流程:
Current Plugin
↓
Read New Manifest
↓
Compatibility Check
↓
Dependency Check
↓
Migration Plan
↓
Backup / Safety Check
↓
Disable
↓
Migration
↓
Install New Version
↓
Register
↓
Activate
↓
Health Check
60. Migration
Plugin Migration:
interface PluginMigration {
from: string
to: string
up(): Promise<void>
down?(): Promise<void>
}
Migration 必须支持:
version history
61. Upgrade Failure
升级失败必须:
upgrade_failed
并尽可能:
Rollback
但不要假设所有 Migration 都可以自动 Rollback。
因此:
backup
+
forward migration
+
recovery procedure
必须存在。
62. Plugin Isolation
Plugin 必须受到:
Permission
Namespace
Resource Scope
Action Scope
限制。
Plugin 不应该默认拥有:
root filesystem
all environment variables
all secrets
all database tables
63. Plugin Permission Declaration
Manifest:
{
"permissions": [
"network:http",
"storage:plugin",
"secret:seo-api",
"resource:seo.website"
]
}
Permission 必须经过用户/管理员批准。
64. Permission 分类
至少:
resource
action
network
storage
secret
filesystem
process
worker
mcp
65. Network Permission
Plugin 不应该默认访问任意互联网地址。
推荐:
network:http
network:https
未来可以限制:
network:domain:api.example.com
66. Secret Permission
Plugin 请求:
secret:openai
只能访问:
OpenAI Credential
不能读取:
Cloudflare Credential
GitHub Credential
67. Plugin Credential
统一使用:
Credential Runtime
例如:
core.credential
Plugin:
Credential Request
↓
Permission
↓
Credential Runtime
↓
Secret
Plugin 不应该直接读取 .env。
68. Plugin Environment
Plugin 可以获得:
interface PluginEnvironment {
devosVersion: string
pluginId: string
pluginVersion: string
environment: 'development' | 'test' | 'production'
}
禁止直接依赖大量 DevOS 内部环境变量。
69. Plugin Logging
Plugin 必须使用:
context.logger
例如:
context.logger.info(
'SEO scan started',
{
websiteId
}
)
日志自动获得:
pluginId
correlationId
executionId
taskId
70. Plugin Events
Plugin 必须使用:
context.eventBus.publish(...)
Event 自动补充:
pluginId
71. Plugin Health
interface PluginHealth {
status:
| 'healthy'
| 'degraded'
| 'unhealthy'
message?: string
checks?: HealthCheck[]
}
例如:
SEO Plugin
├── Database healthy
├── Search API healthy
├── Browser MCP degraded
└── AI Provider healthy
72. Plugin Health Event
自动产生:
plugin.health.changed
plugin.health.failed
plugin.health.recovered
73. Plugin Observability
Plugin 的:
Action
Task
Job
Execution
Event
Log
Audit
Trace
Metric
全部自动带:
pluginId
这样可以统计:
Plugin usage
Plugin errors
Plugin latency
Plugin cost
Plugin health
74. Plugin Metrics
自动生成:
devos_plugin_action_total
devos_plugin_error_total
devos_plugin_execution_duration_ms
devos_plugin_task_total
devos_plugin_mcp_request_total
devos_plugin_cost_total
75. Plugin Audit
例如:
plugin.installed
plugin.enabled
plugin.disabled
plugin.upgraded
plugin.uninstalled
plugin.configured
都必须产生 Audit。
例如:
Admin Alice
↓
core.plugin.enable
↓
devos.seo
↓
SUCCESS
76. Plugin UI Permission
Plugin 页面不能因为已经加载就绕过权限。
例如:
SEO Settings
必须:
plugin.view
+
plugin.configure
77. Plugin Dynamic UI
前端需要:
Plugin Manifest
↓
UI Registry
↓
Route Registry
↓
Navigation Registry
↓
Dynamic Module
78. Frontend Plugin Package
推荐:
packages/plugins/seo/
├── manifest.ts
├── backend/
│ ├── index.ts
│ ├── resources/
│ ├── actions/
│ ├── skills/
│ ├── mcp/
│ └── migrations/
│
└── frontend/
├── index.ts
├── routes/
├── pages/
├── widgets/
└── components/
79. Plugin Frontend Contract
Plugin Frontend 不应该:
import backend database
import Prisma
import Redis
只能使用:
Action Client
Resource API
Query Client
UI SDK
80. Plugin UI SDK
DevOS 应提供:
interface DevOSPluginUI {
registerRoute(...)
registerNavigation(...)
registerWidget(...)
registerDashboard(...)
registerSettings(...)
}
81. Plugin Action Client
前端:
await devos.actions.execute(
'devos.seo.website.scan',
{
websiteId
}
)
而不是:
fetch('/api/seo/scan')
82. Plugin Resource Client
const websites =
await devos.resources.list(
'devos.seo.website'
)
83. Plugin Task UI
异步 Action 返回:
{
taskId: 'task_123'
}
前端自动进入:
Task Detail
可以显示:
Progress
Jobs
Logs
Events
Execution
Result
84. Plugin Chat Integration
Plugin 可以向 Agent Chat 注册:
context action
例如用户打开:
Website: example.com
Chat:
Ask Agent about this website
Agent 自动获得:
resource = devos.seo.website
resourceId = website_123
85. Plugin Context Provider
interface PluginContextProvider {
getContext(
resource: ResourceReference
): Promise<AgentContextData>
}
这样 Agent 可以理解:
当前页面
当前 Resource
当前 Project
当前 Task
86. Plugin Report
Plugin 可以注册 Report:
SEO Audit Report
Server Deployment Report
CRM Customer Report
Report 应该:
Task
↓
Action
↓
Artifact
↓
Report
87. Plugin Artifact
Plugin 可以生成:
PDF
CSV
JSON
HTML
Markdown
Image
Archive
统一进入:
core.artifact
而不是 Plugin 自己管理下载系统。
88. Plugin API
Plugin 可以提供 API,但 API 只是入口。
例如:
POST /api/plugins/seo/scan
内部:
HTTP
↓
Action Resolver
↓
devos.seo.website.scan
↓
Action Runtime
不能:
Controller
↓
Plugin Handler
↓
DB
89. Plugin Webhook
Plugin 可以声明:
incoming webhook
例如:
POST /api/plugins/github/webhook
流程:
Webhook
↓
Verify
↓
Normalize
↓
Event
↓
Task / Action
90. Plugin Export / Import
Plugin 配置可以导出:
{
"pluginId": "devos.seo",
"version": "1.2.0",
"settings": {
"defaultModel": "..."
}
}
Secret 不得导出明文。
91. Plugin Backup
升级 / 卸载前可以:
Plugin Data
Plugin Settings
Plugin Metadata
生成:
core.artifact
作为恢复点。
92. Plugin Marketplace
未来可以实现:
Plugin Marketplace
但 Marketplace 不是 Runtime。
Runtime 只负责:
Discover
Install
Verify
Load
Activate
Disable
Upgrade
Uninstall
Marketplace 负责:
Search
Rating
Description
Version
Download
93. Plugin Signature
未来 Plugin 可以支持:
package signature
安装流程:
Download
↓
Verify Signature
↓
Verify Checksum
↓
Compatibility
↓
Install
第一阶段可以先实现:
checksum
94. Plugin Trust Level
定义:
type PluginTrust =
| 'builtin'
| 'trusted'
| 'verified'
| 'community'
| 'untrusted'
不同 Trust Level 可以有不同权限。
95. Plugin Sandbox
第一阶段:
Process-level isolation
高级版本:
Container
Worker
Sandbox
但不应该一开始为了“安全”把所有 Plugin 都设计成复杂微服务。
优先保证:
Permission
Credential Isolation
Namespace Isolation
Runtime Isolation
96. Plugin Crash Isolation
Plugin 激活失败:
devos.seo
↓
activation_failed
不能导致:
DevOS Core
整体无法启动。
启动策略:
Core starts
↓
Load Plugins
↓
Plugin A success
Plugin B failed
Plugin C success
↓
DevOS remains available
97. Plugin Startup
启动:
DevOS Boot
↓
Core Runtime
↓
Database
↓
Redis
↓
Event Runtime
↓
Task Runtime
↓
Action Runtime
↓
Plugin Runtime
↓
Load Plugins
↓
Health Checks
↓
Ready
98. Plugin Shutdown
关闭:
Stop accepting new requests
↓
Scheduler pause
↓
Plugin workers drain
↓
Plugin tasks finish
↓
Deactivate plugins
↓
Close Event subscriptions
↓
Close connections
↓
Shutdown Core
99. Plugin Dependency Startup
如果:
A → B
启动顺序:
B
↓
A
关闭:
A
↓
B
Dependency Resolver 必须负责排序。
100. Plugin Registry 与其他 Registry
最终:
Plugin Registry
│
├── Resource Registry
├── Action Registry
├── Capability Registry
├── Skill Registry
├── MCP Registry
├── Event Registry
├── Navigation Registry
├── Widget Registry
└── Workflow Registry
Plugin 是:
Registry 的扩展来源。
不是:
Registry 的替代品。
101. Plugin 完整模型
最终:
Plugin
│
├── Manifest
│
├── Resources
│
├── Actions
│
├── Capabilities
│
├── Skills
│
├── MCP
│
├── Workflows
│
├── Events
│
├── Scheduler
│
├── Workers
│
├── Settings
│
├── Credentials
│
├── UI
│ ├── Routes
│ ├── Navigation
│ ├── Dashboard
│ └── Widgets
│
└── Runtime
├── Lifecycle
├── Health
├── Logging
├── Metrics
└── Tracing
102. Plugin Runtime 与 DevOS 的最终关系
DevOS
│
┌───────┴────────┐
│ │
Core Runtime Plugin Runtime
│
┌──────────────────────┼─────────────────────┐
↓ ↓ ↓
Plugin A Plugin B Plugin C
│ │ │
Resource Resource Resource
Action Action Action
Skill Skill Skill
MCP MCP MCP
UI UI UI
所有 Plugin 最终进入:
DevOS Runtime
103. SEO Plugin 示例
SEO 不应该成为第二套系统。
应该:
DevOS
│
└── Plugin: devos.seo
提供:
Resources:
devos.seo.website
devos.seo.keyword
devos.seo.article
devos.seo.backlink
devos.seo.campaign
Actions:
devos.seo.website.scan
devos.seo.keyword.research
devos.seo.article.generate
devos.seo.backlink.find
devos.seo.campaign.run
Skills:
devos.seo.audit
devos.seo.content
devos.seo.link-building
MCP:
search
browser
cms
backlink providers
UI:
SEO Dashboard
Websites
Keywords
Content
Backlinks
Campaigns
Settings
104. Agent 使用 Plugin
用户:
给 example.com 做完整 SEO 审计。
Agent:
Goal
↓
Capability Discovery
↓
devos.seo.audit Skill
↓
Capabilities
├── website.scan
├── keyword.research
├── page.analyze
└── report.generate
↓
Task
↓
Jobs
↓
Actions
↓
Execution
↓
Events
↓
Agent Observation
Agent 不需要直接知道:
SEO Plugin 内部代码
105. Plugin 与独立 Backend
DevOS 必须支持两种模式。
Mode A
DevOS
↓
Plugin
↓
Domain
推荐用于:
SEO
CRM
Content
Marketing
DevOps
Mode B
DevOS Minimal Core
↓
Fork
↓
Independent Application
例如:
DevOS Starter
↓
Fork
↓
Custom Product
独立项目仍然可以保留:
Identity
RBAC
Resource
Action
Task
Event
Audit
Observability
但删除不需要的 Plugin。
106. Plugin 不等于 Microservice
不要把:
Plugin
自动理解成:
Microservice
默认:
Plugin = In-process Extension
只有明确需要:
isolation
resource-heavy worker
different runtime
different deployment lifecycle
才使用:
External Service
107. External Plugin
未来支持:
DevOS
↓
External Plugin Adapter
↓
HTTP / gRPC / MCP
↓
External Service
但外部 Plugin 仍然暴露:
Resource
Action
Capability
Skill
Event
UI
给 DevOS。
108. Plugin Adapter
interface PluginAdapter {
install(): Promise<void>
enable(): Promise<void>
disable(): Promise<void>
uninstall(): Promise<void>
health(): Promise<PluginHealth>
}
109. Plugin Runtime API
建议统一:
interface DevOSPlugin {
manifest: PluginManifest
initialize(context: PluginContext): Promise<void>
activate(context: PluginContext): Promise<void>
deactivate(context: PluginContext): Promise<void>
dispose(context: PluginContext): Promise<void>
}
110. Package Architecture
Zcode 必须实现:
packages/
└── plugin/
├── types/
│ ├── manifest.ts
│ ├── lifecycle.ts
│ └── permission.ts
│
├── registry/
│ └── plugin-registry.ts
│
├── runtime/
│ ├── plugin-runtime.ts
│ ├── lifecycle.ts
│ ├── loader.ts
│ ├── activator.ts
│ └── disposer.ts
│
├── installer/
│ ├── installer.ts
│ ├── resolver.ts
│ ├── validator.ts
│ └── checksum.ts
│
├── configuration/
│ ├── config-service.ts
│ └── secret-service.ts
│
├── isolation/
│ ├── permissions.ts
│ └── credentials.ts
│
├── health/
│ └── health-service.ts
│
└── ui/
├── route-registry.ts
├── navigation-registry.ts
├── widget-registry.ts
└── dashboard-registry.ts
111. Backend Plugin Example
plugins/
└── seo/
├── plugin.json
├── index.ts
│
├── resources/
│ ├── website.ts
│ ├── keyword.ts
│ └── article.ts
│
├── actions/
│ ├── scan.ts
│ ├── research.ts
│ └── generate.ts
│
├── skills/
│ ├── seo-audit.ts
│ └── content.ts
│
├── mcp/
│ └── browser.ts
│
├── events/
│ └── definitions.ts
│
├── workflows/
│ └── audit.ts
│
├── migrations/
│
└── frontend/
├── routes/
├── pages/
├── widgets/
└── index.ts
112. Plugin Test
每个 Plugin 必须提供:
manifest test
lifecycle test
registration test
permission test
configuration test
action test
event test
health test
ui registration test
upgrade test
uninstall test
113. Acceptance Criteria
Plugin Lifecycle
- Discover
- Install
- Configure
- Enable
- Disable
- Restart
- Upgrade
- Uninstall
- Health
Registry
- Plugin Registry
- Resource registration
- Action registration
- Capability registration
- Skill registration
- MCP registration
- Event registration
- Workflow registration
- UI registration
Security
- Permission declaration
- Permission approval
- Credential isolation
- Secret isolation
- Namespace isolation
- Network policy
- Sensitive data redaction
UI
- Dynamic routes
- Navigation
- Settings page
- Dashboard
- Widgets
- Resource pages
- Action buttons
- Task integration
Runtime
- Logger
- Metrics
- Trace
- Event
- Health
- Task
- Worker
- Scheduler
114. Integration Test
必须测试:
Install Plugin
↓
Manifest Validation
↓
Register Resource
↓
Register Action
↓
Register Skill
↓
Register MCP
↓
Register Event
↓
Register UI
↓
Enable
↓
Health Check
最终:
Plugin = healthy
115. Disable Test
Plugin enabled
↓
Task running
↓
Disable
↓
Drain
↓
Deactivate
↓
Unregister
↓
Plugin disabled
验证:
Existing Task
不会被无故破坏。
116. Permission Test
Plugin 尝试:
read secret:github
但只有:
secret:openai
必须:
ACCESS_DENIED
117. Conflict Test
安装:
Plugin A
resource = foo.bar
然后:
Plugin B
resource = foo.bar
必须:
RESOURCE_NAMESPACE_CONFLICT
118. Dependency Test
Plugin A
↓
Plugin B
安装 A 时:
B not installed
应该:
Install B
↓
Install A
119. Failure Test
Plugin activation:
throw Error
必须:
Plugin = activation_failed
同时:
DevOS = healthy
120. Final Golden Rules
1. Plugin 是扩展,不是第二个 DevOS。
2. Plugin 必须通过 DevOS Runtime 执行业务。
3. Plugin 不创建第二套 Auth。
4. Plugin 不创建第二套 Task。
5. Plugin 不创建第二套 Queue。
6. Plugin 不创建第二套 EventBus。
7. Plugin 不绕过 Action Runtime。
8. Plugin 不绕过 Permission。
9. Plugin 不直接读取 Secret。
10. Plugin UI 不直接执行业务逻辑。
11. Plugin 的 Resource 必须注册到 Resource Registry。
12. Plugin 的 Action 必须注册到 Action Registry。
13. Plugin 的 Capability 必须注册到 Capability Registry。
14. Plugin 的 Skill 必须注册到 Skill Registry。
15. Plugin 的 MCP 必须注册到 MCP Runtime。
16. Plugin 的 Event 必须进入 Event Runtime。
17. Plugin 的 Task 必须进入 Task Runtime。
18. Plugin 的日志必须进入 DevOS Logging Runtime。
19. Plugin 的审计必须进入 DevOS Audit Runtime。
20. Plugin 必须可以独立启停。
21. Plugin 崩溃不能拖垮 DevOS Core。
22. Plugin 卸载默认不删除业务数据。
23. Plugin 升级必须进行兼容性检查。
24. Plugin 必须拥有唯一 Namespace。
25. Agent 看到的是 Capability,而不是 Plugin 内部实现。
26. MCP 是能力接入方式,不是第二套业务 Runtime。
27. SEO / DevOps / CRM 等领域都应该优先实现为 Plugin。
28. 真正需要独立 Backend 的项目,应从 DevOS Minimal Core Fork。
121. DevOS Plugin 最终模型
最终 DevOS 应该达到:
DevOS
│
┌──────────────────┴──────────────────┐
│ │
Core Runtime Plugin Runtime
│ │
│ ┌────────────────┼────────────────┐
│ │ │ │
│ SEO Plugin DevOps Plugin CRM Plugin
│ │ │ │
│ Resource Resource Resource
│ Action Action Action
│ Skill Skill Skill
│ MCP MCP MCP
│ Workflow Workflow Workflow
│ Event Event Event
│ UI UI UI
│ │ │ │
└────────────────────┴────────────────┴────────────────┘
│
Capability Registry
│
Agent
│
Goal
DevOS 的真正扩展方式最终就是:
Core
+
Plugin
+
Capability
+
Agent
而不是:
Core
+
SEO Backend
+
SEO Queue
+
SEO Agent
+
SEO MCP
+
SEO EventBus
这一点必须作为 Zcode 后续所有领域模块开发的架构约束。