54d0fb75ea
新增 GDExtension 自动引导、GDScript 执行和实例隔离缓存 接入 AGC 插件开关、Runner、Agent 工具与权限审计 完善执行回执确认、不确定状态阻断及卸载恢复 补齐 Windows 分发资源、定向测试与实机验收文档
63 lines
2.5 KiB
Rust
63 lines
2.5 KiB
Rust
//! 通用编辑器适配器契约。
|
|
//!
|
|
//! AGC 插件宿主只负责插件生命周期、RPC、权限和审计;具体编辑器如何发现进程、
|
|
//! 校验 PID / 项目 / 版本、建立连接并把通用请求翻译成编辑器消息,由插件包自带的
|
|
//! native 适配器实现。本 crate 只定义双方共享的最小契约,不包含任何编辑器专属
|
|
//! 进程名、注入逻辑或业务 API。
|
|
|
|
use std::path::Path;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
use serde_json::Value;
|
|
|
|
/// rpc 请求的通用入参:`processId` / `projectPath` / `code` / `timeoutMs` / `payloadPath`。
|
|
pub const ADAPTER_RPC_PARAMS_SCHEMA: &str = "agc.editor-adapter.params.v1";
|
|
|
|
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct EditorConnectionInfo {
|
|
pub adapter: String,
|
|
pub connected: bool,
|
|
pub pid: Option<u32>,
|
|
pub project_path: Option<String>,
|
|
pub version: Option<String>,
|
|
}
|
|
|
|
impl EditorConnectionInfo {
|
|
pub fn disconnected(adapter: &str) -> Self {
|
|
Self {
|
|
adapter: adapter.to_string(),
|
|
connected: false,
|
|
pid: None,
|
|
project_path: None,
|
|
version: None,
|
|
}
|
|
}
|
|
}
|
|
|
|
/// 宿主与插件 native 适配器之间的窄接口。
|
|
///
|
|
/// 宿主只把插件 manifest 声明的适配器名路由到这里;新增编辑器不会改变插件
|
|
/// 生命周期、SDK 或权限协议。
|
|
pub trait EditorAdapter: Send + Sync {
|
|
/// 适配器 id,必须与插件 manifest `extensions.world.genarrative.agc.adapter` 一致。
|
|
fn id(&self) -> &'static str;
|
|
/// 按项目路径探测当前编辑器实例,不注入、不修改项目文件。
|
|
fn detect(&self, project_path: &Path) -> Result<EditorConnectionInfo, String>;
|
|
/// 绑定目标 PID / 项目 / 版本并验证协议握手;受管引导文件仅按对应编辑器已授权合同维护。
|
|
fn connect(
|
|
&mut self,
|
|
pid: u32,
|
|
project_path: &Path,
|
|
version: &str,
|
|
) -> Result<EditorConnectionInfo, String>;
|
|
/// 释放连接登记;不关闭编辑器、不回滚用户项目。
|
|
fn disconnect(&mut self);
|
|
/// 把通用 RPC 方法名翻译成适配器方法名,未知方法失败关闭。
|
|
fn translate_rpc(&self, method: &str, params: Value) -> Result<Value, String>;
|
|
/// 执行适配器方法:探测、预检、ping、status、execute、inject。
|
|
fn rpc(&self, _method: &str, _params: Value) -> Result<Value, String> {
|
|
Err("编辑器原生连接尚未建立".to_string())
|
|
}
|
|
}
|