Plugin 运行时

wesgine 的 JSON-RPC 子进程 Plugin 系统:声明、加载、通信与生命周期管理。


概述

Plugin 是通过 JSON-RPC 协议与 Cell 通信的独立子进程。每个 Plugin 在自己的进程空间运行,通过标准化协议向 Cell 暴露工具。


CellSpec 声明

CellSpec{
  Plugins: []PluginDir{
    {Path: "/opt/plugins/my-plugin"},
  },
}

每个 PluginDir 是一个容器目录,子目录包含 manifest.yaml + 可执行文件。


manifest.yaml 结构

name: my-plugin
version: 1.0.0
command: ./bin/server
args: ["--port", "0"]
tools:
  - name: my_tool
    description: "执行某操作"
    parameters:
      type: object
      properties:
        input:
          type: string

生命周期

Cell.Start
  ↓
Manager 扫描 PluginDir
  ↓
启动子进程(JSON-RPC)
  ↓
桥接 Tools → Cell ToolRegistry
  ↓
Cell.Stop → Shutdown 全部子进程

Boot 行为

Manager 在 Cell boot 时扫描 Plugin 目录、启动子进程、桥接工具到 Cell ToolRegistry。

Drain 行为

Cell stop 时 Shutdown 全部 Plugin 子进程。


配额限制

配额说明
MaxPlugins最大 Plugin 数

超出限制时 boot 期截断(不是运行时拒绝)。

注意:MaxPlugins 不在 INV-QUOTA-05 的五个外设 cap 之列——它在 boot 期截断而非写点拒绝,没有运行时写门。


签名验证

PluginPolicy 支持 ed25519 签名验证:


JSON-RPC 协议

Plugin 与 Cell 通过 stdio JSON-RPC 通信:

Cell (父进程) ←→ stdin/stdout ←→ Plugin (子进程)

调用流程

  1. Agent 调用 Plugin 暴露的工具
  2. Cell 通过 JSON-RPC 转发到 Plugin 子进程
  3. Plugin 执行并返回结果
  4. Cell 将结果返回给 Agent

与 MCP 的区别

PluginMCP
通信JSON-RPC(stdio)JSON-RPC(stdio / SSE)
声明CellSpec.PluginsCellSpec.MCPs 或运行时 cell.MCPs().Upsert
运行时增删不支持支持(Upsert / Delete)
配额MaxPlugins(boot 截断)MaxMCPServers(写点拒绝)
适用嵌入式子进程外部服务 / 动态工具

进程管理

Plugin 子进程通过 proc.Command(INV-EXEC-PROC-01)创建:


相关文档