主题
系统管理 API
本文引用的源码文件
本文引用的文件
目录
简介
本文件是 AI Helper Agent(本地代理服务)的系统管理 API 参考文档。Agent 是 Chrome 扩展的独立 Node.js 进程,提供健康检查、心跳检测、服务控制、配置管理、日志查询等能力。所有需要变更状态的接口均受认证保护;部分只读或本机调用接口具有额外来源限制。
- 版本:Agent 包
ai-helper-agent当前版本为 2.3.1,与扩展端保持同步。 - 默认监听地址:
127.0.0.1:18910。 - 安全模型:
/api/status、/api/pair无需 Bearer Token,但仅返回必要信息,并限制跨域响应头。/api/heartbeat、/api/agent/restart、/api/agent/update、/api/shutdown、/api/status/detail等需要Authorization: Bearer <token>。/api/shutdown允许本机来源免认证,远程来源仍需 Token。
- 运行时约束:修改 Agent 源码后必须重启进程,新接口才生效。
章节来源
项目结构
Agent 的 HTTP 路由、WebSocket、配置加载、认证、日志、命令执行、RAG、记忆、MCP、技能等子系统集中在服务端入口中组织,并通过 CLI 启动器暴露命令行能力。
graph TB subgraph "Chrome 扩展" BG["background/index.js<br/>心跳与健康检查"] end subgraph "Agent 进程" CLI["bin/agent.js<br/>CLI 启动/停止/重启/更新"] Server["src/server.js<br/>HTTP 路由 + WebSocket"] Logger["src/logger.js<br/>审计日志模块"] Config["src/config.js<br/>配置文件读写"] Auth["src/auth.js<br/>配对码与 Token"] Security["src/security.js<br/>路径/命令安全检查"] Executor["src/executor.js<br/>命令执行"] Memory["memory/routes.js<br/>长期记忆路由"] RAG["rag/*<br/>可选知识库能力"] MCP["mcp/registry.js<br/>MCP 工具注册"] Skill["skill/*<br/>技能系统"] end BG --> Server CLI --> Server Server --> Logger Server --> Config Server --> Auth Server --> Security Server --> Executor Server --> Memory Server --> RAG Server --> MCP Server --> Skill
图表来源
章节来源
核心组件
- HTTP 路由器:统一解析请求、CORS、国际化语言、认证、业务路由和错误响应。
- 认证模块:校验 Bearer Token,记录认证失败日志。
- 日志模块:按天写入 JSON Lines 审计日志,支持分类过滤、分页查询和日期列表。
- 配置模块:工作目录、允许路径、端口、主机、超时、文件大小限制等。
- 命令执行模块:同步/异步执行系统命令,支持 WebSocket 输出、超时、终止、守护模式。
- 生命周期控制:优雅关闭、防重入、冷却时间、两阶段重启包装器。
章节来源
架构总览
系统管理 API 的请求流程如下:
sequenceDiagram participant Client as "客户端" participant Server as "Agent HTTP 服务器" participant Auth as "认证模块" participant Logger as "日志模块" participant OS as "操作系统" Client->>Server : "HTTP 请求" Server->>Server : "解析 URL / CORS / i18n" alt "无需认证的接口" Server-->>Client : "直接返回状态或本机操作结果" else "需要认证的接口" Server->>Auth : "验证 Bearer Token" Auth-->>Server : "extId 或失败" Server->>Logger : "记录认证/操作日志" Server->>OS : "执行文件/命令/重启/更新" OS-->>Server : "结果" Server-->>Client : "JSON 响应" end
图表来源
详细接口参考
系统状态端点
GET /api/status
- 用途:健康检查。用于判断 Agent 是否存活、版本、平台信息和搜索工具可用性。
- 认证:不需要 Bearer Token。
- CORS:仅对
chrome-extension://来源设置Access-Control-Allow-Origin。 - 成功响应字段:
success: booleanversion: string,Agent 版本号running: booleanplatform: string,如darwin、linux、win32platformName: string,如macOS、Linux、Windowsarch: string,CPU 架构nodeVersion: stringsearchTools: object,包含搜索引擎可用性ragAvailable: boolean,RAG 可选依赖是否可用
- 错误响应:
- 网络不可达时由客户端判定连接失败。
- 内部异常会返回 500 且
success: false。
章节来源
GET /api/status/detail
- 用途:详细状态。面向已认证客户端,返回工作目录、资源使用、运行进程、平台信息等。
- 认证:需要 Bearer Token。
- 成功响应关键字段:
success: booleanversion: stringpairCodeTTL: numberworkdir: stringallowedPaths: array<string>commandTimeout: numberfileMaxSize: numberuploadMaxSize: numberrunningProcesses: arrayresourceUsage.memoryUsedMB: numberresourceUsage.memoryTotalMB: numberresourceUsage.memoryRssMB: numberresourceUsage.uptimeSeconds: numberresourceUsage.cpuUser: numberresourceUsage.cpuSystem: numberplatform、platformName、arch、hostname、shell、homeDir、nodeVersionsearchToolsragAvailable
- 说明:该接口不返回敏感配对码,避免横向泄露。
章节来源
GET /api/heartbeat
- 用途:心跳检测。刷新代理端“插件在线”状态,防止频繁刷新配对码。
- 认证:需要 Bearer Token。
- 成功响应:
success: booleantime: number,当前时间戳
- 扩展端行为:每 60 秒向当前活跃代理发送一次轻量心跳。
sequenceDiagram
participant SW as "扩展 Service Worker"
participant Agent as "Agent 服务器"
SW->>Agent : "GET /api/heartbeat (带 Authorization)"
Agent->>Agent : "刷新 lastAuthTime"
Agent-->>SW : "{ success : true, time }"
图表来源
章节来源
系统控制端点
POST /api/agent/restart
- 用途:重启 Agent 服务。
- 认证:需要 Bearer Token。
- 防重入与限流:
- 若已有操作进行中,返回 409。
- 10 秒内重复调用返回 429,并提示等待秒数。
- 成功响应:
success: booleanmessage: string,表示正在重启
- 行为:
- 记录系统日志。
- 启动两阶段重启包装器,等待旧进程退出并释放端口后拉起新进程。
- 延迟关闭当前进程。
flowchart TD
Start["收到 POST /api/agent/restart"] --> CheckBusy{"是否有其他操作进行中?"}
CheckBusy --> |是| Return409["返回 409 操作进行中"]
CheckBusy --> |否| CheckCooldown{"是否在 10 秒冷却期内?"}
CheckCooldown --> |是| Return429["返回 429 太频繁"]
CheckCooldown --> |否| MarkInProgress["标记操作进行中"]
MarkInProgress --> LogRestart["记录重启日志"]
LogRestart --> SpawnHelper["spawn 两阶段重启包装器"]
SpawnHelper --> Respond["返回 200 正在重启"]
Respond --> ShutdownOld["延迟关闭旧进程"]
图表来源
章节来源
POST /api/agent/update
- 用途:更新 Agent 到最新版本并重启。
- 认证:需要 Bearer Token。
- 互斥规则:
- 不能与 RAG 依赖安装并发执行。
- 不能与其他 agent 操作并发执行。
- 10 秒内重复调用返回 429。
- 成功响应:
success: booleanmessage: string,表示更新成功或失败原因
- 行为:
- 执行
npm install -g ai-helper-agent@latest。 - 更新失败时保留老进程,返回失败消息。
- 更新成功后触发两阶段重启。
- 执行
sequenceDiagram
participant Client as "客户端"
participant Server as "Agent 服务器"
participant NPM as "npm 进程"
participant Helper as "重启包装器"
Client->>Server : "POST /api/agent/update"
Server->>Server : "检查操作互斥与冷却时间"
Server->>NPM : "npm install -g ai-helper-agent@latest"
alt "npm 成功"
NPM-->>Server : "退出码 0"
Server-->>Client : "{ success : true, message }"
Server->>Helper : "spawn 两阶段重启"
Server->>Server : "延迟关闭旧进程"
else "npm 失败或超时"
NPM-->>Server : "错误或超时"
Server-->>Client : "{ success : false, error }"
end
图表来源
章节来源
POST /api/shutdown
- 用途:关闭 Agent 服务。
- 认证策略:
- 本机来源(
127.0.0.1、::1、localhost)免认证。 - 远程来源需要 Bearer Token。
- 本机来源(
- 防重入与限流:同其他 agent 操作。
- 成功响应:
success: booleanmessage: string,表示正在关闭
- 行为:
- 写入
.stopped标记阻止 autostart 自动拉起。 - 延迟 200ms 后执行优雅关闭。
- 写入
章节来源
配置管理端点
Agent 的配置管理主要通过以下接口实现:
POST /api/config/workdir
- 用途:切换工作目录。
- 认证:需要 Bearer Token。
- 请求体:
workdir: string,支持~展开、MSYS 路径规整、绝对路径校验。
- 成功响应:
success: booleanworkdir: string,最终工作目录allowedPaths: array<string>message: string
- 安全规则:
- 禁止设置为 Agent 系统目录本身。
- 自动创建目录。
- 将新 workdir 加入
allowedPaths(只增不减)。
POST /api/config/allowed-paths/remove
- 用途:从允许访问路径列表中移除某个目录。
- 认证:需要 Bearer Token。
- 请求体:
path: string,需为绝对路径。
- 成功响应:
success: booleanallowedPaths: array<string>message: string
- 安全规则:
- 禁止移除当前工作目录。
- 跨平台路径比较。
关于 /api/config/get、/api/config/set、/api/config/lang
- 在 Agent HTTP 路由中未定义这三个精确路径。
- 实际配置读取通过
loadConfig()获取,配置持久化通过saveConfig()写入。 - 语言设置通过各子模块的
set*Lang方法同步,CLI 层支持--lang与环境变量AI_HELPER_LANG。 - 若需要统一配置接口,建议以现有
/api/config/workdir和/api/config/allowed-paths/remove为基础扩展,而不是假设已有/api/config/get、/api/config/set、/api/config/lang。
章节来源
日志查询端点
GET /api/logs/query
- 用途:查询审计日志。
- 认证:需要 Bearer Token。
- 请求参数:
limit: number,单次最多 500 条。category: string,可选分类过滤。
- 行为:
- 默认查询最近 7 天的日志。
- 合并多日结果并按时间倒序排序。
- 成功响应:
success: booleanentries: array,日志条目数组total: number,匹配总数dates: array<string>,查询涉及的日期列表
GET /api/logs/dates
- 用途:获取可用日志日期列表。
- 认证:需要 Bearer Token。
- 成功响应:
success: booleandates: array<string>,按日期命名的日志文件名对应的日期列表
flowchart TD
Start["收到 /api/logs/query"] --> ParseParams["解析 limit 与 category"]
ParseParams --> BuildDates["构建最近 7 天日期列表"]
BuildDates --> LoopDays["遍历日期查询日志"]
LoopDays --> Merge["合并 entries 并截断到 limit"]
Merge --> Sort["按 timestamp 倒序排序"]
Sort --> Return["返回 { success, entries, total, dates }"]
图表来源
章节来源
通用错误响应格式
除明确说明外,多数接口遵循以下结构:
- 成功:
success: boolean- 业务字段随接口不同而变化
- 失败:
success: booleanerror: string,人类可读错误消息
- HTTP 状态码常见含义:
- 200:成功
- 400:参数无效或业务校验失败
- 401:缺少 Token
- 403:Token 无效或权限不足
- 409:操作进行中或冲突
- 429:频率过高
- 500:内部错误
- 503:RAG 依赖不可用
章节来源
依赖关系分析
graph LR
Status["/api/status"] --> Platform["PLATFORM_INFO"]
Status --> SearchTools["getSearchToolsAvailable()"]
Status --> RAGDetect["isRagAvailable()"]
Heartbeat["/api/heartbeat"] --> Auth["verifyToken()"]
Heartbeat --> Response["{ success, time }"]
Restart["/api/agent/restart"] --> Cooldown["OPERATION_COOLDOWN_MS"]
Restart --> Spawn["spawn _restart-helper"]
Restart --> Shutdown["shutdown()"]
Update["/api/agent/update"] --> NPM["npm install -g"]
Update --> Spawn
Update --> Shutdown
ShutdownAPI["/api/shutdown"] --> LocalCheck["remoteIp 检查"]
ShutdownAPI --> WriteStopped["写入 .stopped"]
ShutdownAPI --> Shutdown
LogsQuery["/api/logs/query"] --> Logger["queryLogs()"]
LogsDates["/api/logs/dates"] --> GetDates["getLogDates()"]
图表来源
- agent/src/server.js#L487-L500
- agent/src/server.js#L550-L603
- agent/src/server.js#L605-L720
- agent/src/server.js#L502-L535
- agent/src/server.js#L1705-L1725
- agent/src/logger.js#L183-L228
章节来源
性能与监控指标
关键性能约束
- 请求体大小限制:200MB,防止超大 JSON 导致内存压力。
- 上传大小限制:
- 普通上传:200MB。
- 流式上传:同样 200MB,但走流式写入,不一次性占满内存。
- 搜索结果上限:单次搜索最多 5000 条。
- 日志查询上限:单次最多 500 条。
- 操作冷却时间:10 秒,防止 DoS 与重复重启/更新。
- npm 更新超时:90 秒,超时后终止 npm 进程树。
系统监控指标
从 /api/status/detail 可获取以下指标:
resourceUsage.memoryUsedMBresourceUsage.memoryTotalMBresourceUsage.memoryRssMBresourceUsage.uptimeSecondsresourceUsage.cpuUserresourceUsage.cpuSystemrunningProcessessearchToolsragAvailable
这些指标适合接入外部监控系统,用于观察 Agent 进程稳定性、内存泄漏趋势、CPU 占用和 RAG 依赖状态。
章节来源
运维脚本与自动化集成
常用 CLI 命令
ai-helper-agent start:前台启动。ai-helper-agent start --background:后台启动。ai-helper-agent stop:停止服务。ai-helper-agent restart:重启服务。ai-helper-agent status:查看运行状态。ai-helper-agent update:检查并更新到最新版本。ai-helper-agent config:查看当前配置。
健康检查脚本示例
bash
#!/usr/bin/env bash
HOST="127.0.0.1"
PORT=18910
ENDPOINT="http://${HOST}:${PORT}/api/status"
for i in $(seq 1 16); do
if curl -sf "$ENDPOINT" > /dev/null; then
echo "Agent is healthy."
exit 0
fi
sleep 0.5
done
echo "Agent health check timed out."
exit 1停止服务脚本示例
bash
#!/usr/bin/env bash
HOST="127.0.0.1"
PORT=18910
curl -s -X POST "http://${HOST}:${PORT}/api/shutdown" || true
sleep 1
ai-helper-agent status自动化部署集成建议
- CI 中可使用 GitHub Actions 或类似流水线启动 Agent,轮询
/api/status直到健康。 - 发布新版本时,先调用
/api/agent/update,再轮询/api/status确认新版本就绪。 - 若更新失败,应回滚到上一个稳定版本并告警。
- 对于容器化部署,建议使用进程管理器(systemd、Docker、Kubernetes)管理 Agent 生命周期,并结合
/api/shutdown优雅退出。
章节来源
- agent/bin/agent.js#L287-L300
- agent/bin/agent.js#L302-L384
- agent/bin/agent.js#L386-L433
- agent/bin/agent.js#L435-L525
- agent/bin/agent.js#L686-L745
故障排除指南
常见问题与定位方式
- Agent 无法启动
- 检查端口是否被占用。
- 查看 CLI 输出与 PID 文件。
- 使用
ai-helper-agent status确认是否运行。
- 健康检查超时
- 确认
/api/status可达。 - 检查防火墙、代理、浏览器扩展来源限制。
- 确认
- 心跳失效
- 确认扩展端是否持有有效 Token。
- 检查
/api/heartbeat是否返回 200。
- 重启或更新失败
- 检查 10 秒冷却时间。
- 查看 npm 更新日志与超时错误。
- 确认没有 RAG 安装任务并发。
- 日志查不到
- 确认认证 Token。
- 检查日志目录是否存在。
- 使用
/api/logs/dates查看可用日期。
- 配置切换失败
- 确认 workdir 是绝对路径。
- 确认不是 Agent 系统目录。
- 检查
allowedPaths是否正确更新。
日志定位
- 审计日志位于用户目录下,按天分割。
- 可通过
/api/logs/query查询最近 7 天日志。 - 分类包括:认证、文件、命令、安全、系统。
- 控制台输出在前台模式下可见。
章节来源
- agent/bin/agent.js#L635-L653
- agent/src/server.js#L2155-L2163
- agent/src/logger.js#L7-L12
- agent/src/logger.js#L183-L228
结论
本参考文档覆盖了系统管理 API 的核心能力:健康检查、心跳检测、服务重启、版本更新、服务关闭、配置管理、日志查询。Agent 的安全模型强调最小权限、本机豁免、Token 认证、操作冷却与互斥。运维侧应结合 CLI、HTTP 接口和审计日志建立完整的监控、部署与排障流程。