XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEWorkflow

【WinUI】XFE基于windows的工作流

公开
关注 0 Fork 0 Star 0
UTF-8

Agent 浏览器

官方页面插件 xfe.agent-browser(当前 1.2.0)在导航栏添加“Agent 浏览器”。左侧为多标签 WebView2,右侧是可拖动调宽的 DeepSeek 聊天栏。每个聊天会话有自己的浏览器标签和登录配置,切换会话时一起切换。切换应用导航保留页面实例;禁用、卸载插件或退出应用会停止任务、保存会话并释放页面。

首次使用

  1. 打开 Agent 浏览器,点击聊天栏右上角设置。
  2. 默认服务 https://api.deepseek.com/,模型 deepseek-v4-flash。可选择 deepseek-v4-pro 或填写服务当前支持的模型名。
  3. 在“DeepSeek API Key”直接粘贴密钥,点击保存,无需填写凭据名称。支持清理首尾空白及 Bearer 前缀,拒绝混入引号、中文或内部空白的值。“验证 API Key / 获取模型”使用当前填写的密钥读取 /models,不发送对话内容。
  4. 重新打开设置时显示“API Key 已配置”,不回填明文。留空保存保留原密钥,填写新值后保存才替换;取消不修改。密钥与设置在同一份 AutoConfig 快照保存,通过 Windows 当前用户 DPAPI 加密,设置只保留凭据引用。需要复用其他密钥时展开“使用已有密钥(可选)”。
  5. 浏览器技能和所需 Node、Playwright 已随插件安装,无需选择技能目录、设置 Node 路径或执行环境检测。
  6. 在左侧打开网站并手动登录,再描述任务,例如“读取当前表格,整理成 Markdown,先不要提交表单”。标签栏的“+”可添加网页,关闭按钮关闭当前标签。

Enter 发送,Shift+Enter 换行。“停止”取消模型请求和技能进程,已经完成的网页操作保留。聊天栏顶部的“+”创建新会话。保存 API Key 保留已有对话;修改模型、服务或思考/图片输入模式时重置模型上下文,历史记录仍保留。未配置密钥时发送会提示设置,并保留输入框内容。

会话与多标签浏览器

模型名下面的会话列表显示标题、最近更新时间及消息数,可切换当前和历史会话。首次发送后自动使用消息开头命名;列表旁的“…”支持重命名和删除当前会话,删除前需要在软件中确认。

每个会话拥有独立的浏览器工作区。 同一会话的多个标签共享网站登录;不同会话分别保存 Cookie、网站存储和标签列表。新增会话从空白标签开始,不继承另一个会话的网站账号。切换会话恢复对应的浏览器、活动标签、聊天和草稿。当前程序中已经加载的网页保持原实例,切换回来无需重新导航,未提交的网页输入和页面运行状态可以继续使用。

标签栏支持新增、选择和关闭标签,网站的弹窗或新窗口请求会打开为所属会话的新标签。关闭最后一个标签会保留一个空白标签。AI 可以通过宿主工具枚举、创建、选择和关闭当前会话的标签;操作、观察和截图跟随实际活动标签,不进入其他会话或个人 Edge/Chrome。

正常退出会等待落盘。重新打开软件并进入 Agent 浏览器时,恢复最后活动会话,以及各会话的标签 ID、顺序、标题、网址和选中标签;登录状态从该会话的 WebView2 profile 恢复。先加载当前标签,其余标签选择时加载。网页会重新打开保存的网址,重启前只存在网页内存中的未提交表单或临时脚本状态不属于恢复内容。

1.1 升级到 1.2 时,原有历史会话保留;最后活动的旧会话沿用原 BrowserProfile,其他旧会话首次打开时建立自己的登录配置。旧配置中的技能路径不再用于查找文件,只用于一次性迁移上下文指纹;随后从用户设置移除。后续插件升级不因安装目录变化清空模型上下文。

聊天记录与恢复

用户消息、账号头像与名称、AI 公开回复、工具输入/结果、截图引用及输入框草稿自动保存。不同会话的模型上下文独立,恢复后可以继续对话。每条新消息仍重新导入内置技能并观察当前真实页面。保存 API Key 或调整操作次数上限不清空上下文。

