🖥️ GS2 控制台
工具 · 让用户与 AI Agent 无需预留接口,即可通过 GS2 反射访问程序绝大部分功能。
📌 技术定位
GS2 控制台把 GS2 虚拟机包装为对用户友好的交互界面,是反射能力面向人与 Agent 的统一入口。 它的核心用意是:调用方不需要为控制台预先保留任何接口——只要对象能被反射访问, 就能在控制台里定位到它,并直接读写其成员、调用其方法,因此程序可被操作的功能面几乎不受预留接口的限制。 它与被操作的程序之间不存在强绑定:同一套数据层可在内嵌 GUI 宿主、CLI 宿主、Web GUI 子进程, 以及 GCenter 这类纯控制台程序中复用,各宿主共享完全一致的反射能力与命令语义。
✨ 核心特性
🪞 反射式访问(核心)
以「定位对象 → 调用成员」两步完成操作:cd 把当前上下文定位到某个服务 / 中介者 / 工厂 / 配方或门面对象, 再用 ./方法名 触发其方法;getc / getp / setp 可读写任意成员(含私有),help 则列出当前对象可被反射调用的内容。 调用方无需事先拿到类型定义或接口声明。
🧬 多宿主同源
数据层(虚拟机、状态机、弹窗通道)与显示层分离,同一份数据层可接入不同宿主: 编辑器内嵌 GUI 面板、常驻 CLI 宿主、Web GUI 子进程,以及 GCenter 这类同一家族中的纯控制台程序。 应用形态不同,反射能力完全一致,因此它不是某个编辑器独有的附属功能。
🌐 Web GUI 控制台
基于 Blazor Server 的控制台显示层,渲染输出、输入、弹窗、选择器与历史记录,并支持壳命令 (/help /cls /save /load /reset /c /hist)。
🧩 前后端解耦
Web 显示层自身不实现虚拟机,而是通过 stdin/stdout 的 JSON-line 协议与 CLI 宿主(父进程)双向通信; 整套协议共 17 个协议类(9 个上报 + 8 个推送)。
🔀 七态状态机
Read / Processing / Occupied / Confirm / Prompt / Selector / Alert,覆盖自由输入、异步执行、确认、输入、 选择与警告等交互状态。
🤖 Agent 入口
控制台能力已封装为 MCP 工具对外开放,AI Agent 可直接下发脚本、读取执行状态与输出; 同时提供「常驻进程 + 轻量 CLI + 命名管道」入口(含签名鉴权),可作为外部 AI 编程工具的 Hooks 使用。 对 Agent 而言,这意味着不必等待新接口发布,也能操作程序已具备的能力。
🔧 关键技术点
- 父子进程拓扑:CLI 宿主(持有虚拟机与状态机)↔ Web GUI 子进程(Blazor Server,仅监听本机);两者以 JSON-line 协议通信。
- 协议通道隔离:子进程启动时立即把标准输出重定向到错误流,使 stdout 专用于协议、诊断日志走 stderr 与日志文件,互不污染。
- 编码约定:双向 JSON-line 均使用 UTF-8 无 BOM。
- 反射边界:远程入口需签名鉴权,虚拟机的反射接口按信任等级与白名单设限,避免把高权限能力无差别地暴露出去。
- 薄包装:控制台不隐藏原生能力,随时可回退到原生调用;也无需被访问方为它专门设计接口。
🧪 示例
// GS2 反射:定位对象后直接调用其方法(调用方无需预先拿到接口)
cd m openaiMediator // 把上下文定位到 openaiMediator(m 表示中介者)
./SwitchProvider 参数1 参数2 // 触发该对象上的方法,参数按位置传入
help // 列出当前对象可被反射调用的成员
// 协议消息(子进程 → 父进程:提交命令)
{ "clz": "console", "method": "command", "command": "print('hello')" }
// 协议消息(父进程 → 子进程:推送输出)
{ "clz": "console", "method": "output", "text": "hello" }