SuperAPI AI 工具集

hapi-runner-setup

部署与运维

查看项目

更新于 10-30 08:32

技能介绍

用途:该技能把已有的 HAPI 安装注册或修复为 Linux systemd 用户服务,并提供 Codex 提供商凭据的私有配置方式与运行验证。适用于已有 HAPI 安装、且 systemd 用户管理器可正常工作的 Linux 环境。安装 HAPI、更换提供商、启用开机启动均属于独立选择,只应执行用户明确请求的部分,并保留无关配置与活动会话。

检查环境:先找到已安装的 HAPI 可执行文件并运行 hapi runner --help,确认该安装的前台入口是 runner start-sync 后再用于服务;runner start 会转入后台,不适合作为服务主进程。检查现有用户单元、运行中的 runner、hub URL、workspace-root 参数、工作目录与可执行文件搜索路径,保留显式限制与必需配置。只查看必要的环境变量键,不要导出进程环境、认证文件或含密钥的 systemd 环境值。检查用户的 Codex 提供商配置及其认证来源;交互式 shell 中可用的密钥,不代表 systemd 或已有 Codex 进程能获得它。

注册用户服务:默认使用 ~/.config/systemd/user/hapi-fly-runner.service,除非用户另选名称。按发现的路径与必需环境调整单元模板,验证前替换可执行文件占位符。模板包含 Description、After=network.target、Type=simple、WorkingDirectory=%h、ExecStart=ABSOLUTE_HAPI_EXECUTABLE runner start-sync、Restart=on-failure、RestartSec=3;KillMode=process 与 TimeoutStopSec=30 用于只停止 runner 而保留其 agent 会话;[Install] 使用 WantedBy=default.target。需沿用现有 HAPI_API_URL 与必要的 workspace-root 参数,设置包含 HAPI 的 agent CLI 及其运行时(必要时含 Node)的稳定 PATH,不要复制临时 Codex 路径、会话 ID 或整个当前进程环境,也不要引入改变用户 agent 权限的服务沙箱限制。KillMode=process 会让已生成的 agent 在服务重启后继续存活,该单元不停止整个 agent 进程树;不要添加全局 hapi runner stop 作为 ExecStop,以免停止他人替换的 runner。用 systemd-analyze --user verify 验证单元。迁移非托管 runner 时,准备好配置后使用受支持的 hapi runner stop 命令,再 reload systemd 并启动服务;确认该 HAPI 版本在停止时保留会话。用户要求开机启动时启用单元;检查 loginctl show-user "$USER" -p Linger,免登录开机启动需要 lingering,仅在用户请求范围与权限允许时启用。

私有提供凭据:经授权时,优先复用本地已有密钥且不打印。不可用时让用户通过本地私有方式输入,而非聊天或命令行参数。凭据须存放在仓库之外。仅将所需变量写入 ~/.config/hapi-fly/runner.env,权限 0600,父目录私有,保留其他已有变量;文件须为合法 systemd EnvironmentFile 语法,正确加引号与转义,不使用 export、替换或 shell 命令。凭据不得写入单元的 Environment= 行、进程参数、日志或提交。通过保留现有覆盖的 drop-in 引入:

[Service]
EnvironmentFile=%h/.config/hapi-fly/runner.env

若用户要求 Magpie 配置,在用户级 Codex 配置中设置提供商,保留所选模型与无关配置;示例中的 URL 应替换为本地私有配置中的端点,不要在公开技能中保留真实部署主机名:

model_provider = "magpie"

[model_providers.magpie]
name = "Magpie Gateway"
base_url = "https://gateway.example.com/v1"
env_key = "MAGPIE_API_KEY"
wire_api = "responses"
requires_openai_auth = false

model_provider 应位于 TOML 根部,应合并进现有文件而非追加到其他表或重复已有提供商。环境文件提供 MAGPIE_API_KEY 的私有值,绝不放入技能或仓库。用 systemctl --user daemon-reload 与 systemctl --user restart hapi-fly-runner.service 应用更改。服务托管后,runner 生命周期操作使用 systemctl;hapi runner start 会在 systemd 之外替换 runner。

验证与报告:确认 active/running 状态、服务 MainPID 与 HAPI runner 状态一致、hub 符合预期、按需已启用开机启动,以及此前活动 agent 会话仍存在。检查状态文件前应允许正常初始化,重启期间它可能短暂缺失。在不显示值的前提下确认凭据变量存在于实际 MainPID 环境中;用该进程的凭据向已配置提供商和所选模型发起一个小请求。对 Responses 流式,应要求完成响应并包含预期文本,而非仅 HTTP 200;限制超时与响应大小,不要发送仓库内容作为测试输入。区分网关探测成功与 Codex 会话验证成功:已有 Codex 进程保留启动时配置与环境,需启动全新的 HAPI Codex 会话验证完整路径;不得仅凭配置修改或直接 API 请求成功就声称当前对话已切换提供商。报告服务名、验证结果、待完成的全新会话检查以及状态/日志命令,所有凭据值不得出现在报告中。