流式回复合并为一条记录,后台约 700 毫秒合并保存;发送前、任务结束、切换和退出时立即保存。历史文件使用原子替换和上一版本备份,目录损坏时尝试从独立会话文件重建列表。后台网页的标题或地址更新只保存所属会话,不改变最后选择的会话。

异常退出后把未结束的工具标为“中断”,保留此前完成的上下文,不自动重做浏览器操作。强制结束进程时,最近一次尚未落盘的片段可能丢失。历史上下文保存完成的用户消息、公开回复和工具结果,不保存模型私有思考正文。

对话身份

用户消息靠右排列,显示当前登录 XFEWorkflow 账号的头像和昵称(无昵称则显示用户名)。未登录显示“未登录”;无头像或加载失败时使用名称首字作为圆形占位。账号信息只用于界面显示,不加入模型请求。

DeepSeek 靠左排列;同一轮的技能读取、浏览器工具和公开回复归到同一个带头像的消息组。即使 AI 直接调用工具而没有先输出文字,也显示头像与名称。登录、更新资料和退出会同步后续消息的身份,已有消息保留原作者。

内置技能与浏览器工具

每次发送消息从插件内置 Skill/SKILL.md 重新读取说明、计算 SHA256,并启动包内 Runtime/node.exe。技能实际导入包内 scripts/browser-session.mjs,通过 openSession 连接本会话的 WebView2。该轮工具共用一个 Playwright 会话,切换标签时同步真实 targetId;结束时 session.close() 刷盘并断开,WebView2 仍由宿主持有。文件损坏或缺失时提示重新安装插件。

