记录 Agent 侧栏 / 浏览器功能的每次迭代:日期 · 版本号 · 一句话改版内容(最新在上)。 引擎基线:Firefox 153.0a1(锁定,不追上游)。版本号 = Agent/浏览器功能版本,与引擎基线无关。 追加新版时在表格顶部加一行;同时把
additions/browser/components/agent-sidebar/package.json的version同步到最新版本号。
| 日期 | 版本号 | 改版内容(一句话) |
|---|---|---|
| 2026-07-21 | v0.22.3(补充发布) | 新增 Linux ARM64 安装包:增加 Linux x86_64 主机构建 AArch64 Firefox 的独立 mozconfig、构建脚本与产物校验脚本;发布原生 ARM64 ELF 压缩包并更新 SHA256 校验文件,供 ARM64 Linux / VPS 使用。本次不包含 Docker 镜像。 |
| 2026-07-15 | v0.22.3 | 自定义模型思考等级 + 品牌与 README 指引完善:自定义 OpenAI 兼容端点新增 reasoning_effort 等级选择,默认 auto 不发送字段,显式等级时避开不兼容的 temperature,Anthropic 协议保持隔离;补齐配置持久化、参数归一化、provider/Anthropic/moz.build 回归测试。完善 Firefox-Reverse 新标签页、隐私窗口和 Windows 快捷方式品牌资源,并用当前构建重新截取 Agent 与指纹环境管理界面,增加入口和主要操作编号标记;发布 macOS ARM64、macOS Intel、Windows x86_64、Linux x86_64 四端产物与 SHA256。 |
| 2026-07-13 | v0.22.2 | Intel Mac 发布 + 指纹环境启动就绪修复:新增 x86_64-apple-darwin 独立 mozconfig、Intel Mac(macOS 10.15+)DMG 和 arm64/x86_64 双架构发布流程;DMG 校验增加 Mach-O 架构断言,并新增 macOS ad-hoc 重签重打包脚本。环境打开流程改为在真实 Marionette TCP 握手成功后才写入 running/ready,端口通过 MOZ_MARIONETTE_PREF_STATE_ACROSS_RESTARTS 的 marionette.port 注入,移除无效的 --marionette-port 参数;持续消费子进程输出避免 pipe 回压,UI 启动后不再立刻触发 Windows 全量 tasklist 刷新。新增延迟就绪、进程提前退出、端口注入和输出消费回归测试。 |
| 2026-07-13 | v0.22.1 | Windows 指纹环境管理热修:修复 Subprocess.call 使用裸 tasklist.exe / taskkill.exe 导致 PID 探测恒失败、浏览器已经打开但环境管理误显示“已停止”的问题;系统命令改由 Subprocess.pathSearch() 解析绝对路径,PID 探测升级为 alive/dead/unknown 三态且探测异常不再误写停止;优先使用当前后端保存的进程句柄减少重复 tasklist,端口分配增加 loopback 真实绑定检查,避免多个运行环境复用 Marionette 端口及重复启动卡顿;补齐 Windows 状态、命令解析和多环境端口回归测试并接入一键自测。 |
| 2026-07-06 | v0.22.0 | 新增指纹浏览器修改能力:新增环境管理页与 EnvironmentBackend,支持环境级隔离(一个环境一个 profile + 独立进程)、新建/重命名/打开/关闭/删除/导入 JSON、当前主进程指纹编辑与一键还原;fingerprint.json 支持 Chrome-like/Firefox 桌面参数生成、外部浏览器控制台采集导入、UA/UA-CH/headers/navigator/screen/DPR/locale/timezone/WebGL 等配置;C++ 层新增 FrxFingerprintConfig,启动时读取 MOZ_FRX_FINGERPRINT_CONFIG/MOZ_FRX_FINGERPRINT_JSON 和 profile pref,并覆盖首批 JS/Worker/Header/自动化暴露字段,内容进程通过内联 JSON pref 解决沙箱读外部文件失败;配套 frx-director-mcp 0.3.0 接入环境列表、新建、打开、关闭、导入和 FRX_ENV_ID 启动。 |
| 2026-07-06 | v0.21.1 | 用户反馈热修:Windows run_node 路径兼容 + Ubuntu 工作目录选择兜底。① 修 Windows 已装 Node/nvm 但 run_node 报 PathUtils.join: NS_ERROR_FILE_UNRECOGNIZED_PATH:WorkspaceBackend 统一 Windows 路径规范化(D:/...→D:\...)、补全盘符/UNC 绝对路径判断、PATH 使用 ; 分隔、展开 %NVM_HOME%/%NVM_SYMLINK% 并跳过未展开的注册表 PATH 项,避免无效路径把 PathUtils.join 直接炸出;_mergedPath 不再混入 Unix bin。② 修 Ubuntu/GTK 目录选择器只能点文件时,工作目录被错误绑定为文件路径:若 nsIFilePicker.modeGetFolder 返回文件,则自动取父目录。③ 新增 scripts/selftest-agent-tools.sh 聚合门禁(侧栏 build + providers/LLM 协议 dry-run + ToolRouter/AgentLoop + 会话/线程预留 + workspace 路径安全),并扩展 Windows nvm/PATH 回归自测;本版三端重新打包并做 mac/Linux headless smoke、Windows zip 包内标记校验。 |
| 2026-06-25 | v0.21.0 | 内置 Cookie 管理 API(回应 GitHub issue:增删改 cookie):新增 1 个工具 cookies(action:list 列出 / set 增改 / remove 删除),经引擎 nsICookieManager 直接读写 cookie 存储——含 httpOnly(page_eval 的 document.cookie 拿不到 httpOnly)、可跨域、可管理登录态。remove 支持 name+domain 删单个 / 只给 domain 删该 host 全部 / all:true 清空。纯新增:Backends.sys.mjs 加 inline cookies backend(仿 find,含 list/set/remove + action 分发 run)+ Tools.sys.mjs 加 1 个 action 型工具声明(仿 net_capture),不触碰任何现有工具/backend;expiry 用毫秒(nsICookie 语义,expires 入参为 unix 秒/maxAge 为相对秒,内部转毫秒)、add 后检查 nsICookieValidation.eOK + 读回确认;mutating 故入 CONFIRM_TOOLS。配套 frx-director-mcp 的 agent_tools 目录加 cookies stub。工具数 44→45。★同时:本版起发布【必换 build ID】(rm obj/buildid.h + MOZ_BUILD_DATE 重建),根治「同版 build faster 不换 build ID → 用户重装后 Firefox startupCache 仍跑旧编译代码」(v0.20.0 的 nvm 修复曾因此对已装用户不生效)。真机 marionette 实测:set 一个 httpOnly cookie → list 能看到(httpOnly:true) → remove 删除,往返一致。 |
| 2026-06-15 | v0.20.0 | 引擎工具 raw MCP 直通(让 Claude/Cursor 等强 director 跳过 DeepSeek worker、亲自直调 44 个内置工具——尤其 16 个引擎级逆向工具 signer_trace/jsvmp_trace/closure_read/webapi_trace/whitebox_diff/wasm_probe,页面检测不到)。AgentSession.sys.mjs 纯新增两方法:listTools()(返回工具规格,只读)、callTool(name,args,opts)(用与 agent 同一个全局 ToolRouter+backends 单例 dispatch;ctx 复刻现有 director 路径的 win:null=兜底到活动标签页;不走 confirm——director 即审批者,等同 confirmMode:false;isRunning 安全闸:任一会话运行中即拒绝,避免 raw 调用与 agent 共享同一页面/hook/trace 状态串味)。不动任何现有方法→对现有 agent 流零影响。配套 frx-director-mcp 0.2.0:新增 agent_call_tool(director 直调)MCP 工具——复用 PR#1 已有的 agent_tools 工具目录与跨进程 marionette 仲裁锁,成本拆分由强制改为可选(默认仍可委派 DeepSeek worker 省钱,直驱是可选新增)。真机 marionette + 经 MCP MarionetteBridge.callTool 端到端实测:列全工具、page_eval/page_navigate/fs_读写/net_capture/run_node/code_search/skill_get 经 callTool 全部跑通。(2026-06-17 同版补丁·覆盖发布)修 macOS/Linux 用 nvm/fnm/volta 装 node 时 run_node/run_python 报「找不到 node」:根因=GUI(Finder/Dock)启动的浏览器继承的 PATH 精简、不含 ~/.zshrc 注入的 nvm 版本化目录(~/.nvm/versions/node/<ver>/bin),而 _resolveExe 的 macOS/Linux 兜底只扫 homebrew/usr-local(Windows 侧早已扫 nvm/fnm/volta、独漏 unix)。修法(WorkspaceBackend.sys.mjs,纯新增):兜底再加两路——① _loginShellPathDirs() 用 $SHELL -lic 取回用户登录 shell 的真实 PATH(与终端 which node 一致,覆盖任意版本管理器)② _versionManagerBinDirs() 扫 nvm(优先 alias/default、按版本降序)/fnm/volta/n/asdf/pyenv/conda;_resolveExe 找到后 _mergedPath 自动把该 bin 目录并入 PATH→npm/npx 同时解决。真机实测:剥离 PATH(=GUI 精简 PATH)启动浏览器,_versionManagerBinDirs 命中 ~/.nvm/.../node、登录 shell PATH 回收成功、run_node 输出 42。 |
| 2026-06-12 | v0.19.2 | 修「切到别的插件侧栏再切回→该会话已在另一个浏览器窗口打开」(用户反馈:Agent 运行中点了下别的插件界面、切回就回不到正在跑的会话)。根因:多窗口隔离的线程预留是个无持有者、无存活性的布尔 reserved——切栏时侧栏文档被异常拆除,React unmount 清理(releaseThread)常跑不成 → 预留泄漏永真 → 同一窗口重挂载时认领不回自己那条,被误判成"别的窗口占用"。改成 owner-token + 心跳 TTL:reservation={owner,ts},acquireThread(ids,owner) 只在「别的 owner 且心跳新鲜(<8s)」才判定真占用,新增 renewThread 心跳续约(活窗口每 3s 一次);面板取每 chrome 窗口稳定 token(topChromeWindow.__frxAgentOwnerToken,切栏重挂载复用同一 token → 立即重认领、不等 TTL),并加 pagehide 即时释放(比 React unmount 更可靠)。三道兜底:同 owner 立即重认领 / pagehide 即时释放 / TTL 过期回收;两个真窗口仍互斥不串对话。dev/selftest-thread-reservation.mjs 9 组算法回归 + 装机 marionette aeval 实测 acquire/renew/release/过期回收。 |
| 2026-06-12 | v0.19.1 | 模型列表动态化 + 自定义端点 URL 容错(用户实测痛点:custom 填错 URL 只报「HTTP 404」无指引;模型列表写死)。① fetchModels 不再死拼 /v1/models:按 baseUrl 形态探测候选路径(带 /v1、/v4 等版本段先试 {base}/models 再 {base}/v1/models,否则反序),兼容 DashScope /compatible-mode/v1、智谱 /api/paas/v4 等非标端点;401/403 直接报「API Key 无效(模型端点已找到)」;全部失败时列出每个尝试的 URL+状态,并提示 Base URL 应为 API 根地址而非文档/控制台页面。② 「获取模型列表」扩展到所有内置 provider(拉取成功用动态列表,内置硬编码列表仅兜底)。③ 自定义端点 chat 路径不再翻倍(baseUrl 已带版本段不再叠 /v1 → 修 /v1/v1/chat/completions 404);误贴完整 /chat/completions、/models 端点自动剥离。对抗评审修正×3:版本段识别扩到 /v1beta 等带后缀形态(Gemini 兼容根 /v1beta/openai 聊天路径不再叠 /v1;只看 path 不看 host)、探测同时带 Bearer+x-api-key+anthropic-version 双鉴权头(Anthropic 官方/同款网关有效 key 不再误报「Key 无效」)、设置页拉取加在途守卫(拉取中切 provider/双击不串列表)。新增 dev/selftest-providers.mjs(24 项 Node 自测;dashscope/deepseek/zhipu 真端点验证探测一次即中) |
| 2026-06-10 | v0.19.0 | (补记,commit aed7a4,三端手动发布)+Kimi/MiniMax/Qwen 三内置 provider(kimi-k2.6 / MiniMax-M3 / qwen3-max,DashScope compatible-mode);MCP 驱动会话可见性(frx-director-mcp 跑的任务进会话列表,面板空闲自动跟随、忙时横幅「外部驱动中」);关闭浏览器时杀 run_node 子进程(治退出残留);run_node 默认超时 30s;Agent 工作目录默认归 firefox-reverse |
| 2026-06-10 | v0.18.0 | 通用能力迭代×7 + 三端发布(doubao/xhs 实战暴露的工具缺口;站点无关/opt-in/默认行为不变,不回归其他站点)。新工具:① crypto_scan(站点无关密码学指纹扫描:一段数据/源码→识别 RC4 256-S-box / XXTEA delta 0x9e3779b9 / MD5·SHA·SM4 IV·K / AES / 自定义 base64 表,免人工暴力扫常量;原本写好但没进 jar.mn+没接 backend=Agent 用不到,本版接通);② closure_read(引擎层 Debugger 读 frame.environment 拿闭包变量真值:运行时解码出的字节码 / RC4 S-box / 常量池,page_eval 够不到的;两步:变量目录→varNames 深序列化)。新模板:jsvmp-const-harvest.js(把 VM 字节码数组包成 logging 容器、收割 GetElem 读出的数据常量=S-box/key/delta/魔数)、wasm-call-logger.js(monkeypatch WebAssembly.instantiate/compile 抓 VM 闭包内 instantiate 的小 WASM)、webpack-chunk-loader.js(多 chunk loadBundles + missingReport 按 require 频次排缺失模块)。修复:net_get 认 id 别名(修"request not found: undefined")、hook preset 加 navigator.sendBeacon、page_eval saveTo 支持非字符串/对象(cycle-safe)。工具数 42→44。本版同时收入自 v0.17.0 起 06-09 一批 dev 修复:code_search 正则容错、page_eval 全权+「hook 日志大法」、hook_inject(document-start 早于页面 JS 注入、跨刷新存活)、SSR 识别、signer_trace 时间盒 120s/argMatch、硬上限批量软化(对强模型转软提示)、dispatcher_probe 兜底(if-else 链/跳转表派发)、「工具硬限制≠此路不通」护栏、AI辅助"必结案"偏置修复。三端 mac dmg/linux tar.xz/win64 zip。commit 37640dc |
| 2026-06-04 | v0.17.0 | 三平台首次正式发布 + modelBudget 上下文按模型窗口缩放(治"Windows 上下文太短"——根因 win/linux release 资产是旧构建、modelBudget=0 卡在 MAX_CONTEXT_CHARS=140000;XL 档 opus/deepseek-v[4-9]/1m = compactAt 800k/maxChars 1000k/resultCap 150k)。三端经构建机交叉编译发布。含 06-03 一批:双模式(全自动 / AI辅助阶段门停,会话级持久化)、wasm_probe signerExpr(闭包里的签名器类/工厂一步拿到、不用手改 glue 导出)、signer_trace 页面 wedge 修复(每帧热回调安全阀改数"总调用"+墙钟无条件自卸)、"写了却读不到文件"修(按 basename 扫子目录找回+回报真实路径)、WASM 早判(搜 2 次没 JS 定义→定型 WASM 转 wasm_probe)、自动化实战 harness(引擎直驱+隔离 profile+temp key)、code_search 字符窗口(单行压缩文件以匹配位置为中心 ±120+col)。tag v0.17.0 |
| 2026-05-29 | v0.16.5 | wasm_disasm(用 wabt 把 .wasm→可读 WAT、保留函数/导出名,完整落 wasm/<名>.wat、只回摘要+导出名→索引;func= 抽指定函数段另存)配 wasm_probe(边界 I/O)= WASM 内部算法+边界依赖都能分析;首次自动 npm 装 wabt。+ 工作目录结构化(治"一堆 js 堆根目录"):scripts/(站点脚本) wasm/(.wasm+.wat) work/(loader/实验) out/(纯算产物) jsvmp//webapi/(trace) .agent-tools/(内部),skill 强制 + 工具自动落对位置 |
| 2026-05-29 | v0.16.2–.4 | 架构级根治长任务卡死:自主回合内上下文压缩 + 阶段 checkpoint 回复(单回合上下文无界增长 O(N²) 是"300s 无响应"真因;超 COMPACT_AT 即 LLM 结构化交接摘要→重建小上下文续跑,UI 上呈现为多条阶段回复,治压缩后兜圈失忆);js_trace(通用非-JSVMP JS 逐函数 AST 插桩 + Node 执行活体 trace,static/instrument/run 三模式);trace ctl per-PID 隔离(多标签/会话各自 .ctl.,不再互相覆盖);trace start 必带 filter(空 filter 全量记录会把标签卡白,硬拒);会话记忆 fix(send 从权威 ConversationStore 读历史、工具轮不丢 reply) |
| 2026-05-28 | v0.16.1 | wasm_probe(wasm-bindgen 签名器 import-trace:node 里加载 glue+.wasm、给 wbg import 套日志 Proxy + 极简 fake DOM,揭示 wasm 在 init/sign 时读了哪些 DOM/env——querySelector/getAttribute/navigator.webdriver/crypto…,(ptr,len) 实参解码成可读选择器/属性名;空跑发现→page_eval 取真值用 selectors 喂回复现)。+ 站点无关红线全仓落实(移除工具/文档/系统提示里残留单站点示例,git 历史 wipe;案例细节绝不硬编码进源码) |
| 2026-05-28 | v0.16.0 | Skill + Harness 化(治"补环境绕圈"+方法论成体系):①内置逆向方法论 skill——content/skill-reverse.md 进 omni(jar.mn),新增 skill_get 工具(SkillBackend 经 NetUtil 读 chrome://)返回全文;系统提示瘦成短核心(红线+两阶段一句话+反绕圈+指向 skill_get,bundle 170→164KB)。方法论新增「Node 可用版以本地实打目标接口返回有效数据为准、抓完整请求当模版逐步剥参数定位真正的门、只逆门其余从浏览器拿(非红线、每站不同)」+「§6 决策树:何时换路线」。②Harness 护栏:AgentLoop 跟踪(工具+错误签名),同类错误≥3 次在结果里注入"换路线"提示(node 自测:跨栈帧同类错归一为同签名、第3次触发)。③Notes 剔除:notes_add 写入去重(同 site+kind 近重复)+每站≤40 条按 kind 优先级+时间淘汰(node 自测:去重→1、封顶40、breakthrough 不被 note 挤掉)。digest 注入早已封顶,故只是整洁/质量优化 |
| 2026-05-28 | v0.15.5 | 修长会话"卡在对话这里"(一个 turn 跑了 ~60 轮后卡住):先用实测排除——jsvmp_query 读 16MB+解析 = 仅 71ms,不是卡顿源;真因是 AgentLoop 把整份 msgs(每轮 assistant+reasoning_content+工具结果,累加不裁)每轮整份重发,~60 轮后 msgs 达 ~493KB→超模型上下文窗→该轮 LLM 卡死。加 trimContext(MAX_CONTEXT_CHARS=120000):超限即裁中间老轮次,保 system+首条 user 任务锚点+最近若干轮,并保持 assistant/tool 配对合法(避免孤儿 tool)、中间插省略提示;两处 client.chat 都过它。node 实测:493KB/122 条→118KB/31 条、配对合法、PASS。8KB 单结果上限(v0.14.0)只管单条、管不住累积+reasoning,本版补上累积上限 |
| 2026-05-28 | v0.15.4 | 流式不显示的真正根因找到并修复:v0.15.0 接 session 时,session: agentSession 加进了 mods 返回对象、AgentPanel 也解构了 session,但 <AgentPanel> 的 JSX 漏传 session={mods.session}→panel 里 session 恒为 undefined→if(session&&router) 永远走 else 兜底分支(buildClient().chat() 无 onDelta=不流式、且无工具!)→自 v0.15.0 起回复都是"跑完一次性显示"。v0.15.1/.2/.3 的节流/flushSync/轮询全作用在从未执行的分支上故全无效。用 marionette 实测 everRunning:false(整轮引擎无运行线程)锁定。修=index.jsx 补 session={mods.session} 一行。教训:加 prop 要同时改 mods、解构、JSX 传参三处;验证必须确认目标代码分支真的被执行(everRunning)。 |
| 2026-05-28 | v0.15.3 | 真正修好流式(v0.15.2 的 flushSync 无效——DOM 实测整轮文本恒定、末尾才跳,flushSync 在跨 realm cb 里抛了被 catch 吞)。根因精确化:引擎在 system 模块跑,订阅回调的 setState 是 system→content 跨 realm 同步调用、且发生在引擎那个"贯穿整轮才结束"的流式任务栈里→React18 把更新推迟到该任务结束才提交。改用内容侧自有定时器轮询(busy 时每 80ms session.getState → setLiveSteps):setState 发生在 content 自己的 timer 任务里(用完即了)→React 正常按拍提交=真流式。删订阅 push 渲染路径;DOM 实测改后流式增长。 |
| 2026-05-28 | v0.15.2 | 真正修好流式(v0.15.1 节流没治本):用 DOM 采样实锤——面板文本整轮停在 808 字、回合结束才跳到 884=完全不增量。根因=订阅回调里的 setState 来自 system 模块跨 realm 同步调用,React18 不当作自己上下文的更新→批量推迟到回合末才提交。修=订阅 running 分支用 flushSync 强制同步提交每次(节流后 ~20/s)更新,token 即刻上屏。结构性/settle 分支不变 |
| 2026-05-28 | v0.15.1 | 修 v0.15.0 引擎挪常驻模块后的流式回退(用户报"不流式了、回复很慢"):根因=引擎在系统模块、onDelta 每个 token 都跨 system→content realm 调一次订阅回调并传整份快照,把内容进程压垮→看着不流式、很慢。AgentSession 加通知节流:高频 delta/reasoning 合并到 ~20 次/秒(NOTIFY_THROTTLE_MS=50,带 trailing 补发),结构性事件(tool/round/confirm/done/error)仍立即广播;done/finally 立即 flush 不丢尾。纯 .sys.mjs 改、bundle 不变→omni 重打包 |
| 2026-05-28 | v0.15.0 | 修「切侧栏→面板重载→正在进行的回复丢失」:根因是 Agent 是 revamp 侧栏的一个工具,切到别的工具再切回会重载 panel.html→content 文档销毁→跑在里面的 runAgentTurn 与流式 fetch 随之而亡,且未落盘的回复不在历史里。把对话引擎挪到常驻系统模块 AgentSession.sys.mjs(父进程、跨面板重载存活):它跑 runAgentTurn(自建持久 client/router)、把流式事件 reduce 成 canonical steps(reducer 从 UI 搬入)、广播给订阅者,done/error 时自己把最终/中断消息落 ConversationStore。AgentPanel 变薄=纯订阅视图:send() 改 session.run(不 await/不 finalize),新增订阅 useEffect 由快照驱动 busy/liveSteps/确认框;mount 时若本线程仍在跑→立刻恢复 steps+busy 并续看(引擎从未中断)。"总是允许"经 session.approveAll 透传。服务器迁 (旧机 sshd 卡死) |
| 2026-05-27 | v0.14.0 | 实战驱动的四项改进:①修 300s「连接超时」根因=上下文膨胀——AgentLoop 把每条工具结果无上限 JSON.stringify 进 msgs、逐轮重发,长逆向会话(page_eval/fs_read 大输出累积)→请求体暴涨→模型 TTFT 超空闲看门狗(300s)一字未回→误报超时/撞上下文窗;给单条结果加 8KB 上限+截断提示(用 fs_read offset/limit 或 code_search 分段,别整块重读),系统提示加「上下文经济」纪律。②指纹落盘 pretty 大对象→行式 NDJSON(fingerprint-env/flow.ndjson,一行一条可 grep/部分读/省 token,摘要仍在工具返回)+ 放可重跑的 analyze-fingerprint.js(写入行式 append、分析交独立脚本、AI 读靠"返回摘要+可 grep NDJSON")。③编辑框执行中也可输入(去掉 textarea disabled={busy},send 仍 busy 时不重入、文本保留)。④新增逆向进展笔记缓存(NotesBackend→<工作目录>/.frx-notes.ndjson 行式 append;notes_add 仅记验证通过的突破点/坑、notes_get 按站点读;send() 每轮把当前站点笔记摘要 capped~1.8KB 注入系统提示=每次回答前先看历史;标注"站点会改版仅供参考")。纯 .sys.mjs+bundle→omni 重打包 |
| 2026-05-27 | v0.13.4 | 修实战暴露的**「node 补环境」两大基建缺口**(目标站点 签名参数 实战中 Agent 卡在"npm 不可用"被迫手搓 polyfill、signer JS 没快速落到可执行处):①node 派生进程 PATH 补全——根因是 GUI(Finder/Dock) 启动的浏览器 PATH 精简(无 /usr/local/bin、/opt/homebrew/bin),_resolveExe 能兜底找到 node 本体、但 node 再 spawn 兄弟 npm 用的是继承的精简 PATH→找不到=「npm 不可用」;WorkspaceBackend 抽出 _spawn + _mergedPath(把 exe 目录+常见 bin 并入子进程 PATH),node/npm 都经它派生。②新增 npm_install 工具(_resolveNpm 优先 node 同级、cwd=工作目录、装到 node_modules),让"三方密码学库 jsdom/crypto-js/sm-crypto 正常 npm 加载不手搓"成一等能力。③scripts_save 加 toWorkspace——signer 脚本直接落 <工作目录>/scripts/(立即可 run_node),省去语料目录→工作目录的手动拷贝;ScriptsBackend 接 workspace。④系统提示阶段一改为"锁定 signer 即 scripts_save(toWorkspace)→npm_install 三方库→run_node",别在 page_eval 反复试探。纯 .sys.mjs+bundle(无 C++)→omni 重打包 |
| 2026-05-27 | v0.13.3 | 指纹自动落盘 + 计数汇报(补 v0.13.2 两缺口):用户反馈"打开的目录里找不到指纹文件"——根因是原始 trace 只在 /tmp/firefox-reverse-webapi.ndjson.<pid>、归类后的 env 只在工具返回值里、从不落盘。①WebApiBackend 注入 workspace(仿 JsvmpBackend 镜像模式),env/flow 查询自动把完整指纹落盘到 <工作目录>/webapi/(fingerprint-env.json / fingerprint-flow.json,pretty JSON、AI 友好);env 落盘版用完整去重值(不截断、每属性最多 12 个,node 补环境直接喂),返回给 LLM 的 env 仍是摘要(截 160/最多 3 个,省 token)。②env 返回加显式计数 totalRecords(记录条数)/interfaces(对象数)/properties(属性数)/reads(读取次数) + savedFile 路径,note 与系统提示都要求 Agent 拿到后立刻向用户汇报抓了多少条/多少对象/多少属性、指纹存哪了,让用户感知。纯 .sys.mjs+bundle 改动(无 C++)→omni 重打包即可 |
| 2026-05-27 | v0.13.2 | Web-API tracer 加指纹清单/执行流程两档查询 + Node 优先工作流:①webapi_query 新增 mode:"env"(基础档·指纹清单,把 getter 读取+指纹探测方法按 接口→属性 归类,给 值+去重样本+次数,一键拿到目标站点检测了哪些浏览器特征=算法环境输入依赖)与 mode:"flow"(高级档·执行流程,按时间序列出调用含毫秒 ts/相对偏移 dt,复原检测逻辑与时序);C++ RecordNamed 落 NDJSON 加单调毫秒 ts 字段供 flow 用。②Agent 系统提示重写为两阶段:阶段一先用 Node.js 跑通"可用版"(网络定位→加密分析→浏览器指纹获取开关 webapi_trace+env/flow 查询+fs_write 落 JSON→node 补环境跑通,三方密码学库正常 npm 加载不手搓),阶段二再推导白盒纯算(浏览器侧执行流程推导+监控 node 执行链路 hook 互证+重写纯 .js/.py 逐字节对比自证);红线不变(不依赖浏览器/RPC、page_eval 只读) |
| 2026-05-27 | v0.13.1 | 通用 Web-API tracer 转 codegen 注入(取代 trampoline):在 Codegen.py 的 definition_prologue 给每个 WebIDL 方法/getter 生成体顶部注入 RAII(AutoTraceMethod/AutoTraceGetter),接口+成员名取编译期字面量(解决 trampoline 处匿名 native 取不到名=全"?"的死结),覆盖 generic+specialized(含 XMLHttpRequest)。真·目标站点实测:成员名全真(open/send/setRequestHeader/status/readyState…,0 个"?")、XHR 60 条(原 0)、open 抓到 目标站点 真实签名请求 URL(含 sign/p_no/qs)、setRequestHeader 抓到 header 键值。集成踩坑修了 3 个:静态方法无实例 args→isStatic 跳过;头未导出→EXPORTS.mozilla.dom+mozilla/dom/ 全路径;EXPORTS 须字母序。Agent 系统提示加 webapi 能力说明 |
| 2026-05-27 | v0.13.0 | 新增通用 Web-API 调用追踪(RuyiTrace 模式,引擎层、JS 不可检测):在 dom/bindings 的 GenericGetter/GenericMethod 两个泛型 trampoline(所有 WebIDL 属性读/方法调用必经)注入 C++ 记录(WebApiTraceCore.cpp),把 interface.member(args)→return 落 per-pid NDJSON,看签名的环境依赖(querySelector/getAttribute/navigator 读)、IO 边界(XHR.setRequestHeader)、JS↔WASM 边界(TextDecoder/Crypto)——对 JSVMP/WASM/纯混淆都适用,补上"只会 JSVMP opcode"的缺口;运行期 /tmp/firefox-reverse-webapi.ctl 秒级开关,新增 webapi_trace/webapi_query 工具;选 GenericMethod/Getter 注入点(2 函数)而非改 25k 行 Codegen.py,同样通用但风险低得多。v1 暂不含调用栈(principals 待处理)与 setter |
| 2026-05-27 | v0.12.11 | 修 fs_write 偶发「bad tool arguments JSON: end of data」:根因是默认 max_tokens 仅 4096,DeepSeek 长 reasoning + 把整文件当 content 一次写出时输出超限→finish_reason=length 截断→tool_calls 的 arguments JSON 被切断→解析失败(思考短时偶尔够用故时好时坏)。三处修:①默认 max_tokens 4096→8192(deepseek-chat 上限、Claude/OpenAI 也安全);②AgentLoop 解析失败且 finish_reason=length 时给可操作提示(别盲目重试同样超大写入,改分段+append);③fs_write/WorkspaceBackend 加 append 选项(IOUtils appendOrCreate)支持大文件分多次写,schema/说明同步 |
| 2026-05-27 | v0.12.10 | 修 DeepSeek 偶发把 tool_calls 以文本标记泄漏进 content(形如 <||DSML||invoke name=…><||DSML||parameter…>,多见于上下文偏大/模型退化)导致工具不执行、Agent 空转、界面只剩畸形标记:LlmClient 在 OpenAI/DeepSeek 路径(流式 + 非流式)加 recoverInlineToolCalls——结构化 tool_calls 缺失但 content 含 invoke/parameter 标记时,解析还原成真正的 toolCalls 并清理 content(分隔符无关、仅 tool_calls 为空时触发、避免误伤散文);流式期间检测到泄漏标记即停止把畸形文本打到 UI |
| 2026-05-27 | v0.12.9 | 修"对话进行中点设置再返回→界面变回待发态、模型回复被吞":根因是 index.jsx 在 view==="settings" 时 return SettingsPane 取代 AgentPanel→React 卸载 AgentPanel→进行中回合的状态(busy/思考流/AbortController/正在跑的 send)全丢,返回时新挂载的面板从持久化历史读不到未完成回合→显示待发态。改为 AgentPanel 始终挂载、设置打开时仅 display:none 隐藏(设置面板作覆盖层),回合状态不丢、返回后流式继续可见 |
| 2026-05-27 | v0.12.8 | 修工作目录默认行为:新建会话不再继承上次用过的"默认目录"——新会话默认为空/不绑定,需用户手动「打开目录」(移除 newChat/ensureThread/init 里 createThread 的 defaultWorkspace 注入 + effectiveWorkspace 的全局默认回退 + 选目录时不再 setDefaultWorkspaceDir;只持久化到当前会话);已绑定目录的旧会话仍保留各自目录 |
| 2026-05-27 | v0.12.7 | JSVMP trace 两项能力增强(通用、无站点):①C++ 主 trace 行对带内联整数立即数的 opcode(Int8/Int32/Uint16/Uint24)记录 imm 操作数值(补反汇编常量、反推未识别 opcode 算术语义);②把 dump_locals/env/vpc/ret/args 从"仅启动期 env 生效"接到运行期——按内容进程 pid 写 dump 配置文件、引擎摊销轮询消费即时生效,新增 jsvmp_trace(action:"dump", col/actions/env/pc/…),修掉 schema 里一直是死参数的 actions(这正是"抓不到 JSVMP 运行期常量/闭包对象"的真因:能深序列化常量闭包对象的 dump_env 以前接不到运行期开关上)。附评估:Agent 报告里"补 Node 环境造 目标SDK"违背不补环境红线、且 签名函数 返回的是某签名参数、非目标参数 |
| 2026-05-27 | v0.12.6 | 修两个体验问题:①报错中断后历史丢失——send() 的 catch 只在"手动停止"时保留过程,报错分支只 setError 后 finally 清空 → 现在报错也把已产生的思考/正文/工具过程作为 assistant 消息保留并持久化;②Agent 反复 query 也看不到刚触发的 op 而空转超时——jsvmp_query 读的是文件头(最旧记录),改为读尾部(最近记录)+兼容 filter 嵌套参数+跳过 meta 噪声;并新增 jsvmp_trace(action:"clear"):按内容进程 pid 一次性清空缓冲但保持开启(丢页面加载噪声、解上限锁),把"start→clear→只触发一次→query 读最近"收窄手法写进通用流程(无站点信息) |
| 2026-05-27 | v0.12.5 | 修 JSVMP trace 抓不到热 dispatcher 的根因:hook 只在 js::Interpret(tier-0)、热函数 tier-up 即逃逸(Gecko 关 JIT pref 同步到内容进程无效)→ trace 启用时在引擎内把 JIT warmup 阈值钉满(js::jit::JitOptions),钉死解释器层。真·目标站点实测:目标SDK dispatcher 捕获 ~42000 op(修复前仅 5–10)。通用、不含任何站点信息 |
| 2026-05-26 | v0.12.4 | LLM 空闲超时 180s→300s(仅"连续无数据"才触发,慢/大请求更宽容);校正 JSVMP 流程为"静态反汇编建骨架 + targeted 动态 trace(vpc/locals)补跳转目标/未知opcode/运行期值,两者结合才是完整白盒"(trace 不是被抛弃,是从全量改成收窄到 signer 一次调用) |
| 2026-05-26 | v0.12.3 | system prompt 重写 JSVMP 还原流程:定位 signer→提字节码+dispatcher→split_dispatcher→disassemble 静态反汇编为首选,全量 runtime trace 降为"仅静态不够时、且只在 signer 那一次调用期间"的次选(避免再走 4GB 全量 trace 弯路);bundle 加 --charset=utf8 |
| 2026-05-26 | v0.12.2 | 修 JSVMP trace 暴涨到 GB 级的 bug(达 100 万条上限后被运行期轮询反复"复活+清零计数"→无限增长 4GB):加 gLimitReached 锁,达上限即硬停;顺带去掉进行中消息里的内联停止按钮(保留输入栏「停止」) |
| 2026-05-26 | v0.12.1 | 打包的离线工具改用 minify 构建(剥除注释里的单站点示例)+ 清掉默认路径字符串,shipped 二进制内 0 单站点词 |
| 2026-05-26 | v0.12.0 | 离线 JSVMP 工具链封成一等工具:jsvmp_split_dispatcher(dispatcher源码→handlers.json)+ jsvmp_disassemble(handlers+字节码→伪汇编),随浏览器打包(babel内联)、工作目录内 run_node 离线跑、结果落盘只回摘要 |
| 2026-05-26 | v0.11.3 | LLM 请求改用「空闲看门狗」:只要还在出数据就永不超时,仅真·断流/卡死(连续 180s 零数据)才中止——根本上消除正常慢/长响应的超时报错 |
| 2026-05-26 | v0.11.2 | 修 LLM 请求超时:默认超时 60s→180s;超时单独报「请求超时」清晰提示(不再误报 operation aborted),且超时不再无意义重试 |
| 2026-05-26 | v0.11.1 | 站点无关化:移除残留在 Agent 系统提示 / jsvmp 工具说明中的单站点示例,jsvmp scriptUrl 等改为通用「目标脚本文件名」表述 |
| 2026-05-26 | v0.11.0 | 工作目录管理(绑定本地目录 + 文件读写 + 本地 node/python 执行)、jsvmp trace 镜像到工作目录、去除沙箱警告横幅、自主执行到完成 + 双停止按钮 |
| 2026-05-26 | v0.10.0 | 通用 JSVMP 字节码 trace 白盒能力在重脚本站点打通(多进程选内容进程 pid / 关内容沙箱使内容进程可落盘 / start 自动关 JIT 强制纯解释器 / filter 每轮刷新),逐 opcode 轨迹适用任意 JSVMP 脚本 |
| 2026-05-26 | v0.9.0 | 自定义模型端点(OpenAI/Anthropic 双协议 + 拉模型 + 内置 Claude 下拉 + Opus 4.7)、provider 精简为 DeepSeek+自定义、502 瞬时重试 |
| 2026-05-26 | v0.8.0 | 对话 UI 重做(每轮回复始终可见 / 💭思考段 / 工具过程可折叠,修覆盖与串话)、自动滚动跟随、收起只看结论、设置齿轮图标 |
| 2026-05-26 | v0.7.0 | DOM 自动操作工具(点击/滚动/输入/截图)+ 视觉支持(截图回喂视觉模型)+ 浏览器 App/dock 图标换 logo |
| 2026-05-26 | v0.6.0 | JSVMP 运行期开关(控制文件秒级生效,无需重启/无需 env)+ 强制 jsvmp 白盒还原、禁 JS 层 hook |
| 2026-05-25 | v0.5.0 | 流式回复(SSE 边收边渲染) |
| 2026-05-25 | v0.4.0 | 真实重脚本站点端到端验证 + 工具执行确认模式(默认免确认、可开启) |
| 2026-05-25 | v0.3.0 | ToolRouter + AgentLoop 工具循环 + 6 大原生能力(执行JS/网络捕获/存JS/代码搜索/定位加密入口/jsvmp trace) |
| 2026-05-25 | v0.2.0 | 首次交叉编译出 macOS arm64 dmg,Agent 侧栏装机可用(resource:// 模块 + 注册侧栏入口) |
| 2026-05-22 | v0.1.0 | A1 聊天侧栏(LlmClient/ConfigStore/providers/AgentPanel + 多线程历史 + 设置面板),DeepSeek 直连打通 |