2026 OpenClaw 前端實戰:
遠端 Mac 網關合併 Oxlint 與 Biome 機讀報告,產出單一門禁摘要並回傳 PR 評論
人群:已在倉庫導入 Oxlint 與 Biome,希望 CI 與審閱端只看一份合併敘事的前端團隊。做法:在 Git 託管旁部署 OpenClaw 網關(常與 Apple Silicon 遠端 Mac 同網段),讀取兩份 JSON、套用閾值與截斷,再冪等寫回 PR。若你仍平行維護另一條「雙機讀報告」管線,可對照站內網關合併雙份 JSON 的姊妹篇;本稿刻意改走 Rust 系工具 關鍵字,避免與該文 SEO 用語重疊。落地前可複習Biome 與 TypeScript 增量檢查對照,以及權杖範圍化的自動化摘要。
00 HowTo:可複現步驟
每一台工作者(含租用的遠端 Mac)跑同一套指令,網關才能假設檔案形狀穩定;請勿在 CI 與本機混用不同主版本鎖檔。
- 安裝與 CI 相同的 Node 主版本;Oxlint/Biome 二進位由套件鎖定,不在網關上「即時升級」。
- 產物落盤:
mkdir -p .openclaw/reports後執行oxlint . --format=json > .openclaw/reports/oxlint.json,以及biome check . --reporter=json > .openclaw/reports/biome.json(子目錄參數可自訂,但兩檔相對路徑須寫死)。 - 流水線把兩檔與
GIT_SHA、PR_NUMBER、選填BASE_REF一併 POST 給網關;網關只做讀檔、合併、判定,不重跑掃描以省時。 - 網關輸出
rust_ts_lint_gate.json與人讀pr_lint_gate_summary.md,依閾值設定離開碼,並呼叫 Git 供應商留言 API。 - 若同倉還有瀏覽器任務,階段排序可參考Playwright 分片與聚合,把輕量靜態分析放在較前段。
01 閾值與預算表
建議把政策寫進倉庫內 YAML,由網關載入;下列數字為常見起點,可依團隊速率調整。
| 訊號 | 硬擋(門禁失敗) | 軟預算(例) |
|---|---|---|
Oxlint error 計數 |
> 0 | — |
Biome error 級診斷 |
> 0 | — |
兩工具 warning 合計 |
— | 預設分支 ≤ 40;hotfix 可暫升到 80 並附理由標籤 |
| PR 摘要 Markdown 行數 | — | ≤ 100,末行註明「已截斷」與 CI 產物路徑 |
| 可選 LLM 補述 | — | ≤ 800 token,且不得覆寫機讀計數 |
路徑鍵一律扣掉克隆根目錄前綴,否則不同 Runner 上的絕對路徑會讓「最差檔案榜」抖動。
02 網關合併骨架(示意)
實際解析需對照你所用的 Oxlint/Biome JSON 版本欄位;下方展示「讀檔、正規化、累加」的最小結構,版本號請寫死為 rust_ts_lint_gate/v1 供下游消費。
// tools/merge-rust-ts-lint-gate.mjs — 於 OpenClaw 網關執行
import { readFile, writeFile } from "node:fs/promises";
const root = process.env.REPO_ROOT ?? "";
const rel = (p) => (p && p.startsWith(root) ? p.slice(root.length + 1) : p);
const ox = JSON.parse(await readFile(".openclaw/reports/oxlint.json", "utf8"));
const bio = JSON.parse(await readFile(".openclaw/reports/biome.json", "utf8"));
const rows = [];
/* 依實際 schema 迭代:oxlint 診斷列、biome diagnostics 等 */
for (const d of ox.diagnostics ?? []) {
rows.push({ tool: "oxlint", file: rel(d.filename), severity: d.severity });
}
for (const d of bio.diagnostics ?? []) {
rows.push({ tool: "biome", file: rel(d.file_path ?? d.filePath), severity: d.severity });
}
const gate = {
version: "rust_ts_lint_gate/v1",
errors: rows.filter((r) => r.severity === "error").length,
warnings: rows.filter((r) => r.severity === "warn" || r.severity === "warning").length
};
await writeFile(".openclaw/reports/rust_ts_lint_gate.json", JSON.stringify(gate, null, 2));
補齊規則分組與「最差檔案」後,再把 Markdown 模板與 JSON 一併交 PR 流程;下游若只吃結構化欄位,提示詞可縮到數百 token。
03 可選:與 OpenAI 相容客戶端串聯
網關在寫入評論前,可把 rust_ts_lint_gate.json 以 POST 送到內部相容 OpenAI 的 /v1/chat/completions(或公司統一閘道轉發)。System 提示應要求「三句Executive summary、不得捏造檔名、不得改寫計數」,User 內容只附 JSON 與允許的截斷片段。回傳文字寫入 pr_lint_gate_summary.llm.md,與機讀 JSON 分檔,避免 LLM 覆蓋門禁真相來源。
04 PR 評論與禁寫事項
延續 OpenClaw 慣例:以 HTML 註解雜湊做冪等鍵,先查機器人既有留言再 PATCH。公開評論內不要嵌入需組織登入的私有預覽網址;改指向公開文件或「CI 執行編號+產物鍵」。
當 Oxlint 與 Biome 的 JSON 契約固定,並在 OpenClaw 網關單點合併,PR 端即可用一則敘事交代總量與熱點規則;可選再串 OpenAI 相容端點濃縮給主管看,而不影響門禁數字。承載網關的 Apple Silicon 遠端 Mac 亦易與 Safari/WebKit 冒煙並列維運。
站內導覽:首頁、幫助中心、購買/租用(免登入)、技術見解索引。