新闻详情

新闻详情

首页 / 资讯中心 / 详情

自托管 GitHub 三审修复机器人 robomp:以 omp RPC 为内核的 Issue 自动化处理架构与实践指南

发布时间:2026/9/12 6:02:15来源:尧图网络
自托管 GitHub 三审修复机器人 robomp:以 omp RPC 为内核的 Issue 自动化处理架构与实践指南
自托管 GitHub 三审修复机器人 robomp以 omp RPC 为内核的 Issue 自动化处理架构与实践指南【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi本指南以 oh-my-pi 仓库中 python/robomp/AGENTS.md 为主体结合 robomp 的源码、配置、容器编排与测试系统讲解这个自托管 GitHub 分流修复机器人triage-and-fix bot的完整架构它如何把omp --mode rpc作为子进程驱动如何从 Webhook 到修复 PR 走完一条可靠、可恢复、可审计的数据流以及开发者如何在本仓库中配置、运行、测试与扩展它。读完本文你将掌握 robomp 的事件路由、会话续跑、工作区沙箱、双容器信任边界与全部ROBOMP_*配置项并能在自己的仓库中复刻这套Issue 进来、PR 出去的自动化闭环。项目定位GitHub 上的分流-修复自动化层robomp代码位于 python/robompREADME 见 python/robomp/README.md是一个自托管的 GitHub 分流修复机器人。它把 oh-my-pi 的 CLI 编码代理omp以omp --mode rpc模式作为子进程拉起针对每一个被允许处理的仓库allowlisted repository中新打开的 Issue 执行如下闭环分类Issueclassify打标签apply labels按分类分支处理bug/documentation→ 复现reproduce→ 修复fix→ 提交 PRquestion→ 单条评论回答enhancement/proposal→ 一条有思考的评论invalid/duplicate→ 一条简短评论。后续的 Issue 评论和 PR review 评论会恢复同一个 omp 会话resume the same omp session让 Agent 保留此前的推理上下文。编排器orchestrator即使在中途重启dispatcher 也会通过每个 Issue 独立的session_dir以omp --continue恢复同一会话——被中断的任务从先前的推理处继续而不是从头再来。整个编排器是一个运行在 Docker 内的单 FastAPI 进程事件状态由 SQLite 持久化。说明本文中的omp即 oh-my-pi 本体提供的编码 Agent其 RPC 服务端由omp-rpcPython 包封装见 python/robomp/pyproject.toml 的依赖声明omp-rpc0.1.0。端到端数据流从 Webhook 到 omp 子进程AGENTS.md 将整体数据流概括为一条流水线Webhook → durable queue → async dispatcher → per-issue git worktree → omp RPC subprocess host tools逐环节拆解如下与源码一一对应POST /webhook/github— 使用GITHUB_WEBHOOK_SECRET做 HMAC-SHA256 校验实现于 python/robomp/src/server.py 与 python/robomp/src/github_events.py 的verify_signature。签名错误返回401——这样 GitHub 会停止重试而不是持续轰炸 5xx。github_events.route()决定处理方式— 返回triage_issue/handle_comment/handle_pr_conversation/handle_review/handle_release_ci/cleanup_workspace/skip之一。Bot 自己产生的事件*[bot]后缀、user.type Bot、或配置的bot_login会被丢弃workflow_run的发布判定release verdicts在 Bot 账号守卫之前就被路由——因为修复推送使用的是 Bot 账号详见 python/robomp/src/github_events.py。db.record_event()持久化— 以X-GitHub-Delivery作为去重键执行INSERT OR IGNORE重复投递的事件被静默忽略端点返回202。queue.WorkerPool._dispatch_loop消费队列— 在BEGIN IMMEDIATE事务下原子认领statequeued的行并用进程内_inflight集合以issue_key为键做去重。Issue 工作按 Issue 串行化发布工作按仓库串行化键为repo#release。并发上限为ROBOMP_MAX_CONCURRENCY默认 8。实现见 python/robomp/src/queue.py。sandbox.SandboxManager.ensure_workspace()产出工作区— Issue 工作区位于/data/workspaces/owner__repo__n/repo分支为确定性的farm/8hex/slug格式make_branch实现于 python/robomp/src/sandbox.py分支名由 Issue 标题哈希 净化后的 slug 组成。ensure_release_workspace()则复用owner__repo__release/repo在默认分支上使用按 tag 区分的会话。tasks.*dispatcher 组装TaskInputs并调用worker.run_task()— 以cwdworktree、持久的session_dir、随机挑选的任务适配模型池拉起omp --mode rpc。若session_dir/*.jsonl已存在则以--continue恢复见 python/robomp/src/worker.py 的_has_prior_session与_run_rpc_blocking。子进程内双工具面— Agent 使用 omp内置工具read / edit / write / bash / lsp全部限定在工作区内与host_tools.py中的主机工具python/robomp/src/host_tools.py这是唯一被允许改动 GitHub 或写入审计记录的表层。终态落库— 成功 → 事件statedone异常 →statefailed并在events.last_error记录脱敏后的 traceback。无论成败_inflight槽位都会被释放。从源码看事件路由细节route()是整条管线的大脑它最值得注意的决策逻辑包括仓库白名单仓库不在ROBOMP_REPO_ALLOWLIST中直接skipworkflow_run事件仅在action completed、release sentinel 已启用、运行分支是默认分支或v数字开头的 tag 分支、且 head commit 消息以ROBOMP_RELEASE_COMMIT_PREFIX默认chore: bump version to开头时才排队为handle_release_ciIssue 事件opened/reopened触发triage_issueclosed触发cleanup_workspace回收工作区不消耗用户配额评论事件普通 Issue 评论 →handle_commentBot 自己的 PR 上的会话评论 →handle_pr_conversation外来 PR 的会话评论目前被有意忽略PR review comment →handle_reviewPR 事件opened/reopened/ready_for_review触发 PR review受ROBOMP_PR_REVIEW_ENABLED开关控制closed触发清理Directive指令机制维护者bot提及extract_mention用词边界感知的正则剥离提及、以及ROBOMP_REVIEWER_BOTS中配置的 review bot如 chatgpt-codex-connector的评论会被解析为权威指令directive连同parse_pragmas解析出的 pragma如model/thinking覆盖项一起传给 Agent只有仓库 OWNER 或ROBOMP_MAINTAINER_LOGINS中的账号才有directive_authorizes_impl权限见is_implementation_authorizer。会话持久化与断点续跑--continue的完整链路robomp 最关键的可靠性设计是一次中断、无缝续跑每次任务在session_dir位于工作区下.omp-session/写入 omp 的 JSONL 会话转录下次任何事件到达同一 Issue 时worker._has_prior_session()检查到*.jsonl即给RpcClient追加--continue参数python/robomp/src/worker.py编排器重启时db.reset_stuck_running()把遗留在running状态的行翻回queuedWorkerPool.start()重新入队python/robomp/src/queue.py被中断的 Agent 从转录恢复优雅关闭Phase B遵循ROBOMP_SHUTDOWN_DRAIN_TIMEOUT_SECONDS25s排水 ROBOMP_SHUTDOWN_KILL_TIMEOUT_SECONDS5s强杀的分段策略compose 中stop_grace_period: 30s恰好覆盖两者被关闭中断的行故意保留running以便下次启动时自动恢复而不是误标failed。任务还有完成提醒机制当triage_issue一轮结束后若bug/documentation分类尚未触及终态工具gh_open_pr/mark_unable_to_reproduce/abort_task见_TERMINAL_TRIAGE_TOOLS驱动会向同一会话注入最多ROBOMP_TASK_COMPLETION_MAX_REMINDERS默认 2次你还没开 PR请继续的提示工作区残留未提交改动时也会注入dirty_state_reminderpython/robomp/src/worker.py。工作区沙箱与权限模型SandboxManagerpython/robomp/src/sandbox.py负责克隆池clone pool与每个 Issue 的 worktree 生命周期共享克隆池位于/data/workspaces/_pool/owner__repo/远程相关操作clone / fetch / push全部走可插拔的GitTransport抽象——进程内LocalGitTransport或经 HMAC RPC 转发的ProxyGitTransport见robomp.proxy_client每个 Issue 一个 worktree分支farm/8hex/slug后续事件在同一分支上追加修改一个 Issue 至多一个 PR四类磁盘所有权区工作区树单属主slot UID/GID、克隆池多 slot 共享root:ompsetgid02770、语言工具缓存/data/cache/{cargo,cargo-target,rustup,bun-cache}多 slot 共享、Agent HOME 模板/srv/agent-home只读root:rootslot 隔离root 进程内按需创建omp-N槽位用户UID 2001 起Agent 子进程以userslot_uid, groupslot_uid, extra_groups[omp]运行slot 回收时扫描/proc清理遗留进程_reap_slot防止上一个任务的残留进程观察到下一个任务凭证脱敏所有 git 子进程输出、日志、审计行经redact_credentials()将https://user:pwhost改写为https://***hostpython/robomp/src/git_ops.py 的GitCommandErrorworker._SCRUBBED_ENV_KEYS进一步保证GITHUB_TOKEN、GITHUB_WEBHOOK_SECRET、ROBOMP_REPLAY_TOKEN、ROBOMP_GH_PROXY_HMAC_KEY绝不进入 Agent 子进程环境python/robomp/src/worker.py工作区缓存回收每次任务后剥离node_modules与工作区私有 bun 缓存ROBOMP_RECLAIM_WORKSPACE_CACHEStrue把磁盘占用上界从打开的 Issue 数降为并发数。双容器信任边界robomp 编排器与 gh-proxydocker-compose.ymlpython/robomp/docker-compose.yml定义了两个容器、一个信任边界的部署形态robomp— FastAPI SQLite 事件队列 WorkerPool在/data/workspaces/的 per-issue worktree 中运行omp。持有 HMAC 密钥从不持有 PATgh-proxy— 位于internal: true的内部网络上的兄弟容器持有GITHUB_TOKEN校验 robomp 发来的 HMAC 签名请求执行 REST 与git push仅对api.github.com出站。关键安全设计compose 服务故意不用env_file:而是用每服务的显式environment:白名单确保.env中的GITHUB_TOKEN只进入 gh-proxy 容器编排器到 gh-proxy 的每次请求带 HMAC-SHA256 签名±30s 时钟偏差窗口 常量时间比较hmac.compare_digestgh-proxy不映射任何宿主机端口外部网络default只用于访问api.github.comgit push在 gh-proxy 内通过git -c http.extraheader…走临时进程环境变量传 token.git/config中的 remote URL 永不含凭证GitHub 认证模式互斥_validate_proxy_or_patpython/robomp/src/config.py拒绝同时设置GITHUB_TOKEN与ROBOMP_GH_PROXY_URL ROBOMP_GH_PROXY_HMAC_KEY也拒绝只设 URL 不设密钥或两者皆空。配置参考全部ROBOMP_*环境变量配置由 python/robomp/src/config.py 的 pydantic-settingsSettings模型加载ROBOMP_*前缀权威清单在 python/robomp/.env.example。下表覆盖核心项及其默认值变量默认值作用GITHUB_WEBHOOK_SECRET必填Webhook HMAC-SHA256 校验密钥须与 GitHub 仓库 Webhook 配置一致ROBOMP_BOT_LOGIN必填Bot 账号的小写裸提及句柄生产为roboomp不带/[bot]启动时归一化大小写、空白与常见变体ROBOMP_GIT_AUTHOR_NAME/ROBOMP_GIT_AUTHOR_EMAIL必填Bot 提交的作者身份gh_push_branch拒绝推送任何不含该身份的分支提交ROBOMP_REPO_ALLOWLIST必填逗号分隔的owner/repo白名单ROBOMP_MAINTAINER_LOGINS空可选除 OWNER 外可授权实现工作的维护者登录名逗号分隔、大小写不敏感、可选ROBOMP_REVIEWER_BOTS空可选其评论被当作权威指令的 Bot 登录名无需bot提及ROBOMP_GH_PROXY_URL/ROBOMP_GH_PROXY_HMAC_KEY必填gh-proxy 模式编排器访问 gh-proxy 的地址与共享 HMAC 密钥openssl rand -hex 32生成GITHUB_TOKEN必填PAT 模式单进程 PAT 模式与 gh-proxy 模式互斥ROBOMP_MODELanthropic/claude-sonnet-4-6单个模型 id 或逗号分隔的模型池每个任务均匀随机挑选pick_model()id 须与挂载进容器的models.yml即宿主~/.omp/agent/models.container.yml匹配ROBOMP_PROVIDER空可选 provider 覆盖传给omp --providerROBOMP_THINKINGhigh思考级别off/low/medium/high源码另支持xhigh/maxROBOMP_MAX_CONCURRENCY8并发认领上限ROBOMP_TASK_TIMEOUT_SECONDS2400单轮任务超时另有ROBOMP_TASK_TIMEOUT_HARD_GRACE_SECONDS60硬超时宽限ROBOMP_REQUEST_TIMEOUT_SECONDS120omp RPC 单次请求超时ROBOMP_EVENT_MAX_RETRIES3瞬时失败事件自动重试次数退避计划ROBOMP_EVENT_RETRY_DELAYS_SECONDS30,120,600带 ±20% 抖动防全群同步重放ROBOMP_RATE_LIMIT_WINDOW_SECONDS/_DEFAULT/_CONTRIBUTOR/_UNLIMITED3600/3/10/ 空按提交者 GitHubauthor_association分层限流OWNER/MEMBER/COLLABORATOR 与 unlimited 名单自动豁免ROBOMP_QUESTION_AUTOCLOSE_ENABLED/_HOURS/_SCAN_SECONDStrue/4/60question 回答后附加 保持开启提示作者未在时限内 则自动关闭为state_reasoncompleted后续评论或外部关闭会同步取消排期ROBOMP_RELEASE_SENTINEL_ENABLEDfalse默认关闭的发布哨兵release sentinel开启前需订阅Workflow runs事件并给 PAT 加Actions: ReadROBOMP_RELEASE_COMMIT_PREFIXchore: bump version to识别发布提交的前缀ROBOMP_RELEASE_MAX_ROUNDS5修复轮次上限ROBOMP_RELEASE_TASK_TIMEOUT_SECONDS3600控制每轮可选ROBOMP_RELEASE_MODEL独立选择发布模型池否则回落到ROBOMP_MODELROBOMP_PR_REVIEW_ENABLEDtrue是否启用 PR reviewROBOMP_ISSUE_INDEX_SYNC_SECONDS900本地 Issue/PR 搜索索引SQLite FTS 镜像的 GitHub 周期调和间隔0关闭调和器ROBOMP_NATIVES_CACHE_ENABLED等truepi-natives 构建产物硬链接缓存按 git tree-hash 键控避免每个工作区重复编译ROBOMP_RECLAIM_WORKSPACE_CACHEStrue每任务后回收依赖缓存ROBOMP_SHUTDOWN_DRAIN_TIMEOUT_SECONDS/_KILL_TIMEOUT_SECONDS25/5优雅关闭排水/强杀窗口两者之和必须低于 composestop_grace_periodROBOMP_OMP_COMMANDomp容器内 omp 可执行文件镜像自带/usr/local/bin/ompshimROBOMP_WORKSPACE_ROOT/_SQLITE_PATH/_LOG_DIR/data/workspaces//data/robomp.sqlite//data/logs容器内固定路径ROBOMP_BIND_HOST/ROBOMP_BIND_PORT0.0.0.0/8080Webhook 接收地址ROBOMP_REPLAY_TOKEN空可选启用POST /replay的令牌留空禁用调试提示.env同时被两种方式读取——docker compose做${VAR}插值配合每服务显式 allowlist以及本地 CLI 的Settings加载器务必二选一填写模式块。开发命令从源码运行到 Docker 内环任务运行器统一为 monorepo 根 package.json 的bun配方robomp:*命名空间robomp 自身不再携带package.json# 本地 venv无需 docker bun run robomp:install # pip install -e python/robomp[dev] # 测试 bun run test:py # pytest -x python/omp-rpc/tests python/robomp/tests bun run robomp:test:integration # ROBOMP_INTEGRATION1要求 omp 在 PATH 上 # 宿主机直跑编排器 bun run robomp:serve # python -m robomp serve # Docker 内环 bun run pi:image # 构建 oh-my-pi/pi:devpi 变更时重建 bun run pi:run # docker run -it oh-my-pi/pi:dev冒烟测试 shim bun run robomp:build # pi:image如 pi 变更 docker compose build bun run robomp:dev # build up -d 跟随日志 bun run robomp:up / robomp:down / robomp:restart / robomp:logs bun run robomp:rebuild # docker compose build --no-cache bun run robomp:reset # down -v 并删除 pi 镜像 # 前端Vite SolidJS位于 python/robomp/web bun run robomp:web:dev # vite dev server代理到 :8080 bun run robomp:web:build # 产出 src/static/ 静态包 bun --cwdpython/robomp/web run check:types # tsc --noEmit容器内 CLIconsole scriptrobomp→ python/robomp/src/cli.py 的robomp.cli:main没有根别名直接调用docker compose --project-directory python/robomp exec robomp robomp triage owner/repo#N docker compose --project-directory python/robomp exec robomp robomp replay delivery_id docker compose --project-directory python/robomp exec robomp robomp status docker compose --project-directory python/robomp exec robomp robomp cleanup owner/repo#NHTTP / sqlite / webhook 检查同样无别名curl http://localhost:${ROBOMP_BIND_PORT:-8080}/{healthz,readyz,events,issues} docker compose --project-directory python/robomp exec robomp sqlite3 /data/robomp.sqlite首次部署流程来自 python/robomp/README.mdcp python/robomp/.env.example .env openssl rand -hex 32 # ROBOMP_GH_PROXY_HMAC_KEY openssl rand -hex 32 # GITHUB_WEBHOOK_SECRET bun run pi:image # 一次性构建 oh-my-pi/pi:dev bun run robomp:build bun run robomp:up curl -fsS http://localhost:8080/healthz镜像分层设计使构建失效范围可控只改 robomp 的 Python 只触及运行时层改 pi 源码才重建oh-my-pi/pi:devrobomp 的 Dockerfile.robomp 通过FROM ${PI_BASE}继承默认oh-my-pi/pi:devtoolchain 全部来自 pi-base本文件不重复。PI_ROOT默认指向上级 oh-my-pi 检出构建上下文与/work/pi只读挂载仅在不同 checkout 时覆盖容器内路径恒为/work/pi。代码规范与工程约定AGENTS.md 的 Code Conventions 章节定义了仓库级的硬性约定均可对照源码验证Python ≥3.11容器为 3.12-slim公共函数强制类型注解默认from __future__ import annotations不可变值类型用dataclass(slotsTrue, frozenTrue)如github_client.IssueInfo、sandbox.Workspace、db.EventRow异步风格FastAPI 处理器与queue.WorkerPool是 async而worker.run_task必须保持同步并在工作线程中执行omp-rpc是阻塞的CLI 命令用asyncio.run包装配置pydantic-settingsSettingspython/robomp/src/config.py统一经cache单例get_settings()访问测试改动 env 后必须调用reset_settings_cache()依赖注入Settings、Database、GitHubClient、SandboxManager显式注入create_app()/WorkerPool/ToolBindings除get_settings/get_database两个单例访问器外没有模块级全局变量状态唯一真源是 SQLitedb.Databaseevents、issues、releases、tool_calls四张表release 行流转awaiting_ci → fixing → green → failed → superseded内部_lock保证线程安全BEGIN IMMEDIATE处理认领竞争内存态只有WorkerPool的_inflight错误处理自定义异常族GitHubError带retry_after、GitCommandError、InvalidIssueRef、RpcCommandError错误字符串严禁包含带凭证的 URL日志结构化 JSONlogging_config.JsonFormatterlogger.info(event, extra{...})注意不要与_RESERVED键冲突configure_logging()只配置一次主机工具范式每个工具由按任务构建的ToolBindings闭包组成经_audit()写入tool_calls审计审计只见 Agent 提供的参数永不见内部凭证新工具遵循校验参数 → 调GitHubClient/SandboxManager→ 返回结构化 dict → 审计的固定流程命名Python 全 snake_case模块名单数名词测试文件test_module.py测试函数test_action_condition提示词编辑src/prompts/*.md变量用{{path.to.field}}解析在persona._lookup提示词随包作为数据文件安装pyproject.toml的package-data新增提示词无需其他注册。关键文件速查文件职责python/robomp/src/server.pyFastAPI 应用/webhook/github、/healthz、/readyz、/events、/issues、/releases、手动 triage/replay 端点、/仪表盘python/robomp/src/queue.pyWorkerPooldispatcher 与_inflight串行化、重试、优雅关闭python/robomp/src/tasks.pyIssue/PR 处理器 handle_release_cicleanup_workspacepython/robomp/src/worker.py同步 omp RPC 驱动、提示词组装经persona、模型挑选、env 清洗python/robomp/src/host_tools.pyIssue/PR 工具 release_ci_status/release_job_log/release_retag/abort_taskpython/robomp/src/sandbox.py克隆池 Issue/release 工作区生命周期、slot 权限、凭证脱敏python/robomp/src/github_client.py类型化 httpx 客户端含 Actions、tag、GitHub Release 读取python/robomp/src/github_events.py路由与 HMAC 校验python/robomp/src/db.pySQLite schema 与 events/issues/releases/tool_calls 的 DAOpython/robomp/src/config.pySettings模型与get_settings()python/robomp/src/cli.pyClick CLIserve/triage/replay/status/cleanuppython/robomp/src/dashboard.py/单页 HTML 仪表盘python/robomp/pyproject.toml打包 pytest 配置asyncio_mode auto、testpaths、Ruff 规则发布哨兵Release Sentinel默认关闭的 CI 修复器当ROBOMP_RELEASE_SENTINEL_ENABLEDtrue时完成的workflow_run事件驱动一个默认关闭的发布哨兵python/robomp/src/tasks.py 的handle_release_ci在可复用的main工作区中诊断失败的发布 CI原子推送修复提交与既有发布 tag在下一个 verdict 上恢复同一会话直到每次运行与 GitHub Release 都变绿。细节规则只有 head commit 主题以ROBOMP_RELEASE_COMMIT_PREFIX开头、且运行分支为默认分支或v版本tag 的 completed 运行才参与匹配远端 tag 已不再指向该运行 SHA 的过期事件被忽略cancelled/skipped/neutral/ 过期运行不阻塞收尾只有在所有运行均无阻塞性结论且存在非 draft 的 GitHub Release 时才进入green。终态有意不在 GitHub 上发言——通过仪表盘 Releases 表、GET /releases?limitN或robomp status检查。release_retag是唯一的终端工具负责原子推进main与 tag。测试与质量保障框架pytestasyncio_mode autopython/robomp/pyproject.tomlHTTP 模拟统一用httpx.MockTransportrespx虽在 dev 依赖中但库内不使用新测试应保持同一风格Fixturespython/robomp/tests/conftest.pyenv通过monkeypatch设置全部必需ROBOMP_*变量并前后调用reset_settings_cache()settings触发ensure_paths()db提供隔离的tmp_path/test.sqliteDatabase隔离规则任何用monkeypatch.setenv改 env 的测试必须reset_settings_cache()以失效cache的单例get_settings()异步测试test_github_client.py与test_host_tools.py用后台线程中的自定义事件循环桥接同步风格测试与异步客户端新测试优先 pytest-asyncioauto模式async def test_*Mock 原则绝不 patch 内部实现HTTP 用httpx.MockTransport注入测试替身存储用db/tmp_pathfixturessandbox 测试用本地真实 bare 仓库充当 upstream集成测试python/robomp/tests/test_worker_smoke.py 由ROBOMP_INTEGRATION1门控pytestmark.skipif需要omp在PATH上默认的bun run test:py不会启用它它会在httpx.MockTransport的 GitHub 与本地 bare 仓库之上拉起真实omp --mode rpc覆盖率预期当前约 80 个单元测试含控制流分支的新代码需要测试覆盖新 host 工具至少要有一条 happy path 一条校验失败路径对照test_host_tools.py断言可观察效果DB / HTTP 请求而非字面字符串或默认配置值。安全态势小结GITHUB_TOKEN只存在于 gh-proxy 容器编排器若在自己的环境中看到GITHUB_TOKEN会拒绝启动见 python/robomp/src/cli.py 的_require_proxy_mode编排器 → gh-proxy 为 HMAC-SHA256 签名±30s 偏差窗口、常量时间比较坏的 webhook 签名返回401让 GitHub 停止重试绝不返回 5xx推送前门禁gh_push_branch分支必须匹配工作区分支、工作树必须干净、origin/default..HEAD上每个提交都必须携带ROBOMP_GIT_AUTHOR_NAMEROBOMP_GIT_AUTHOR_EMAILAgent 在git commit -m a\n\nb中写死的 shell 字面\n转义会被改写为真实换行仅消息树/身份/日期保留开 PR 前门禁gh_open_pr仓库定义了脚本时先跑bun run fix任何 diff 并入 Agent 的 HEAD 提交不产生独立style:噪音提交再跑bun check最后跑完整bun run test1 小时预算任一步失败都以RpcCommandError返回给 Agent 迭代且不创建 PRskip_checkstrue可绕过三者但绕过动作会记录在tool_callsgh_open_pr还强制校验 PR 正文包含## Repro/## Cause/## Fix/## Verification四个标题以及Fixes/Closes/Resolves #N引用。常见问题排查症状检查项401 invalid signatureGITHUB_WEBHOOK_SECRET与仓库 Webhook 配置不一致容器报PI_ROOT … missing容器内/work/pi挂载为空宿主机应从python/robomp/运行 docker composePI_ROOT默认../..或导出指向有效 oh-my-pi checkout 的PI_ROOTgit push: Authentication requiredBot PAT 缺 push 权限或ROBOMP_BOT_LOGIN未对应 PAT 账号的提及句柄生产为roboomp不带/[bot]refusing to push: commit author identity mismatch存在非ROBOMP_GIT_AUTHOR_*身份的提交错误会列出 SHAgit commit --amend --reset-author --no-edit修复refusing to push: working tree is dirty有未提交的 Agent 编辑或直接调用gh_open_pr它会自动提交bun run fix的输出bun check failed before PR creation修复报错后重试gh_open_prrefusing to open PR: \bun run test failed before open PR| 仓库默认分支套件为红修复并提交若失败在改动前已存在可用skip_checkstrueFailed to load pi_natives架构不符或缺 nativebun run pi:image后bun run robomp:buildNo API key found for provider~/.omp/agent/models.container.yml挂载缺失或 provider id 与ROBOMP_MODEL不匹配结语robomp 把事件路由、会话续跑、工作区沙箱、双容器隔离、全量审计组装成一个可自托管的 GitHub 自动化闭环而其内部每一步——HMAC 校验、BEGIN IMMEDIATE认领、--continue恢复、slot 权限模型、host-tools 审计——都能在 oh-my-pi 仓库的源码与测试中找到对应实现。若你想让某类 Issue 在自家仓库里自动完成分类 → 复现 → 修复 → PR本文给出的架构拆解、配置清单与开发命令已足以支撑你完成部署与二次开发。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

