轻量级开源项目将AI代码审查自动化集成到git hooks,降低代码审查门槛和工作流摩擦。
你好,我是 Maneshwar。我在开发 git-lrc,一个在每次提交时运行的微型 AI 代码审查工具。它是免费的且开源的,托管在 Github 上。请为 git-lrc 点个星来帮助开发者发现这个项目。也欢迎你试用它并分享反馈。
嘿。坐下来。我想告诉你今年我经历过的最愚蠢的几小时调试,以及最后它如何让我对一个叫 clasp 的命令行工具产生了奇怪的好感。
这是使用场景。我自己开发了一个叫 ProfileKit 的 Chrome 插件。
它运行在 LinkedIn 个人资料页面上,抓取有用的信息(名字、职位、所在公司)。很简洁,很个人化的工具。
然后我想要再添加一个功能:"保存个人资料"按钮。
在一个个人资料上点击它,这个人就会被添加到我用来跟踪的大 Google Sheet 中该公司所在的行里。
每家公司多个个人资料,没有重复,一切都自动同步。
好主意。但现在我的小爬虫需要一个后端。
我不想为一个每天可能只运行二十次的副业项目去搭建服务器。
Shrijith 给我建议,可以把一个 Google Apps Script Web App 变成一个免费的 API,用 Google Sheet 充当数据库。
从插件端看,接线方式是这样的:
// background.js
fetch(SHEET_SYNC_URL, {
method: "POST",
body: JSON.stringify(message.payload),
redirect: "follow",
})
.then((res) => res.text())
.then((text) => sendResponse({ ok: true, data: JSON.parse(text) }))
.catch((err) => sendResponse({ ok: false, error: err.message }));
而在另一端,一个 Apps Script doPost 会把潜在客户匹配到公司行并添加它。
免费的托管,免费的认证(理论上),免费的数据库。
下面大概是当它运行正常时,包括重定向的整个握手流程:
那个重定向到回显 URL 的舞蹈是 Apps Script 对每个响应都会真实执行的操作。
我第一次在网络标签中看到它时,我以为某些东西坏了。
它并没有坏。只是 Google 在作妖。
先说个小 bug,作为背景:我最初的"保存潜在客户"逻辑是按名称匹配潜在客户和公司。
文本像"EmpInfo"对比"EmpInfo, Inc.",或者职位标题恰好说的内容。
含糊不清,脆弱,偶尔很搞笑。
我通过在你点击公司页面上的"搜索相关人员"时捕获公司实际的 LinkedIn URL,并用那个 URL 作为真实的钥匙而不是基于感觉的字符串匹配,来修复它。很好,很稳固,很无聊的修复。
然后我重新部署了更新的 Apps Script 代码,一切都崩溃了。
每一次同步尝试都以 401 失败。
不是"你的代码有 bug"。
不是"列找不到"。
一个平坦的、没有个性的 401,直接来自 Google 的基础设施,在我的代码甚至还没有运行之前。
我大约检查了四遍部署设置。就在那儿,大得不能再大:谁有权访问:Anyone。
Anyone。它说 Anyone。我像盯着欠我钱的东西一样盯着那个词。
结果他们并不是同一张图。
在幕后,在控制部署的实际清单中,设置是:
"webapp": {
"executeAs": "USER_DEPLOYING",
"access": "ANYONE"
}
而在 Google 的 API 中,ANYONE 悄悄意味着"任何登录了 Google 账户的人"。不是匿名。不是 curl 请求。不是我的插件的 fetch() 调用,它携带零个 Google session cookie,因为为什么要携带呢。
实际上意味着"公众,无需登录,完全陌生人,机器,什么都可以"的设置是一个完全不同的值:ANYONE_ANONYMOUS。
所以 UI 说"Anyone",API 有两个不同风格的 anyone,只有其中一个实际上是 anyone。
这就像一个房东的房产列表说"宠物友好",然后你发现那意味着一条金鱼,还要监督。
修复它,并用一个简单的请求确认:
curl -s "$DEPLOY_URL" -w "\n%{http_code}\n"
# {"ok":false,"error":"Use POST"}
# 200
一个真实的响应。来自一个陌生人。匿名地。如宣传所述,最后。
这是真正值得写这篇文章的部分。
每次我修复 Apps Script 文件中的某些内容,运送它的工作流是:打开 web 编辑器,手动粘贴代码,点击"部署",点击"管理部署",切割新版本,复制新的 /exec URL,转身粘贴到我的插件的 background.js 中,碰撞清单版本,重新加载插件,刷新每一个打开的 LinkedIn 标签页。
为了改一行代码。
我这样做了足够多次,最后我才大声问出来:难道没有一个包可以做这个。
它叫 clasp,Google 自己的 Apps Script 命令行工具,它让你可以直接从你的终端推送代码、切割版本和管理部署。
npm install -g @google/clasp
clasp login # one-time OAuth in your browser
clasp clone <scriptId>
实际上解决我的 URL 变换问题的部分是这个标志:
clasp deploy -i <existingDeploymentId> -V <newVersionNumber>
这会将现有的部署更新为指向一个新版本,就地更新。
同样的部署 ID,同样的 /exec URL,永远。
每次我修复一个错字时,不再需要复制粘贴一个新的 URL 到插件中。
所以我把推送、版本和重新部署包裹到一个脚本和一个 make 目标中:
make apps-script-deploy MSG="fix lead matching"
就这样。现在这是整个发布过程。
下面大概是前和后的样子:
Chrome 插件通过 Apps Script Web App 与 Google Sheet 通话并不是严肃的架构。
我想要澄清这一点。
它也完全免费,不需要服务器,不需要数据库,不需要认证系统,而且我花了一个晚上来接线。
对于一个少数人(一个人,我自己)一天使用几十次的个人工具,那个权衡是很棒的。
只要知道清单中隐藏的一个坑,也许在需要它之前而不是在三小时 401 之后就保持 clasp 的安装。
clasp 是由 Grant Timmerman 开发的,他在 Google Workspace 的时间基本上是从零开始为 Apps Script 发明开发者故事,包括这个 CLI。
几年后,它仍然悄悄地为构建 Sheets 和 Docs 附加组件的人处理大量流量。
如果你曾经把一个插件或脚本接线到 Google Workspace,你很可能从中受益过而不知道这是他的工作。
当这篇文章发布时给他适当的标签,他值得这份信用 :)
Grant Timmerman 的网站
免责声明:这篇文章是由我写的;AI 被用来修复语法和改进可读性。
AI agents 可以快速写代码。它们也悄悄地移除逻辑、改变行为并引入 bug —— 没有告诉你。你经常在生产中才发现。
git-lrc 修复了这个。它集成到 git commit 中,在每一个 diff 落地前审查它。60 秒安装。完全免费。
欢迎任何反馈或贡献者!它是在线的、开源的,并准备好供任何人使用。
在 Git Commit 上运行的免费、微型 AI 代码审查
| 🇩🇰 Dansk | 🇪🇸 Español | 🇮🇷 Farsi | 🇫🇮 Suomi | 🇯🇵 日本語 | 🇳🇴 Norsk | 🇵🇹 Português | 🇷🇺 Русский | 🇦🇱 Shqip | 🇨🇳 中文 | 🇮🇳 हिन्दी |
在提交时运行的免费、微型 AI 代码审查
现在的 GenAI 是一辆没有刹车的赛车。它加速很快 —— 你描述一些东西,大块代码瞬间出现。但 AI agents 悄悄地打破东西:它们移除逻辑、放宽约束、引入昂贵的云调用、泄露凭证、改变行为 —— 没有告诉你。你经常在生产中才发现。
git-lrc 是你的制动系统。它集成到 git commit 中,并在每一个 diff 落地前运行 AI 审查。60 秒安装。完全免费。
简短地说,git-lrc 帮助防止中断、泄露和技术债务在它们发生之前
一目了然:10 个风险类别 · 100+ 失败模式追踪 · 每一个提交……
有些评论可能仅对已登录的访客可见。登录查看所有评论。
如需进一步操作,你可以考虑屏蔽此人和/或举报滥用。