主题
扩展相关问题
本文引用的源码文件
本文引用的文件
目录
- 引言
- 项目结构与排查边界
- 扩展更新失败:常见原因与解决方法
- 配置重置:用户设置备份、恢复与缓存清理
- 数据恢复流程:会话导出导入、历史恢复与知识库重建
- 扩展卸载与完整清理步骤
- 扩展权限管理与安全最佳实践
- 崩溃保护与灾难恢复方案
- 依赖关系与架构总览
- 故障排查清单
- 结论
引言
本文件面向“AI Helper”扩展(Chrome 扩展端,Manifest V3,版本 2.3.1)与其独立本地代理端 Agent(Node.js,包名 ai-helper-agent,版本 2.3.1)的扩展相关问题排查。文档重点覆盖以下目标:
- 扩展更新失败的常见原因与修复路径;
- 配置重置的具体步骤,包括用户设置备份、默认配置重置和缓存清理;
- 数据恢复流程,包括 IndexedDB 数据导出导入、会话历史恢复和知识库重建;
- 扩展卸载后的完整清理步骤,包括文件残留、注册表/系统状态和服务进程终止;
- 扩展权限管理最佳实践;
- 扩展崩溃后的数据保护机制与灾难恢复方案。
需要特别强调:扩展端与 Agent 端通过本地 HTTP/WebSocket 通信,Agent 源码修改后必须重启进程,新接口才生效。因此任何涉及 Agent 行为变更的修复,都应包含“重启 Agent 进程”这一动作。
章节来源
项目结构与排查边界
本项目采用双进程架构:
- Chrome 扩展端位于
src/,入口为 Service Workersrc/background/index.js,负责侧边栏、消息路由、ReAct 任务调度、IndexedDB 持久化、与 Agent 的本地通信。 - Agent 端位于
agent/src/server.js,提供 HTTP + WebSocket 接口,暴露文件读写、命令执行、长期记忆、RAG、MCP、技能等能力。
graph TB Browser["浏览器扩展环境<br/>Manifest V3"] Background["Background Service Worker<br/>src/background/index.js"] SidePanel["Side Panel 界面<br/>会话/工具/知识面板"] Storage["IndexedDB<br/>ai-helper-db"] LocalStorage["chrome.storage.local<br/>配置/后备 checkpoint"] AgentServer["Agent 本地服务器<br/>agent/src/server.js"] FileSystem["工作目录与系统文件"] RAG["RAG 知识库与向量索引"] Browser --> Background Browser --> SidePanel Background --> Storage Background --> LocalStorage Background --> AgentServer AgentServer --> FileSystem AgentServer --> RAG
图表来源
章节来源
- manifest.json#L1-L76
- src/background/index.js#L1-L120
- src/storage/db.js#L21-L92
- agent/src/server.js#L388-L500
扩展更新失败:常见原因与解决方法
1. 版本冲突
扩展端与 Agent 端版本号应保持同步。当前仓库中扩展端版本为 2.3.1,Agent 端也应以 2.3.1 为准。若出现“扩展可用但 Agent 功能异常”,应优先检查两端版本是否一致。
排查建议:
- 查看扩展版本:在 Chrome 扩展管理页面确认扩展版本是否为 2.3.1。
- 查看 Agent 版本:调用 Agent 健康接口
/api/status,返回字段中包含version。 - 若版本不一致,先升级 Agent 端,再刷新扩展。
章节来源
2. npm 全局安装失败或超时
Agent 更新通过服务端 /api/agent/update 触发 npm install -g ai-helper-agent@latest。该过程存在以下风险:
- 网络不可用或镜像源不可达;
- npm 被其他进程占用;
- 安装超时(默认 90 秒保护);
- 与 RAG 依赖安装并发写
node_modules,导致互相破坏。
修复步骤:
- 停止正在进行的 RAG 安装或更新操作。
- 手动执行
npm install -g ai-helper-agent@latest,观察输出日志。 - 若提示权限问题,使用管理员权限或调整 npm 全局目录权限。
- 更新成功后重启 Agent 进程。
章节来源
3. 端口占用或服务未启动
Agent 监听本地端口,若端口被占用或进程未启动,扩展无法连接。
排查建议:
- 检查 Agent 是否运行:访问
/api/status。 - 检查端口是否被占用:根据配置中的
host与port判断。 - 若服务已启动但无响应,执行
/api/shutdown或手动终止进程后重新启动。
章节来源
4. 内嵌模式与 npm 全局模式路径差异
Agent 支持两种运行模式:
- 内嵌模式:由安装脚本安装到
~/.ai-helper-agent/; - npm 全局模式:传统
npm install -g路径。
若更新后路径解析异常,应检查当前是否为内嵌模式,并确认 Node/npm 可执行文件路径是否正确。
章节来源
5. 权限变更导致 Agent 无法写入
Agent 对核心敏感路径有硬阻止策略,例如配置文件、配对记录、日志目录、回收站等。若更新过程中尝试写入这些路径,会被安全模块拦截。
修复建议:
- 不要将工作目录设置为 Agent 内部目录;
- 使用用户可控的工作目录;
- 避免直接修改
config.json、pairings.json、mcp_servers.json等核心文件。
章节来源
配置重置:用户设置备份、恢复与缓存清理
1. 用户设置的备份
扩展端主要配置存储在 chrome.storage.local,包括模型列表、API Base URL、图片识别模型、自定义 API Base、删除过的预设项等。
推荐备份方式:
- 打开选项页,进入模型与 API Base 管理界面;
- 记录自定义模型名称、上下文窗口大小、API Base URL 及标签;
- 如需完整备份,可使用浏览器开发者工具读取
chrome.storage.local内容并保存 JSON。
章节来源
- src/options/config-manager.js#L269-L283
- src/options/config-manager.js#L485-L583
- src/options/config-manager.js#L700-L764
2. 默认配置的重置
若配置损坏或行为异常,可按以下步骤重置:
- 打开 Chrome 扩展设置页;
- 找到 AI Helper 扩展;
- 点击“清除数据”或“重置设置”;
- 重新打开选项页,加载默认模型与 API Base;
- 重新输入必要的密钥或 API Base。
注意:重置会清空 chrome.storage.local 中的扩展配置,但不会自动删除 IndexedDB 中的会话数据。
章节来源
3. 缓存数据的清理
扩展端涉及两类缓存:
chrome.storage.local:轻量配置、临时状态;- IndexedDB
ai-helper-db:会话、归档会话、UI 原型、Token 统计、ReAct checkpoint、书签、定时任务等。
清理建议:
- 仅清理配置:清除扩展数据;
- 仅清理会话:通过侧边栏导出重要会话后,再删除 IndexedDB 中的
sessions与archivedSessions; - 完全重置:清除扩展数据 + 删除 IndexedDB + 重启 Agent。
章节来源
数据恢复流程:会话导出导入、历史恢复与知识库重建
1. 会话导出与导入
侧边栏提供会话导出/导入功能,导出格式为 .aihelper.json,包含会话标题、模型、工具配置、温度、TopP、消息历史等。
导出流程:
- 打开侧边栏;
- 进入会话导出界面;
- 选择要导出的会话;
- 点击导出,生成 JSON 文件;
- 将文件保存到安全位置。
导入流程:
- 准备
.aihelper.json文件或兼容旧格式的消息数组; - 在侧边栏导入界面选择文件;
- 系统校验格式并导入会话;
- 刷新会话标签栏。
章节来源
- src/side_panel/export-import.js#L48-L124
- src/side_panel/export-import.js#L152-L220
- src/side_panel/export-import.js#L256-L305
2. IndexedDB 数据迁移与自检
扩展启动时会检查 IndexedDB 是否已有会话数据;若无,则尝试从 chrome.storage.local 迁移旧数据。迁移完成后会清理旧的会话 key。
此外,数据库封装层对 reactCheckpoints store 缺失做了防御性处理:若 store 不存在,会关闭连接并重试,以应对 SW 重启或 DB 升级导致的连接陈旧问题。
章节来源
3. ReAct Checkpoint 的双写后备机制
当长任务被 Service Worker 回收时,扩展会保存 ReAct checkpoint,以便后续自动续跑。checkpoint 同时写入:
chrome.storage.local(可靠后备);- IndexedDB
reactCheckpoints(性能优化)。
若 IndexedDB 不可用,checkpoint 仍可保留在 storage.local 中,避免中断任务丢失。
章节来源
4. 知识库重建方法
Agent 端的 RAG 能力依赖本地依赖与环境检测。若 RAG 不可用,可能表现为知识库无法检索或重建失败。
重建建议:
- 检查 Agent 健康接口
/api/status中的ragAvailable; - 若不可用,查看 RAG 安装日志;
- 若曾成功安装但依赖被清(例如 npm 全局更新),Agent 会自动尝试恢复 RAG 依赖;
- 若仍失败,手动安装 RAG 相关依赖;
- 重建知识库索引。
章节来源
扩展卸载与完整清理步骤
1. 扩展本身卸载
在 Chrome 扩展管理页面移除 AI Helper 扩展。这会删除扩展代码和部分扩展数据,但不会自动清理:
- Agent 本地服务进程;
- Agent 工作目录;
~/.ai-helper-agent/下的内嵌运行时;- 系统级 npm 全局包(如果是 npm 全局安装)。
2. Agent 服务进程终止
Agent 是独立 Node.js 进程,卸载扩展不会自动终止它。
终止方式:
- 使用 Agent 提供的
/api/shutdown接口; - 或通过系统任务管理器查找并终止 Node 进程;
- 内嵌模式下,检查
~/.ai-helper-agent/下是否有残留进程。
章节来源
3. 文件残留清理
内嵌模式
内嵌模式会将运行时和应用安装在 ~/.ai-helper-agent/。卸载时应检查:
~/.ai-helper-agent/runtime/;~/.ai-helper-agent/app/;~/.ai-helper-agent/config.json;~/.ai-helper-agent/logs/;~/.ai-helper-agent/.trash/;~/.ai-helper-agent/mirrors.json;~/.ai-helper-agent/INSTALL_MANIFEST.json。
npm 全局模式
npm 全局安装的 Agent 包通常位于 Node 全局包目录,例如:
- macOS/Linux:
/usr/local/lib/node_modules/ai-helper-agent或用户 npm prefix; - Windows:Node 全局模块目录。
工作目录
Agent 的 workdir 由配置决定,默认可能是用户当前工作目录。卸载前应先确认工作目录中是否有用户数据,不要误删。
章节来源
4. 注册表与系统状态清理
Agent 的安全模块对命令执行进行分级管控,其中包含 Windows 注册表相关命令的灰名单。但扩展本身不直接维护 Windows 注册表条目;若用户通过 Agent 命令修改过系统状态,需按系统常规方式清理。
注意:
- 不应盲目删除系统注册表;
- 只清理明确由用户创建的条目;
- 若不确定,请先导出注册表备份。
章节来源
扩展权限管理与安全最佳实践
1. Manifest 权限说明
扩展声明了较多权限,包括 activeTab、storage、unlimitedStorage、sidePanel、scripting、bookmarks、history、downloads、notifications、tabs、tabGroups、cookies、offscreen、clipboardRead、clipboardWrite、commands、alarms、debugger、webNavigation,以及主机权限 <all_urls>、http://*/*、https://*/*。
最小权限原则建议:
- 仅在确实需要时启用对应功能;
- 避免将扩展分发给不需要全部能力的用户;
- 定期审计权限使用情况;
- 对敏感权限(如
cookies、history、debugger)做额外风险评估。
章节来源
2. Agent 端安全控制
Agent 端实现了两层关键安全控制:
- 文件路径沙箱:白名单 + 硬阻止目录 + 符号链接校验;
- 命令分级管控:黑名单绝对禁止,灰名单需用户确认。
最佳实践:
- 将工作目录限制在用户可控目录;
- 不在
allowedPaths中添加系统目录; - 谨慎授权高风险命令;
- 开启确认弹窗,不要长期关闭安全提示;
- 定期检查 Agent 日志。
章节来源
3. CORS 与来源限制
Agent 服务器仅允许来自 chrome-extension:// 的请求跨域读取响应,防止恶意网页直接调用无认证接口。
建议:
- 不要将 Agent 绑定到
0.0.0.0且对外暴露; - 生产环境建议使用本机回环地址;
- 若需远程访问,必须启用认证并通过安全网关。
章节来源
崩溃保护与灾难恢复方案
1. Service Worker 生命周期与保活
Chrome MV3 的 Service Worker 可能被系统回收。扩展通过 keepalive port 机制保持活跃,并在 SW 重启后检测断连,向面板发送 SW_RESTARTED 消息,附带可恢复的 checkpoint 元数据。
章节来源
2. ReAct 任务自动续跑
扩展在后台注册闹钟处理器,扫描残留 checkpoint 并尝试自动续跑。续跑次数超过上限后会通知用户人工介入。
章节来源
3. IndexedDB 连接恢复与 store 重建
数据库封装层对事务错误、连接关闭、store 缺失等情况进行重试与连接重置,确保 SW 重启后仍能访问必要的数据结构。
章节来源
4. 灾难恢复流程
若扩展或 Agent 发生严重异常,建议按以下顺序恢复:
- 导出所有重要会话;
- 检查 Agent 是否正常运行;
- 若 Agent 异常,重启 Agent;
- 若会话丢失,尝试从
.aihelper.json导入; - 若 IndexedDB 损坏,先导出备份,再考虑重置扩展数据;
- 若知识库失效,重建 RAG 索引;
- 最后恢复用户配置。
flowchart TD
Start["发现异常"] --> ExportSessions["导出重要会话"]
ExportSessions --> CheckAgent["检查 Agent 状态"]
CheckAgent --> AgentRunning{"Agent 正常?"}
AgentRunning --> |否| RestartAgent["重启 Agent"]
AgentRunning --> |是| CheckData["检查会话数据"]
RestartAgent --> CheckData
CheckData --> DataExists{"会话是否存在?"}
DataExists --> |是| RestoreKB["检查知识库可用性"]
DataExists --> |否| ImportBackup["导入 .aihelper.json 备份"]
ImportBackup --> RestoreKB
RestoreKB --> KBOk{"知识库可用?"}
KBOk --> |否| RebuildRAG["重建 RAG 索引"]
KBOk --> |是| RestoreConfig["恢复用户配置"]
RebuildRAG --> RestoreConfig
RestoreConfig --> End["完成恢复"]
图表来源
依赖关系与架构总览
扩展端与 Agent 端的交互是故障排查的核心。下图展示关键组件之间的依赖关系。
graph LR Manifest["manifest.json<br/>权限/入口/版本"] Background["background/index.js<br/>Service Worker 主逻辑"] DB["storage/db.js<br/>IndexedDB 封装"] ExportImport["side_panel/export-import.js<br/>会话导出导入"] ConfigManager["options/config-manager.js<br/>配置管理"] AgentServer["agent/server.js<br/>HTTP/WebSocket 服务"] InstallMode["agent/install-mode.js<br/>内嵌/npm 模式"] Security["agent/security.js<br/>路径与命令安全"] Manifest --> Background Background --> DB Background --> AgentServer ExportImport --> DB ConfigManager --> Background AgentServer --> InstallMode AgentServer --> Security
图表来源
- manifest.json#L1-L76
- src/background/index.js#L1-L120
- src/storage/db.js#L21-L92
- src/side_panel/export-import.js#L1-L47
- src/options/config-manager.js#L1-L10
- agent/src/server.js#L388-L500
- agent/src/install-mode.js#L1-L32
- agent/src/security.js#L1-L18
故障排查清单
更新失败
- [ ] 确认扩展版本与 Agent 版本一致;
- [ ] 检查 npm 全局安装是否成功;
- [ ] 查看 Agent 日志中是否有
update_npm_failed; - [ ] 确认没有 RAG 安装与更新并发;
- [ ] 重启 Agent 后重试。
配置异常
- [ ] 备份
chrome.storage.local; - [ ] 重置扩展设置;
- [ ] 重新配置模型与 API Base;
- [ ] 检查是否误删内置预设;
- [ ] 若仍异常,清理 IndexedDB 后重建。
数据丢失
- [ ] 检查是否有
.aihelper.json备份; - [ ] 尝试导入会话;
- [ ] 检查 IndexedDB 中
sessions与archivedSessions; - [ ] 检查 ReAct checkpoint 是否因 TTL 过期被清理;
- [ ] 必要时重置扩展数据并重新导入。
权限与安全
- [ ] 检查工作目录是否在白名单;
- [ ] 检查是否尝试访问 Agent 核心敏感文件;
- [ ] 检查命令是否命中黑名单或灰名单;
- [ ] 确认 Agent 未对外暴露;
- [ ] 审查扩展权限是否超出实际需求。
崩溃与恢复
- [ ] 检查 Service Worker 是否被回收;
- [ ] 查看是否有可恢复的 checkpoint;
- [ ] 检查 IndexedDB 连接是否正常;
- [ ] 重启扩展与 Agent;
- [ ] 按灾难恢复流程逐步恢复数据。
章节来源
- agent/src/server.js#L605-L720
- src/storage/db.js#L626-L799
- agent/src/security.js#L109-L229
- agent/src/security.js#L691-L758
结论
扩展相关问题的排查应以“扩展端 + Agent 端 + 本地存储”三位一体视角进行。更新失败多与 npm、端口、版本不一致有关;配置重置应优先备份用户设置;数据恢复应以会话导出文件为主、IndexedDB 为辅;卸载时必须清理 Agent 进程与文件残留;权限管理应遵循最小权限原则,并结合 Agent 的路径与命令安全策略。对于崩溃场景,扩展已提供 checkpoint 后备与自动续跑机制,但重大故障仍需人工介入并按灾难恢复流程处理。