Oh My OpenCode 实战体验
我还没有过多地讨论 SaferPDF.com 的技术细节,但它是一个源于对隐私优先 PDF 工具的特定需求的项目。然而,从架构上看,它的维护难度相当大。这是一个混合架构:Hugo 静态网站负责营销和 SEO,而 React 单页应用 (SPA) 则使用 WebAssembly 在浏览器中处理实际的 PDF 文件。
这种双文件夹架构在性能方面表现出色,能够“兼顾两者的优势”,但添加功能却很繁琐。它需要通过构建时桥接来处理 React 资源,这些资源会被编译、哈希处理,然后通过自定义的 post-build.js 脚本注入到 Hugo 模板中。
为了测试能否实现这种自动化,我使用了 Oh My Open Code 进行测试。我让它从零开始构建一个全新的 PDF 合并功能。
1、什么是 Oh My OpenCode?
如果您熟悉开发者生态系统,那么您可能听说过 OpenCode。Oh My OpenCode 是构建在 OpenCode 之上的一个专门的编排层。
虽然标准工具可能难以处理独立的代码库和复杂的构建脚本,但 Oh My OpenCode 使用模块化的工作流程来处理这些负载。它将专门的任务分配给不同的流程:一个流程负责架构规划,一个流程负责编写 React 逻辑,另一个流程负责管理构建时集成。这使得它们可以并行处理同一个项目。
2、安装
如果您拥有 OpenCode CLI,运行起来非常简单:
- 安装 OpenCode:
curl -fsSL https://opencode.ai/install | bash - 添加 Oh My 插件:设置好 Claude 或 Gemini 的 API 密钥后,注入编排器:
bunx oh-my-opencode install - 启动:在项目目录中运行 opencode,让代理开始索引您的项目结构。
3、挑战:代码库结构
PDF 合并功能的难点不在于用户界面,而在于底层架构。该工具必须理解,一个功能要上线,就必须经过多个层级:
- React 源代码:创建 src/main-merge.jsx 文件,
- 与 Ghostscript WASM 逻辑集成。
- Vite 配置:注册新的入口点,以便打包器生成专用的 merge.[hash].js 文件。
- 桥接器:更新 post-build.js(我的自定义集成脚本),使其识别新的哈希值并将其复制到 Hugo 目录。
- Hugo 内容:在 /content/english/merge/index.md 创建一个新的 Markdown 页面,其中包含正确的 React 根 div 和动态注入的脚本标签。
4、实际性能:90 分钟内处理 50 万个令牌
我给编排器的任务是:“创建一个单独的页面来添加 PDF 合并功能,并遵循现有的构建流程。”
仅用了 1.5 小时,该工具就消耗了 50 万个令牌(比 Claude Code 或类似工具消耗的令牌更少)。它在这段时间内思考了两个文件夹和两个 Git 仓库之间的关系,确保 React 源代码的更改不会破坏 Hugo 的部署。
5、成功之处
深厚的架构意识:它不仅仅是编写代码;它理解了我的文件夹和代码仓库之间的关系。它正确地识别出需要同时修改 Vite 配置和 Hugo Markdown 文件。
提交规范:它完美地管理了特性分支和提交,在准备就绪之前将工作与主站点隔离。
速度:通常需要我花一下午时间手动调试路径的问题,现在只需一次监督会话即可解决。
6、不足之处
这并非一次完美的“设置好就不用管”的运行。我遇到了一些技术问题:
API 回退:我在会话中途达到了 Claude Pro 的额度上限。即使我在工具中输入了 Gemini 密钥,它也没有自动切换到 Gemini;我不得不……等待,期间我陪孩子们玩了一会儿。
库逻辑:该工具最初尝试使用 qpdf 进行合并(因为我在其他地方使用了它)。由于 SaferPDF 使用 Ghostscript (gs.wasm) 进行高保真处理,我不得不手动将其引导回现有的库。界面优化:生成的 Tailwind 组件缺少一些图标,需要在上线前进行快速手动修复。
7、最终结论
PDF 合并功能现已上线(快去体验一下)。尽管两个代码库的设置略显繁琐,但 Oh My Open Code 证明了它不仅能完成代码编写,还能驾驭项目的底层架构。如果让我手动编写代码,我估计需要 6-8 个小时,而且由于构建系统的繁琐,我肯定会忍不住爆粗口。
如果您正在处理 PR在某些项目中,添加一个按钮实际上意味着更新三个配置文件和一个构建脚本,这种多代理方法可以显著节省时间。它不再仅仅是编写基础代码;而是拥有一个能够理解你的构建流程的结构化助手。
原文链接:Playing around with Oh My Open Code
汇智网翻译整理,转载请标明出处