张大妈

踩坑三周,我终于把 Claude Code 和 Codex 塞进了浏览器——一个让手机也能写代码的疯狂想法

源自今日头条:opendotnet

01-17 13:45

将强大的 AI 编程助手如 Claude Code 和 Codex 集成到浏览器中,使其摆脱命令行限制,实现在手机平板等移动设备上随时随地写代码。该项目解决了流式输出、会话管理、移动端适配等核心难题,为移动编程提供了全新可能。

踩坑三周,我终于把 Claude Code 和 Codex 塞进了浏览器——一个让手机也能写代码的疯狂想法智能速览

  • 通过Web界面驱动后端AI编程助手,实现移动端编码。

  • 选用Blazor Server,利用SignalR长连接完美支持流式输出。

  • 采用适配器模式,统一处理Claude Code与Codex的输出差异。

  • 利用IndexedDB结合防抖技术,高效管理本地会话历史。

  • 通过持久化进程模式,显著降低交互延迟提升体验。

  • 针对移动端进行优化,解决触摸区域和虚拟键盘布局问题。

踩坑三周,我终于把 Claude Code 和 Codex 塞进了浏览器——一个让手机也能写代码的疯狂想法精华内容

将强大的 AI 编程助手塞进浏览器,让移动端也能写代码,这背后涉及了复杂的技术选型与架构设计,每一步都是为了解决一个具体的痛点。

技术选型

项目的核心难点在于如何实时呈现 AI 工具的流式输出。传统的 REST API 轮询或 WebSocket 方案要么体验不佳,要么状态管理复杂。最终选择了 Blazor Server,其内置的 SignalR 长连接可以即时将服务端数据推送到浏览器,实现了几乎无延迟的流式渲染。

Blazor Server 模式下,UI 渲染在客户端,核心逻辑在服务端执行,完美契合了本项目需求。因为 Claude Code 和 Codex CLI 需要访问文件系统和执行命令,这些操作在浏览器沙箱中无法完成,而 Blazor Server 恰好能让服务器充当“大脑”,浏览器仅作为显示界面。

统一差异

Claude Code 和 Codex 的输出格式截然不同,前者是 stream-json,后者是 JSONL。为了统一处理,项目引入了适配器模式,定义了 `ICliToolAdapter` 接口,将不同工具的输出解析、参数构建、会话ID提取等操作封装在各自的适配器中。

这种设计使得扩展新工具变得简单,只需新增一个适配器类即可。例如,针对 Claude Code 特有的 `TodoWrite` 工具,专门做了 UI 优化,将 JSON 格式的待办列表转换为可视化的勾选状态,极大地提升了信息的可读性。

会话管理

为了保证会话的连续性和用户隐私,项目选择了浏览器端的 IndexedDB 来存储会话历史,而非服务端数据库。这既减少了服务器压力,也避免了用户对话被留存的风险。

在 Blazor Server 中,通过 IJSRuntime 调用预先封装好的 JavaScript 函数来操作 IndexedDB。针对流式输出会触发频繁写入的问题,引入了防抖技术:设置 500ms 的延迟,只有当输出停止后才会执行保存操作,从而将写入频率从每秒数十次降低到一两次,显著提升了浏览器性能。

进程管理

调用 CLI 工具存在两种进程管理模式:一次性进程和持久化进程。一次性进程模式每次交互都需重新启动,加载耗时可达数秒,体验很差。因此项目采用了持久化进程模式,进程在后台保持运行,后续交互通过标准输入传递指令,实现了毫秒级的响应速度。

持久化进程的挑战在于如何判断一轮输出是否结束。方案是采用“超时检测”,如果连续 2 秒没有新的输出,就认为本次回答结束。这个 2 秒的阈值是经过多次调优得出的平衡点,既能避免 AI 思考过程中的误判,又不会让用户等待过久。

移动适配

移动端适配是项目的关键目标之一。布局上,将桌面端的左右分栏改为小屏幕的上下堆叠,并增加了折叠预览区的按钮。交互上,严格遵循 Apple 人机界面指南,确保所有触摸目标的最小尺寸为 44x44 像素,并添加了按下缩放和背景色变化的反馈效果。

针对 iOS Safari 虚拟键盘弹出导致 100vh 计算错误的问题,通过 JavaScript 动态获取视口高度并设置为 CSS 自定义属性,再用 `calc(var(–vh, 1vh) * 100)` 代替 `100vh`,完美解决了页面布局错乱的问题。

工作区隔离

为确保不同会话间的文件系统隔离,项目为每个会话创建了独立的工作目录。在启动 CLI 进程时,将其工作目录设置为该隔离目录,这样 AI 生成的所有文件和执行的操作都被限制在各自的沙盒中。

此外,还实现了后台清理服务,自动删除超过 24 小时未访问的工作区,防止磁盘空间被无限占用。所有文件操作都进行了路径校验,通过对比文件绝对路径与工作区路径,有效防范了路径穿越攻击,确保了系统的安全性。

这个项目成功地将复杂的命令行工具转化为易用的Web应用,打破了编程场景的物理限制。它不仅是一个技术实践的缩影,更预示着未来开发工具向云端化、移动化演进的趋势,下一个突破点会在哪里?

内容由AI生成
0
扫一下,分享更方便,购买更轻松
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

最新文章 热门文章