定义
目前 windbell 是一个 local web app, 也就是用 Web 技术构建, 但主要运行在用户设备本地, 而不是依赖远程服务器的应用。
问题
与一般的本地应用相比,这样做很费事, 因为每个提供服务的函数, 需要被打包成 http api, 然后再从 http api 打包成前端的 api client。
相当于为了实现某个功能, 除了这个功能本身的代码之外, 还要实现额外的两层代码包裹。
这样实现的优点是, 在电脑上跑的程序, 可以在手机上打开网页使用。
方案
生成代码
「每个服务函数都要包成 HTTP API,再包成前端 client」, 是手写 REST 风格的典型代价。 某些工具可以将额外代码变成声明式或自动生成, 而不是两套手写代码。
基于文件系统
首先可以假设 local app 所需要的所有「本地服务」, 都是通过「修改本地的文件」来实现的, 可以暴露出 fs 的 http api, 然后所有服务都基于这个 api 来写, 这样服务代码就是可以在前端调用的了。
但是,并不是所有服务都可以通过「修改本地的文件」来实现的, 比如在实现 agent tool call 时,我们需要运行 bash 脚本。 但是这也许也可以有一个统一的 http api 层。
实验结果
经过实验,用跨网络的 http-fs + 依赖注入, 直接在前端实现服务相关的代码。 经常会产生「1 + N 问题」, 如果用 batch 操作来避免了「1 + N 问题」, 访问一个页面也会发很多请求。
对于 web app 来说, 就算是 local web app, 也需要 backend for frontend 来做聚合。
所以对于 local web app 来说, 这完全是错误的方案。
但是「明确核心业务逻辑使用依赖的能力是什么」, 这件事还是有价值的,可以帮助我们理解代码。