工具 用途
browser_tabs 枚举、打开、选择、关闭当前会话的原生标签;返回稳定标签 ID、标题、网址及选中状态
browser_observe 活动标签 URL、标题、ARIA、所有 iframe 文本及标签列表;每轮发送后先自动观察
browser_execute 异步 JavaScript 函数体,使用技能的 session、Playwright page/context 和 outputDir,以 return 返回结果
browser_screenshot 截取当前标签并在聊天中显示
read_skill 按需读取包内 references/*.md,拒绝目录越界

支持 Playwright 定位、填写、点击、iframe、真实文件上传、下载、页面脚本及 session.cdp。模型通过 browser_tabs 管理标签,由宿主创建真实 WebView2;技能不另开个人浏览器。网页和工具内容按待处理数据使用,登录、验证码和系统确认由用户在页面完成。

每个会话分配独立 profile 和随机回环 CDP 端口,连接记录器前核对真实 targetId。聊天渲染器有单独环境,不属于 Agent 的调试目标。端口冲突或策略阻止 CDP 时报告错误,重新启用插件可分配新端口。

DeepSeek、Markdown 与执行记录

实现 Chat Completions 流式 SSE 和多轮工具调用:累计函数名与参数,依次执行,回传对应 tool_call_id。流断开、截断或未正常完成不会标记成功。默认不限工具轮数;设置中 0 表示不限,正整数设置上限。此前保存过的正数保留,可手动改为 0。模型单次请求最长 5 分钟,单个技能操作最长 75 秒,停止按钮一直可用。

默认关闭思考模式。开启后保留并回传协议要求的 reasoning_content,不在界面、日志或历史文件保存私有思考。默认以文本模型运行;只有支持图片输入的模型才应开启“将截图发送给模型”。文本模型仍可根据 DOM/ARIA 操作网页。

聊天支持流式 Markdown、标题、引用、嵌套列表、任务列表、表格、代码块、高亮、链接和复制。工具输入输出显示为可展开的文本记录。链接在当前浏览器标签打开。marked、DOMPurify、highlight.js 离线随插件分发;HTML 过滤配合 CSP 禁止外部脚本、图片和渲染器网络请求,截图由宿主提供。

数据与运行

设置通过 AutoConfig 保存,密钥在凭据库。工作区中的主要数据:

  • PluginData/xfe.agent-browser/BrowserSessions/<会话ID>/Profile:每个会话独立的网站登录与存储。
  • PluginData/xfe.agent-browser/BrowserProfile:仅用于升级前最后活动会话的旧登录配置。
  • PluginData/xfe.agent-browser/ChatProfile:聊天渲染器。
  • PluginData/xfe.agent-browser/ChatSessions/catalog.json:会话列表及最后活动会话。
  • PluginData/xfe.agent-browser/ChatSessions/<会话ID>.json:聊天、草稿、上下文和浏览器标签,附 .bak 备份。
  • PluginData/xfe.agent-browser/Downloads:浏览器下载,使用唯一文件名前缀。
  • PluginData/xfe.agent-browser/Conversations/<时间-ID>/captures/...:本轮技能的证据与网络记录。

原始 HAR、请求响应体和 session 文件仅保存在本地,可能包含网页凭据;聊天使用宿主管理的敏感字段过滤器。历史 JSON 直接显示中文和表情,模型上下文落盘前过滤已管理的敏感值。取消或失败从模型上下文移除本轮不完整消息,界面仍保留操作结果和错误。

插件以受信任的本地代码运行。Agent JavaScript 在独立 Node 进程执行,具有当前用户文件权限;模型请求与技能进程通信在后台,WebView2 宿主操作在 UI 线程。

开发与打包

XFEWorkflow.Plugins.AgentBrowser 包含平台独立入口、技能加载、工具循环和会话存储;XFEWorkflow.Plugins.AgentBrowser.WinUI 提供原生页面和多标签工作区。最低页面 SDK 为 1.7.1。页面 SDK。

构建时 tools/Copy-AgentRuntime.ps1 将仓库中的 browser-debugger 1.2.1、锁文件固定的 playwright-core 1.64.1,以及对应架构 Node 打入插件。Windows x64/ARM64 使用 Node 24.19.0,x86 使用 Node 22.23.3;官方归档的 SHA256 固定在脚本中,依赖按 lockfile 完整性安装,许可证和来源元数据随包保存。

首次开发构建需要联网还原这些固定依赖,缓存位于 .artifacts/agent-runtime;客户端安装后无需 npm、Node 或外部技能目录。发布脚本生成可上传 Space 的 .xfeplugin,包含页面、聊天资源、技能、依赖及运行时。技能来源和维护规则见 XFEWorkflow.Plugins.AgentBrowser/Skill/BUNDLE.md;第三方许可见根目录 THIRD-PARTY-NOTICES。

dotnet XFEWorkflow/XFEWorkflow.Test/bin/x64/Release/net10.0-windows/XFEWorkflow.Test.dll --no-parallel --filter Agent --artifacts .artifacts/agent-browser-unit

验证与界面

原生检查 agent-browser-plugin-deepseek-skill-webview-markdown-tools-and-stop 使用本机模拟 DeepSeek,真实执行内置 Node 和技能,验证 WebView2 填写、点击、iframe、上传、下载、截图、Markdown、主题、密钥和身份、停止、导航保留及禁用释放。支持 --ui-background,仅操作本应用的 UIA 和 CDP。

agent-browser-session-history-persistence-and-restart 对同一隔离工作区与输出目录启动两次:首个进程创建 A/B 会话、AI 多标签操作、原生新增关闭、网页弹窗和草稿;第二个进程恢复标签与各自 Cookie,继续对话时模拟服务确认原上下文存在且无其他会话混入。测试将旧配置中的技能/Node 路径设为不存在的地址,并从子进程 PATH 移除 nodejs,验证包内资源可独立运行。

本版 Windows x64 Release、隔离目录 Debug 构建及测试结果见验收记录。界面:多标签与会话、实际重启后继续、设置。整页图由 WinUI RenderTargetBitmap 与两个 WebView2 的实际 CDP 渲染按控件坐标合成,未采集其他窗口;设置中的密钥是本地测试值。x86/ARM64 仅验证对应运行时资产还原,未宣称完成该架构的原生界面验收。

历史版本记录:1.0.1 密钥与身份、1.1.0 会话持久化。真实 DeepSeek 服务需使用自己的密钥验证,当前自动验收使用模拟接口。

接口依据:DeepSeek 首次调用、模型列表、工具调用、思考模式、Playwright WebView2、WebView2 多配置说明。