打开VSCode,搜索"SQLite",安装最热门的那个插件。然后在终端里跑一条命令:find node_modules -type d | wc -l。你会看到200到500个不等的依赖包,外加各平台绑定的原生代码——而这一切,只是为了读取一个.db文件。

这种荒诞感在xz-utils后门事件后变得具体。当一个编辑器的插件能访问你的完整工作区——源代码、环境变量、git凭证——每一次安装都是一次信任押注。过去两年,被攻陷的VSCode扩展确实向数千名开发者推送过凭证窃取器。威胁从来不是理论。

打开网易新闻 查看精彩图片

所以我做了一个能自己审计的替代品。

它叫Atalaya,西班牙语"瞭望塔"之意。 shipped的.vsix文件里只有一个运行时依赖:sql.js,即官方SQLite的WebAssembly编译版本。没有node-gyp,没有平台特定编译,没有网络调用、遥测或远程资源加载。webview采用严格CSP策略(default-src 'none'加每次加载的加密nonce),所有SQL标识符经白名单校验,所有值通过预编译语句绑定。MIT协议,总共约2300行代码。

功能上,它打开.db、.sqlite、.sqlite3文件作为自定义编辑器。支持分页浏览任意表、类型感知着色、可排序表头、按列过滤;Query标签页可用Ctrl/Cmd+Enter执行任意SQL;双击单元格内联编辑,Enter保存至内存,Cmd+S写入磁盘;通过VSCode原生编辑栈实现撤销重做;任意表或查询结果可导出CSV或JSON。对视图、无主键表、BLOB列自动降级为只读——UI在无法安全编辑时主动避让。

SQL编辑器的自动补全是手写原生JS实现,约250行。拒绝引入Monaco Editor意味着省下约5MB的不可审计代码。补全逻辑限定在已引用表的列:FROM、JOIN、INTO、UPDATE后提示表名;SELECT、WHERE、AND、OR、ON、逗号、左括号后提示列名。方向键导航,Enter/Tab插入,Esc关闭,Cmd+Enter执行查询——弹窗从不拦截快捷键。没有别名解析,没有语法高亮。这就是目的:你能读完每一行。

查询结果的反馈也经过设计。任何修改数据的操作——INSERT、UPDATE、DELETE——执行后显示受影响的行数;SELECT返回行数与耗时;错误以红色横幅呈现,附带SQLite原始错误码。没有模态对话框打断,没有静默失败。

安装方式有两种:从Open VSX或GitHub Releases下载.vsix后手动安装;或添加Open VSX为扩展源后搜索安装。代码在GitHub公开,每次发布的.vsix作为附件附带SHA256校验值。

这不是对现有插件的功能超越。它的自动补全更简陋,没有ER图可视化,不支持多表连接的智能提示。但当你用find node_modules -type d | wc -l对比时,数字会说明一切:2300行对数万行,一个依赖对数百个依赖,可审计对不可审计。

在供应链攻击成为常态的开发环境里,"能自己看一遍"或许是一种被低估的功能。