Focus Any 2.2.0 已经放出来了。三个变化最值得看:模型列表多了能力图标,组件资源可以运行时下载,SDK 命令行补上了诊断和透传命令。
如果你在模型设置页面对着一长串模型名发愁,这次能省点眼了。
117 个预置模型,能力标签直接摆在名字右边
打开模型设置,每个模型右侧会出现小图标。👁️ 代表支持视觉识别,也就是能看图;🔧 代表支持工具触发,也就是 Function Calling。
覆盖面是 117 个预置模型,OpenAI o 系、GPT-4o、Claude、Gemini、DeepSeek、智谱 GLM-4/4V、通义千问、Yi 这些主流系列都在里面。自己添加自定义模型时,能力标签可以手动勾选,不必等官方预设。
这条链路不是只做在界面上。后端 llm List Models 接口新增了 model Caps 返回字段,组件端通过 $mapi.llm List Models() 也能拿到每个模型的能力标识。类型定义、IPC 透传、前端渲染,整条路是打通的。

Asset API:大文件别再往包里塞
组件需要带大尺寸文件时,以前只有两条路。要么直接打进部署包,包体积直线上升;要么在插件里自己写一套下载逻辑,超时、断点、半成品文件都得自己兜。
v2.2.0 新增了 Asset API,核心调用是:
流程是先把文件下载到临时目录,下载完成后再原子地移动到组件目录。这个顺序有个实际好处:下载中途断了,组件目录里不会留下一个看起来存在、实际不完整的文件。
配套接口覆盖了资源全生命周期:asset.exists 判断存在性,asset.delete 负责清理,asset.progress 提供带实时进度的追踪。
实现层面,主进程 asset 模块用 fetch 加 Readable Stream 做流式写入,Abort Controller 处理超时,进度数据放在内存里,查询是毫秒级的。
这里有个坑要提醒:按需下载意味着组件首次运行时依赖网络。如果你的使用场景是内网离线环境,或者对首次启动耗时敏感,仍然建议把关键资源随包分发,把 Asset API 当作补充而不是唯一来源。

npx focusany 多了两个命令
npx focusany cli 用来定位本机安装的 Focus Any CLI 二进制,找到之后把参数原样透传过去。
查找优先级是固定的:–cli 参数 > FOCUSANY_CLI 环境变量 > PATH > ~/.focusany/bin > dist-cli/。
所以下面这两种写法都能正常工作:
npx focusany cli plugin list
npx focusany cli doctor
另一个命令是 npx focusany status,一键诊断本地环境。它会检查桌面应用是否安装、CLI 二进制位置、数据目录、HTTP 服务是否在运行。任何一项不通过,退出码就是非 0。
这一点对 CI 很友好。把 status 塞进流水线的前置步骤,环境没准备好直接失败,不用等后续步骤报出一堆看不懂的错误再回头排查。
查找逻辑封装在 sdk/bin/find-focusany.ts 里,做了跨平台处理:Windows 上找 .exe,macOS 上搜 /Applications 和 homebrew 路径,Linux 下查 AppImage。

组件调试和消息格式的零散更新
SDK 新增了组件调试断言函数:assert No View Errors、assert No Main Errors、assert No External Requests。写组件自测时,可以直接断言渲染进程无报错、主进程无报错、没有意外的外部请求发出。
Electron 主进程新增了 console-message 采集,同时加了 /api/debug 调试接口。
LLM 后端这边,llm Chat 和 llm Chat Json 的消息格式开始支持 image_url 图片和 tools / tool Choice 参数,返回结果支持 tool Calls 解析。多模态和工具调用在消息层面对齐了。

版本节奏
翻一下历史版本能看出这条线的演进方向。
v2.1.0 做了 CLI 全面升级,支持组件管控与 MCP 触发,同时调整了 macOS 授权引导策略,快捷面板加了防误触。
v2.0.0 是事务流引擎的发布版本,带来自动化调度、定时任务、事件触发。
到 2.2.0,重点落在能力标识的可视化和资源分发上。已经在用 Focus Any 的,可以打开模型设置看看手头模型带了哪些标签。