算法练习入门:从基础题到高效解题方法论 2026/9/12 6:41:19

算法练习入门:从基础题到高效解题方法论

1. 算法练习的价值与入门路径作为一名计算机专业的大一新生,我最初接触算法时完全摸不着头脑。直到在LeetCode上刷了三个月题后,才真正理解算法练习的核心价值——它本质上是在训练我们"将现实问题抽象为计算模型"的能力。这种能力不是靠死记硬…

阅读更多 →
Fumadocs Windows ESM 加载报错全解析:ERR_UNSUPPORTED_ESM_URL_SCHEME 三步快速修复指南 2026/9/12 6:41:19

Fumadocs Windows ESM 加载报错全解析:ERR_UNSUPPORTED_ESM_URL_SCHEME 三步快速修复指南

Fumadocs Windows ESM 加载报错全解析:ERR_UNSUPPORTED_ESM_URL_SCHEME 三步快速修复指南 【免费下载链接】fumadocs The beautiful & flexible React.js docs framework. 项目地址: https://gitcode.com/GitHub_Trending/fu/fumadocs 如果你在 Windows …

阅读更多 →
camofox-browser:基于Firefox的深度隐私定制与反指纹实战指南 2026/9/12 6:41:19

camofox-browser:基于Firefox的深度隐私定制与反指纹实战指南

