InPage Agent 插件体系架构 (InPage Agent Plugin System Architecture)
InPage Agent 插件体系架构 (InPage Agent Plugin System Architecture) 是针对纯前端浏览器单页面应用(Single-Page Application, SPA)环境设计的可扩展智能体框架方案。它旨在解决大语言模型(Large Language Model, LLM)驱动的前端代理在脱离传统后端服务器时,如何实现即时能力扩展、动态工具注标(Dynamic Tool Registration)与长久持久化托管。
1. 核心设计哲学:执行环境的双轨解耦模型 (Dual-Track Decoupled Execution Model)
在浏览器端构建智能体系统时,执行 JavaScript 往往存在两种冲突的诉求:
- 即时性与纯粹性:只想快速运行一段无副作用的代码,或者 Agent 仅需读取浏览器当前环境的某些属性(例如时区、字体列表、屏幕像素比等)。
- 常驻性与侵入性:需要向系统长期注册新能力(如新的 Agent Tool、自定义 UI 按钮、持久化定时任务)。
若将两者混为一谈,会导致执行权限管理极其混乱,或者因为过度沙箱化导致无法访问宝贵的 Web 原生 API。因此,系统确立了严格的双轨模型 (Dual-Track Model):
| 维度 | 即时原生 JS 执行器 (Instant Native JS Runner) | 常驻插件体系 (Persistent Plugin System) |
|---|---|---|
| 生命周期 | 单次瞬时求值 (Stateless, Short-lived) | 随宿主启动常驻 (Stateful, Long-lived) |
| 触发源 | 用户点击工作台「运行」或 Agent 调用 run_js 工具 | 系统初始化启动 (Boot) / 用户在插件面板启停 |
| 存储介质 | 无需持久化(或仅作为虚拟文件系统普通的 .js 文件) | localStorage 或虚拟文件系统固定目录持久化 |
| 能力边界 | 执行代码、捕获控制台日志、返回结果 | 注入 Agent 工具、拦截生命周期钩子 (Hooks)、注册 UI 按钮 |
| 上下文注入 | 仅注入作用域代理 console | 注入完整的 PluginContext 实例 |
2. 插件生命周期与宿主加载流水线 (Lifecycle & Loading Pipeline)
常驻插件的生命周期包含五个核心阶段:
- 安装阶段 (Installation):
用户可通过粘贴代码清单、上传插件包或直接从工作区代码编辑器将当前代码「另存为插件」。 - 持久化阶段 (Persistence):
插件的元数据清单(Manifest)与执行体源码存储于浏览器的本地存储(LocalStorage)或 IndexedDB 中,确保浏览器刷新后不丢失。 - 引导启动阶段 (Boot & Instantiation):
当应用程序加载初始化时,插件管理器(Plugin Manager)扫描已启用的插件,并为每个插件创建一个独立的插件扩展上下文(Plugin Context)。 - 激活阶段 (Activation):
调用插件入口函数activate(context),插件通过上下文完成工具注标、钩子挂载与 UI 渲染。 - 停用与卸载阶段 (Deactivation & Teardown):
当插件被禁用或删除时,宿主自动撤销该插件注册过的所有 Agent 工具与事件监听器,避免内存泄露与脏状态残留。
3. 插件宿主上下文设计 (PluginContext API)
每个插件仅能通过宿主显式传递的上下文对象进行扩展,其主要接口能力包括:
- 动态工具注标 (Dynamic Tool Registration):
允许插件声明 Agent 可调用的新工具,包含参数 JSON Schema 与异步执行函数。当 Agent 生成工具调用时,系统无缝分发给插件。 生命周期钩子 (Lifecycle Hooks):
beforeAgentTurn:在 Agent 开始生成回复前注入自定义上下文。afterAgentTurn:在 Agent 生成回复后进行内容审查或数据归档。beforeToolCall/afterToolCall:对特定工具调用前后进行拦截或参数篡改防护。onFileChange:响应虚拟文件系统(Virtual File System, VFS)的文件变动。
- UI 挂载点 (UI Action Registry):
允许在工作区顶部导航栏、侧边栏或代码编辑器工具栏注标自定义操作图标与下拉命令。 - 隔离键值存储 (Scoped Storage):
为每个插件分配带命名空间前缀的本地持久化存储,互不干扰。
4. 浏览器端单用户实用主义与容错边界 (Pragmatism & Resilience Boundaries)
在纯前端单用户产品形态中,用户自身就是代码的编写者与运行者。传统云端多租户系统采用的强对抗重型沙箱(如限制 window、深度属性冻结、影子作用域 Shadow Realm)在前端单用户场景下往往带来巨大的交互阻力和 Web API 调用障碍。
本架构采取单用户实用主义 (Single-User Pragmatism) 与防御性容错边界 (Resilient Error Boundaries) 策略:
- 完整 Web API 开放:保留对 DOM、Canvas、Web Audio、Fetch、Intl 等原生能力的直接访问,赋予 Agent 与插件最大限度的浏览器交互能力。
- 执行故障隔离 (Failure Isolation):
插件在try/catch和未捕获 Promise 保护下执行。单个插件的内部抛错仅被记录为告警,绝不允许阻断主界面的渲染或 Agent 的正常思考。 - 超时看门狗 (Timeout Watchdog):
针对同步长任务与可能导致主线程假死的死循环,设置异步竞态超时上限(Timeout Guard),保障页面交互的持续可用。
本文归档于个人知识库 · 领域:CS & AI · 模块:04 Project_CS_AI/AI apps