camofox-browser 这个名字我第一次看到的时候,第一反应是:好家伙,这是要把火狐套上一身迷彩。后来我实际用下来发现,它确实就是干这个的——一套基于 Firefox 深度定制的隐私增强方案,核心思路是把浏览器暴露给网站的“…

阅读更多 →
3步修复LSP启动命令cmd:nvim-lspconfig实战指南 2026/9/12 6:41:19

3步修复LSP启动命令cmd:nvim-lspconfig实战指南

3步修复LSP启动命令cmd:nvim-lspconfig实战指南 【免费下载链接】nvim-lspconfig Quickstart configs for Nvim LSP 项目地址: https://gitcode.com/GitHub_Trending/nv/nvim-lspconfig 这篇文章解决配置 nvim-lspconfig 时最常见的一类问题:语言…

阅读更多 →
authentik llms.txt 生成器源码解析:MDX 转义导入路径(`\_esc-note.mdx`)的识别、解转义与 partial 内联 2026/9/12 6:41:19

authentik llms.txt 生成器源码解析:MDX 转义导入路径(`\_esc-note.mdx`)的识别、解转义与 partial 内联

authentik llms.txt 生成器源码解析:MDX 转义导入路径(\_esc-note.mdx)的识别、解转义与 partial 内联 【免费下载链接】authentik The authentication glue you need. 项目地址: https://gitcode.com/GitHub_Trending/au/authentik 导…

阅读更多 →
芯片设计全流程解析:从RTL到物理实现 2026/9/12 6:38:19

芯片设计全流程解析:从RTL到物理实现

1. 芯片设计基础与行业背景芯片设计作为计算机科学与自动化领域的核心课程,是现代信息技术产业的基石。从智能手机到数据中心,从物联网设备到人工智能加速器,几乎所有电子设备的核心都离不开芯片的支持。当前全球半导体产业规模已突破5000亿美…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