Skip to content

Repository files navigation

WinAgent

Windows 桌面 AI 助手(基于 Electron,业务逻辑复用 dsh-winagent 插件服务层)。兼容 OpenAI 格式 API本地 Ollama,以《明日方舟》安洁莉娜的桌宠形象陪伴聊天,同时内置完整 Windows 工具集(53+ 个工具)与 LLM Wiki 个人知识库——你只负责剪藏,AI 负责理解和沉淀。支持 skills(含 SKILL.md 格式)MCP 扩展挂载,可打包为免安装便携版

欢迎各位大佬的评论和指导,所有评论和邮件我都会认真阅读和回复,期待与大家交流!如有兴趣也欢迎加入此项目。 邮箱(email):530313@qq.com;

功能特性

  • 多 Provider:OpenAI / DeepSeek / 任意 OpenAI 兼容端 / 本地 Ollama,一键切换
  • 模型自动拉取:Ollama /api/tags、OpenAI 兼容 /v1/models
  • 文件/图片/PDF 附件:图片自动以 vision 格式发送,文本文件内容内嵌;PDF(≤15MB)在 provider 支持时直接以文件输入发送(拒收自动降级);不支持 vision 的模型自动降级为视觉辅助或路径描述
  • Vision 模型识别:自动按模型名关键词检测(gpt-4ovisionvlllavageminiclaude-3qwen-vlglm-4v 等),也可在设置中手动指定「支持/不支持/自动检测」
  • 视觉辅助(双模型协作):主模型为纯语言模型时,自动调用另一个视觉模型识别图片,再把识别结果回填给主模型继续完成任务。支持同一 API 下用两个模型(如主模型 mimo-v2.5-pro + 视觉模型 mimo-v2.5
  • 流式输出开关:可关闭流式,改为生成完毕后一次性返回
  • 深度思考开关:自动 / 开启 / 关闭三态,接口不认识参数时自动去参重试
  • Token 消耗统计:顶栏实时显示会话累计 token,悬停查看输入/输出细分与最近一次用量
  • 流式对话:Markdown 渲染、代码高亮、思维链折叠、工具调用可视化
  • 完整 Windows 工具集(53+ 个)
    • 文件:list_directoryread_filewrite_fileedit_filemulti_edit_filedelete_filecopy_filemove_filesearch_filesfind_filesget_file_infocreate_directorygrep
    • 系统:list_processeskill_processrun_commandget_system_infotake_screenshotlist_startup_itemsadd_startup_itemremove_startup_item
    • 注册表:registry_listregistry_readregistry_writeregistry_delete_valueregistry_delete_key
    • 输入模拟:mouse_movemouse_clickmouse_scrollkey_presskey_combinationtype_textget_cursor_posget_screen_size
    • 窗口:find_windowsset_window_statebring_window_to_frontclose_window
    • 网络:http_requesthttp_download
    • 文档生成与转换:markdown_to_docxwrite_xlsxwrite_pptxoffice_convert
    • 知识库:search_knowledge_baseretrieve_knowledgeread_notelist_notesread_raw_fileadd_questionsave_knowledge_outputlint_knowledge_basemerge_knowledge_pagesreflect_knowledge_base
  • 文档生成(模型优先):模型产出 Markdown / 结构化 JSON,工具做确定性序列化——markdown_to_docx(pandoc 检测到则优先,否则内置纯 JS 链)、write_xlsx(SheetJS)、write_pptx(pptxgenjs);数学公式以 Word 原生可编辑公式(OMML) 插入(非图片,双击可用公式编辑器修改)
  • 文档读取与视觉理解(混合回退链):PDF 附件直传 → render_pdf_page 整页渲染 PNG 视觉阅读(扫描件/复杂排版,pdfjs-dist + @napi-rs/canvas)→ read_pdf / read_docx(with_images) 等 skills 哑提取 + 模型结构化(纯 JS 零系统依赖);[[IMG:]] 标记协议——skill 输出图片标记,Agent 自动转为视觉输入(非 vision 模型走视觉辅助)
  • 格式互转office_convert 四级降级链(纯 JS SheetJS → pandoc → LibreOffice headless → Office COM),Office 文档 → PDF 等常用转换本机装有 Office 即可用;不可达时报错附安装指引
  • Skills 挂载skills/ 目录下的脚本插件(node/python/command)
  • MCP 挂载mcp.json 挂载外部 MCP server(stdio / HTTP)
  • 上下文压缩:长对话自动/手动压缩,避免超出上下文窗口
  • 危险操作确认:删除/写注册表/结束进程/执行命令/模拟输入等默认弹窗确认
  • Ollama 兼容优化:消息格式自动清洗(content null 处理、tool_calls 结构标准化、tool 结果补 name 字段),避免 invalid tool call arguments 兼容性错误
  • API Key 存储config.json 中的 apiKey 以明文存于用户私有目录(%APPDATA%/com.winagent.app/),请勿分享该目录;旧版 DPAPI 密文(enc:v1: 前缀)加载时自动清空,重填一次即可
  • 上下文压缩(两阶段):阶段一免 LLM 轻量压缩(截断旧工具结果、剥离旧图片 base64),阶段二 LLM 摘要旧消息;摘要失败自动降级,不中断对话
  • 便携:数据(config.jsonwiki/)保存在 %APPDATA%/com.winagent.app/,遵循 Windows 应用数据规范
  • Angelina 可爱主题:《明日方舟》安洁莉娜主题界面——奶油色系 UI、动态角色立绘(左侧常驻,随对话状态切换「思考/执行工具/识别图片/回答」动作动画)、空状态 GIF 动图
  • 单一桌宠模式(Agent 能力合并):AI 以安洁莉娜的角色人设陪伴聊天(人设提示词可编辑),同时拥有专业 Agent 的完整工具能力——读文件、操作 Windows、检索知识库,系统提示词运行时自动附加工具清单,不会"拒绝访问本地文件"
  • LLM Wiki 个人知识库(Karpathy 模式):基于 Andrej Karpathy llm-wiki 思路——你只负责剪藏,LLM 负责理解和沉淀。三层架构(raw 原始文件只读 / wiki 编译层 / outputs 输出),拖拽文件弹出分析要求弹窗(AI 编译 + 按你的要求定制分析,要求自动归纳为可复用 tag),支持概念对齐、confidence 体系、QUESTIONS 队列、LINT/REFLECT/MERGE
  • 对话自动 RAG:每轮提问自动检索知识库并把相关笔记(标题/路径/confidence/摘要)注入上下文——回答知识类问题优先依据库内知识、注明来源;未命中时明确告知「知识库中没有相关内容」再自答并标注,绝不冒充库内知识
  • 文档自动解析:拖入 PDF / PPTX / DOCX / XLSX / PPT / DOC / XLS / Markdown / 文本,自动提取文本 → AI 分析 → 生成知识库页面(带进度条);PPT 通过 Office COM 转换,旧版格式全覆盖
  • 知识库面板:侧边滑出,文件树分层展示(📥 raw 只读 / 📚 wiki 可编辑),中缝可拖拽调整宽度,量子粒子关系图谱
  • SKILL.md 格式支持:除原生 manifest.json 外,支持 Anthropic 官方 SKILL.md 格式 skill,GitHub 上的 skill 可直接放入 skills/ 目录使用
  • 图片生成提示词:需要图片时模型直接生成可复制的绘图 Prompt(可直接粘贴的英文 Prompt + 中文拆解,适配 Midjourney / Stable Diffusion / 即梦AI 等),不编造图片
  • DSH 插件版(dsh-winagent):同一套 Agent 能力以插件形式装进 DeepSeek Harness(dsh plugin --profile web add 一条命令安装,详见下文「DSH 插件版」),在 DSH Web 界面里直接使用,无需桌面壳

快速开始

普通用户:从 Releases 下载 WinAgent-<version>-win64.exe(便携版),双击即用——免安装、单文件,数据保存在 %APPDATA%/com.winagent.app/,覆盖升级直接用新 exe 替换旧文件即可。

开发者(需 Node.js 18+):

git clone https://github.com/HarrisXiu/WinAgent.git
cd WinAgent
npm install
npm run dev

桌面版主进程复用 dsh-plugin/ 的服务层(dsh-winagent file: 依赖);改了插件代码后先 npm run plugin:buildnpm run dev

打包

npm run dist             # electron-vite build + electron-builder(便携版 exe → release/)
npm run pack             # 仅打包目录不生成安装包(调试用)
npm run build:icon       # 从 Angelina/PNG/送货.png 重新生成多尺寸 ICO 图标

数据目录:应用数据保存在 %APPDATA%/com.winagent.app/(即 C:\Users\<用户名>\AppData\Roaming\com.winagent.app\),包括 config.jsonwiki/(知识库)、skills/mcp.json。首次启动时 skills 与 mcp.json 模板自动播种。

⚠ 注意:config.json 中包含 API Key(明文),请注意隐私保护、勿分享该目录。打包前请先关闭正在运行的应用(否则 exe/dll 被占用无法覆盖)。

使用本地 Ollama (使用本地小模型可能导致agent无法正确调用工具 不建议使用)

  1. 安装 Ollama:https://ollama.com/download
  2. 启动服务并拉取一个**支持工具调用(function calling)**的模型:
    ollama serve
    ollama pull llama3.1:8b

    9b 及以下模型在 40+ 工具场景容易“忘记”或“编造”工具名,建议使用 14b+ 或改用 API。

  3. 在 WinAgent 顶栏选择 Ollama (本地) provider,点击刷新按钮拉取模型列表。

使用 OpenAI API

在“设置 → 模型 Providers”中填写 Base URL(需含 /v1)、API Key模型。例如:

  • OpenAI:https://api.openai.com/v1
  • DeepSeek:https://api.deepseek.com/v1

文件/图片附件

  • 点击输入框左侧 + 按钮选择文件,支持多选
  • 图片显示缩略图预览,文本文件显示文件图标
  • 图片:支持 vision 的模型(gpt-4oqwen2.5-vlllava 等)直接识别;不支持的模型走视觉辅助或降级为路径描述,不会报错。可在「设置 → 图片识别」中手动覆盖(自动检测 / 支持 / 不支持)
  • 文本文件.txt/.md/.json/.js/.ts/.py 等):内容自动读取并拼入消息
  • PDF(≤15MB):支持文件输入的模型直接以 document 形式发送(网关拒收自动降级为 read_pdf / render_pdf_page 工具读取);超限传递路径信息
  • 其他文件:传递文件名和路径信息,可配合工具操作

视觉辅助(纯语言主模型 + 视觉模型协作)

当主模型不支持图片(如 deepseek-chat、大多数本地 Ollama 模型)时,可让另一个视觉模型先“看图”,再把描述文本交回主模型接续完成任务。

工作流程

用户上传图片
  ↓
主模型不支持 vision?→ 否 → 直接 multipart 发给主模型
  ↓ 是
视觉辅助已启用且配置正确?→ 否 → 退化为路径描述 + 提示
  ↓ 是
视觉模型逐张识别图片 → 描述文本
  ↓
描述文本拼入用户消息 → 主模型继续推理/调用工具

配置方式(设置 → 视觉辅助)

说明
启用开关 勾选后才会在主模型不支持图片时触发
接口来源 选「与主模型同一 API」则复用当前 Provider 的 Base URL / API Key;也可选另一个 Provider
视觉模型名 同一 API 双模型时必填;选了其他 Provider 时留空则用该 Provider 自己的模型
识别指令 给视觉模型的提示词,留空用内置默认(原文转写、公式用 LaTeX、表格用 Markdown)

设置面板会实时回显实际调用的接口与模型,配置无效(模型名空、与主模型完全相同)时给出警告。

两种典型用法

场景 接口来源 视觉模型名
同一家 API 下两个模型 与主模型同一 API 例如 mimo-v2.5(主模型为 mimo-v2.5-pro
跨家搭配 选另一个 Provider 留空或填写覆盖模型名

每张图片单独一次请求,避免多图混淆;单张失败不影响其他图片和主流程。识别进度在状态栏实时显示。 若主模型被误判为支持图片(接口返回“不支持图片输入”),会自动降级走视觉辅助路径重试,不会直接报错。

流式输出与深度思考

设置 → 请求行为:

  • 流式输出(默认开):关闭后不再逐字显示,等模型生成完毕一次性返回。部分网关对流式 + 工具调用兼容不佳时可关掉。
  • 深度思考
    • 自动(默认)—— 不下发任何思考参数,由模型自己决定
    • 开启 / 关闭 —— 同时下发 enable_thinkingreasoning.enabledthinking.type 三种主流字段,兼容 Qwen3 / vLLM / OpenRouter / Claude 兼容端

若接口不认识思考参数并报错,客户端会自动去掉参数重试一次,不会因此失败。思维链内容兼容 reasoning_content(DeepSeek/Qwen)与 reasoning(OpenRouter)两种字段。

Token 消耗统计

顶栏实时显示本会话累计 token(如 12.3k tokens),鼠标悬停可看到:

  • 会话累计的输入 / 输出 / 总计
  • 最近一次请求的用量
  • 是否为估算值

统计口径:

  • 优先取接口返回的真实 usage(流式下通过 stream_options.include_usage 获取)
  • 接口未返回时本地估算,数字前加 ~ 前缀
  • 包含工具调用循环的每一轮、视觉辅助模型、上下文压缩摘要的开销
  • /clear 或清空对话后归零

文档生成、转换与视觉理解

让 Agent 生成 Word / Excel / PPT,公式以 Word 原生可编辑公式(OMML)写入,而非图片——在 Word 中双击即可用公式编辑器修改。架构为模型优先三层管线:模型产出 Markdown / 结构化 JSON(理解、排版决策、内容生成都交给模型),工具只做确定性序列化。

例子:

帮我写一份关于二次方程的数学讲义,包含求根公式和判别式,保存到桌面 quadratic.docx 把这份报告做成 10 页 PPT,保存到桌面 report.pptx

生成与转换工具

工具 用途
markdown_to_docx Markdown 一键转 Word:# 标题、-/1. 列表、| 表格 |$$块级公式$$/$行内公式$--- 分页;检测到 pandoc 优先用 pandoc 引擎,否则内置纯 JS 引擎(零依赖,字体/字号/横向参数生效)
write_xlsx 创建 Excel:sheets JSON 数组精确控制({name, rows}),或直接给 Markdown 表格文本(数字字符串自动转数值)
write_pptx 创建 PowerPoint(16:9):slides JSON(title / subtitle / bullets / text / notes),三种版式(封面页 / 标题+要点 / 双栏要点)
office_convert 格式互转枢纽:xlsx↔csv/json、md↔docx↔html↔txt(需 pandoc)、任意 Office 文档 → PDF(LibreOffice / MS Office 自动探测)、.doc.docx;四级降级链,不可达时报错附安装指引

文档读取与视觉理解(混合回退链)

PDF 附件(≤15MB)优先文件直传(provider 支持时,拒收自动降级);扫描件 / 复杂排版用 render_pdf_page 整页渲染成 PNG 由视觉模型直接看;常规文档用 read_pdf / read_docx 等 skills 哑提取文本(纯 JS 零系统依赖)+ 模型结构化。read_docx(with_images) 解包文档内嵌图片、extract_pdf_images 抽取 PDF 嵌入图——图片以 [[IMG:]] 标记返回,Agent 自动转为视觉输入(非 vision 模型走视觉辅助描述),base64 不进文本上下文。

公式写法

用 LaTeX 语法,已验证支持分式、根号、上下标、积分、求和、希腊字母等:

行内:质能方程 $E = mc^2$ 表明…
块级:$$x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$$

实现为 LaTeX → MathML(temml)→ OMML(mathml2omml)→ OOXML 写入 docx(jszip),纯 JS 无原生模块,无需安装 Word 也能生成。已修复 mml2omml 双重转义 bug 和空公式位多余空格问题。

LLM Wiki 个人知识库

基于 Andrej Karpathy llm-wiki 思路的个人知识库,核心理念:你只负责剪藏,LLM 负责理解和沉淀——知识「编译一次、持续维护」,而非每次查询重新推导。

三层架构

<vault>/(桌面版默认 %APPDATA%/com.winagent.app/wiki,插件版默认 $DSH_HOME/winagent/wiki,可在设置中修改)
├── raw/          📥 原始文件(你拥有,AI 只读)—— 拖拽/复制文件进来自动处理
│   ├── articles/ clippings/ images/ pdfs/ notes/ personal/
├── wiki/         📚 编译层(AI 维护,你可浏览/修正)
│   ├── index.md  log.md  overview.md  QUESTIONS.md  ANALYSIS_TAGS.md(系统文件,自动维护)
│   ├── sources/   每篇来源的摘要页(Summary/Key Points/Concepts/Contradictions)
│   ├── concepts/  概念页(中文 title + aliases + Evolution Log + confidence)
│   ├── entities/  实体页(人物/工具/机构/论文)
│   └── synthesis/ outputs/ templates/
└── outputs/      查询答案、lint 报告

使用方式

  • 剪藏:把任何文档(PDF / PPTX / DOCX / XLSX / PPT / DOC / XLS / Markdown / 文本)拖进窗口 → 弹出分析要求弹窗 → AI 编译生成 sources/concepts/entities 页面(带进度条),并按你的要求定制分析(报告追加到来源页 ## Custom Analysis 区块)。手动复制文件到 raw/ 目录也会被自动监视编译
  • 分析要求 Tag:弹窗中可勾选历史分析 tag 快速复用常用分析方式——tag 由 AI 自动归纳(短标签 + 一句话模板),多选填入输入框后可继续编辑;也可点「直接编译入库」跳过定制分析、点「取消」放弃导入。Tag 存于 wiki/ANALYSIS_TAGS.md,可手动编辑/删除
  • 浏览:点顶栏 📚 打开知识库面板——raw 层只读预览(不可变原则),wiki 层可编辑修正;文件树分层展示,中缝可拖拽调整宽度;量子粒子关系图谱可视化
  • 对话检索(自动 RAG):每轮提问系统自动检索知识库并注入相关笔记(标题/路径/confidence/摘要),AI 回答知识类问题优先依据库内知识、注明来源并溯源到 wiki/sources/ 具体来源页;注入不够详细时 AI 自动调用 retrieve_knowledge 深度检索(一次取多篇全文)或 search_knowledge_base 换关键词重试;未命中时明确告知「知识库中没有相关内容」再用自己的知识回答并标注
  • 记录问题:说"我想搞清楚 X" → 加入 QUESTIONS.md 队列,之后摄入的新来源能回答时自动提示
  • 健康检查:说"检查知识库" → LINT 10 项检查(frontmatter / broken links / 索引一致性 / stub / 近重复 / SHA-256 完整性 / stale / 别名重叠 / wikilink 格式 / 系统文件保护)
  • 综合分析:说"综合分析知识库" → REFLECT 四阶段(反向检验 / 模式扫描 / 深度合成 / Gap Analysis)
  • 去重合并:重复概念页 → AI 先与你确认方案再执行 MERGE(保留 redirect 页)

机制亮点

  • 概念对齐:新来源提取的概念与已有概念页做 slug/aliases/语义匹配,命中则更新(Evolution Log 追加"强化/修正"),不重复建页
  • 定制分析:拖入弹窗中输入的个性化分析要求注入 AI prompt(与契约 CLAUDE.md 同轨),报告逐条回应要求、不编造、引用原文注明位置
  • 分析要求 Tag 模板:AI 把用户的要求归纳为「短标签 + 一句话模板」持久化到 ANALYSIS_TAGS.md,下次拖入弹窗直接勾选复用
  • confidence 体系:1 来源 low → 3+ medium → 5+ 弹窗由你确认后晋升 high(你的主动背书,非计数器输出)
  • possibly_outdated:来源超过 2 年自动标注
  • SHA-256 完整性:每篇来源记录哈希,LINT 检测 raw 文件是否被篡改
  • 个人写作:放入 raw/personal/ 的文章走个人写作流程(写入 My Position,不参与 confidence 计数)

配置文件

config.json%APPDATA%/com.winagent.app/ 目录下,首次运行自动生成):

{
  "activeProviderId": "ollama",
  "providers": [
    // apiKey 以明文保存于用户私有目录,请勿分享 config.json
    { "id": "ollama", "label": "Ollama (本地)", "type": "ollama", "baseUrl": "http://localhost:11434", "apiKey": "", "model": "qwen2.5:32b", "supportsVision": undefined },
    // supportsVision: undefined=自动检测, true=强制支持, false=强制不支持
  ],
  "temperature": 0.3,
  "maxTokens": 4096,
  "autoApproveTools": false,
  "compactThresholdTokens": 24000,
  "keepRecentTurns": 6,
  "skillsDir": "skills",
  "mcpConfigPath": "mcp.json",
  "petPrompt": "",          // 人设提示词(纯人设;工具清单与执行规则由系统动态拼接,勿写进人设)
  "knowledgeRag": {
    "enabled": true,         // 对话自动 RAG:每轮提问自动检索知识库并注入结果
    "topK": 3,               // 每次注入的最大条数
    "minScore": 0.12         // 注入的相关度阈值(归一化 0~1)
  },
  "visionAssist": {
    "enabled": false,        // 主模型不支持图片时,是否调用视觉模型代为识别
    "providerId": "",        // 空 = 与主模型同一 API;否则指定另一个 provider id
    "model": "",             // 视觉模型名,同一 API 双模型时必填
    "prompt": ""             // 识别指令,留空用内置默认
  },
  "stream": true,            // 流式输出
  "thinkingMode": "auto"     // 深度思考:auto / on / off
}

斜杠命令

  • /clear:清空对话
  • /compact:压缩上下文

扩展

  • Skills:见 skills/README.md
  • MCP:编辑 mcp.json,把要用的 server 的 disabled 去掉或设为 false

安全提示

WinAgent 拥有较高系统权限(删文件、改注册表、执行命令、模拟输入、访问网络)。默认对危险操作弹窗确认;请谨慎开启“自动放行”。部分操作(写 HKLM、改系统目录)需以管理员身份运行。

API Key 存储config.json 中的 apiKey 以明文保存于用户私有数据目录(桌面版 %APPDATA%/com.winagent.app/,插件版 $DSH_HOME/winagent/),均为本机当前用户的私有位置,请勿分享该目录或 config.json。旧版 DPAPI 密文(enc:v1: 前缀)加载时自动清空,需重填一次。

技术栈

Electron + TypeScript + React + Vite(electron-vite)+ TailwindCSS。桌面版主进程是精简编排层(窗口 + IPC + 数据目录),全部业务逻辑(Agent 循环、53+ 工具、LLM Wiki、skills/MCP)复用 dsh-plugin/ 服务层dsh-winagent file: 依赖)——一套 TS 代码同时服务桌面版与 DSH Web 插件。文档解析(PDF / PPTX / DOCX / XLSX)通过子进程调用插件自带解析脚本。

DSH 插件版(dsh-winagent)

把 WinAgent 的完整 Agent 能力做成 DeepSeek Harness(DSH)Web 插件:OpenAI 兼容 API / 本地 Ollama + 53+ Windows 工具 + skills + MCP + LLM Wiki 知识库,装在 DSH Web 界面里直接使用。插件代码在仓库的 dsh-plugin/ 目录,数据目录为 $DSH_HOME/winagent/

安装

# 本地链接安装(开发):在 dsh 所在环境执行
dsh plugin --profile web add link:<本仓库绝对路径>\dsh-plugin
# 或发布 npm 后:
dsh plugin --profile web add dsh-winagent
# 或从 GitHub 安装(本仓库发布后):
dsh plugin --profile web add github:HarrisXiu/WinAgent

安装完成后重启 dsh web,浏览器 F5 刷新:页面右下角出现 WinAgent 悬浮按钮,点击打开插件界面;插件也会出现在 DSH「设置 → 插件」清单里。

功能

  • 聊天界面:流式输出、思维链折叠、工具调用卡片、危险操作确认弹窗、图片/文本附件、视觉辅助
  • 设置:Provider 管理(OpenAI 兼容 / Ollama)、请求行为、深度思考、危险工具放行、人设提示词、skills / mcp / vault 路径
  • 知识库:文件树、全文搜索、编辑、URL 导入、上传文件自动编译入库(LLM Wiki)、LINT / REFLECT 工作流
  • 文档处理:模型优先三层管线(读取回退链 / [[IMG:]] 视觉注入 / 生成 / office_convert 互转);GET /winagent/api/capabilities 返回本地能力探测结果
  • 工具:53+ 内置 Windows 工具 + skills(manifest.json / SKILL.md)+ MCP(stdio / HTTP)挂载

开发

cd dsh-plugin
npx tsc -p tsconfig.json   # 或仓库根目录 npm run plugin:build

说明:桌面版的个性化桌宠主题不在插件范围内;人设提示词仍可在插件设置中自由修改。插件运行在 dsh web 进程内,以当前 Windows 用户权限执行工具,危险操作默认弹窗确认。

更新日志

v0.4.0(2026-09-06)

主体回调 TS:桌面版回归 Electron,删除 Rust 后端

  • 桌面版主进程重写为精简编排层(窗口 + IPC + 数据目录),全部业务逻辑复用 dsh-plugin/ 服务层(dsh-winagent file: 依赖)——一套 TS 代码同时服务桌面版与 DSH Web 插件,不再维护两套实现
  • 删除 src-tauri/ 与旧 src/main/ 服务副本(git 历史保留);数据目录沿用 %APPDATA%/com.winagent.app/,既有 wiki vault / config 无缝延续
  • 拖拽改回 Electron File.path + HTML5 事件(drag-shim.ts 派发同名自定义事件,App.tsx / WikiLayout.tsx 零改动)

文档处理模型优先重构(Office/PDF 三层管线)

  • 工具变薄变确定:模型承担理解/结构化/内容生成,工具只做哑提取与确定性序列化;删除旧工具(generate_image_promptcreate_word_documentmarkdown_to_wordlatex_formula_to_omml
  • 生成整合:markdown_to_docx(pandoc 检测优先 / 内置 temml+mathml2omml 纯 JS 链兜底)+ 新增 write_xlsx(SheetJS)、write_pptx(pptxgenjs)、office_convert 四级降级格式互转(纯 JS → pandoc → LibreOffice → Office COM)
  • 视觉理解链:新增 render_pdf_page(pdfjs-dist + @napi-rs/canvas 整页渲染)与 extract_pdf_images(嵌入图抽取)skill;read_docx 支持 with_images 解包 word/media/;[[IMG:]] 标记协议——skill 输出图片标记,Agent 剥离转为视觉输入(非 vision 模型走视觉辅助),base64 不进文本上下文
  • PDF 附件直传:provider 支持文件输入时 PDF(≤15MB)直接作为 document 输入发送,网关拒收自动降级为 read_pdf / render_pdf_page 工具路径;ProviderConfig.supportsFiles 可显式控制
  • 能力探测基础设施:capabilities.ts(pandoc / LibreOffice / Office COM / pdfjs 渲染链 / PyMuPDF,启动预热缓存)+ GET /winagent/api/capabilities + 系统提示词自动注入能力摘要
  • skills 播种改为按文件夹增量合并(老数据目录自动获得新增 skill);可选依赖 pdfjs-dist / @napi-rs/canvas(未装时视觉渲染能力降级,其余不受影响)

LLM Wiki 知识增强(对话自动 RAG)

  • 自动检索注入:每轮提问自动检索知识库,把相关笔记(标题/路径/confidence/摘要)注入上下文;未命中时明确提示「知识库中没有相关内容」,杜绝模型凭空作答而不告知
  • 检索引擎重写:IDF 加权评分(BM25 简化版)+ 字段权重(title/aliases/tags/summary/content)+ aliases 单独索引 + 中文单字查询支持 + 归一化分数(0~1)
  • System prompt 重构:人设与规则职责分离(petPrompt 纯人设、规则动态拼接),消除 4210 字符的重复规则块;知识库触发条件从关键词式放宽为「知识类问题优先依据库内知识作答」
  • 新增 retrieve_knowledge 深度检索工具(一次取多篇全文);merge_knowledge_pages 升级为危险操作(强制确认弹窗);search 结果附带 confidence

AI 分析管线修复

  • INGEST 输出截断/解析失败从静默空兜底改为如实报错(对齐契约 §9);REFLECT 增加 Limitations 字段(回音室风险标注落盘);QUERY 的 confidence 表述与契约 §7 对齐(high 仅由用户背书)
  • 概念/实体提取数量口径统一(契约 §1);slug 统一纯英文 kebab(slugifyKebab,契约 §0);批量摄入 abort 修复 null 解引用并取消在飞请求;REFLECT/QUERY 支持取消
  • GraphEngine 悬空边修复 + AI 发现的关系(aiRelations)入图谱

v0.3.0(2026-08-15)

从 Electron 迁移至 Tauri v2

  • 整体架构从 Electron(Node.js 后端)迁移至 Tauri v2(Rust 后端),前端保持 React + Vite + TailwindCSS 不变
  • IPC 通信从 Electron contextBridge / ipcMain 改为 Tauri invoke / listen,前端通过 tauri-bridge.ts 适配层保持 window.winagent API 兼容
  • 配置 Tauri ACL 权限(src-tauri/capabilities/default.json),为核心 IPC、事件、对话框、文件系统、shell 操作授予最小权限
  • 数据目录从 exe 同级改为 %APPDATA%/com.winagent.app/,遵循 Windows 应用数据规范
  • 打包格式从 zip(解压即用)改为 MSI / NSIS 安装包(Tauri bundler)

拖拽功能修复(Tauri 原生拖放)

  • 从 Electron 的 HTML5 File.path 方案改为 Tauri 原生 onDragDropEvent,在 tauri.conf.json 中启用 dragDropEnabled: true
  • tauri-bridge.ts 拦截 Tauri 拖放事件并派发 tauri:dragenter / tauri:drop / tauri:dragleave 自定义 DOM 事件
  • App.tsxWikiLayout.tsx 监听自定义事件,使用 Tauri 返回的文件路径字符串替代 File 对象
  • 知识库窗口拖放同步适配,WikiWindowApp.tsxhandleDropFiles / handleFilesPicked 改为接收 {name, path} 对象

白屏问题修复

  • 根因:前端缺少 Tauri IPC 桥接层,window.winagent API 未定义导致 React 渲染崩溃
  • 修复:在 main.tsx 中于 React 渲染前导入 tauri-bridge.ts,确保 window.winagent 在组件挂载前就绪
  • 调整 CSP 配置以允许 Tauri 协议资源加载

对话与知识库功能修复

  • 根因一:缺少 Tauri v2 ACL 权限声明,invoke / listen 调用被安全策略拦截 → 新建 capabilities/default.json 授予 core:defaultdialog:defaultshell:defaultfs:default 等权限
  • 根因二:ToolRegistry::initialize() 未被调用,AgentService 使用独立的空注册表 → 改为共享 Arc<ToolRegistry>,在 lib.rs setup 阶段初始化并注入
  • 根因三:VaultManager::initialize() 未调用,知识库目录结构不存在 → setup 阶段自动初始化 vault
  • 根因四:SearchIndexGraphEngine 启动时未构建,搜索和图谱为空 → 从磁盘笔记重建索引与图
  • wiki 工具注册移入 ToolRegistry::initialize() 内部,避免 lib.rs 访问私有类型

AI 分析管线优化

  • 无死锁取消AiPipelineMutex<AiPipeline> 改为 Arc<AiPipeline>(内部可变),配合 tokio::sync::watch 单调 epoch 实现非阻塞取消——取消请求可以立即送达正在运行的分析任务,不会因 Mutex 锁竞争而死锁
  • guarded 任务竞速:每个分析步骤用 guarded() 包装,在任务完成与取消信号之间竞速,取消时立即返回 Cancelled 错误
  • JSON 解析鲁棒性complete_json 函数处理 LLM 输出中常见的 prose 包裹、markdown 代码块围栏;extract_json_object 用括号配对提取 JSON 主体;解析失败时发起一轮 repair 请求 让 LLM 修正格式
  • UTF-8 安全截断snippet / clip_body 函数按字符边界截断多字节字符串,避免 panic
  • 数据验证与清洗
    • normalize_tags:trim、去重、限制 3-8 个标签、每个 2-8 字符
    • sanitize_relations:验证 relation target 必须逐字匹配候选笔记路径,过滤 LLM 编造的路径
    • slug_list / str_array:统一处理 LLM 返回的数组字段,容错字符串与数组混用
    • dedupe_nonempty:去除空字符串与重复项
  • 批量摄入中止(batch_abort)正确调用 AiPipeline::cancel(),而非无效的标志位

v0.2.3(2026-08-13)

拖入分析弹窗(重构剪藏流程)

  • 主窗口拖入文件不再无条件编译,改为弹出「分析要求」弹窗:文件列表 + 历史分析 tag 多选 + 可编辑输入框
  • 三个入口:开始分析(编译 + 定制分析)/ 直接编译入库(降级,跳过定制分析)/ 取消(放弃导入)
  • 弹窗内实时展示进度:导入 → AI 编译(sources/concepts/entities)→ 定制分析 → 归纳 tag;结果绿色卡片 5 秒渐隐消失
  • 定制分析:用户要求注入 AI prompt(与契约 CLAUDE.md 同轨),报告逐条回应要求、不编造、原文引用注明位置,追加到来源页 ## Custom Analysis 区块(正文,可被检索)
  • 分析 Tag:AI 把每次要求归纳为「短标签 + 一句话模板」,多选填入输入框后可继续编辑;持久化于 wiki/ANALYSIS_TAGS.md(系统文件,可手动编辑/删除)

对话检索强化

  • 对话中提及知识库/笔记/wiki 内容时,AI 主动调用 search_knowledge_base 检索(返回标题 + AI 摘要 + 正文片段,通常可直接回答)
  • 命中不理想自动换关键词(同义词/英文/缩写)重试;需要细节时 read_note 读全文
  • 回答注明来源笔记标题,核心结论溯源到 wiki/sources/ 具体来源页,来源矛盾时显式标注分歧
  • 检索结果随附 AI 摘要(SearchIndex 索引与检索链路扩展 summary 字段)

绿色成功提示 5 秒渐隐

  • wiki 编译成功 toast / 主窗口处理卡片 / 独立窗口摄入提示:成功态 5 秒后淡出(300ms transition),错误提示保持常驻手动关闭

v0.2.2(2026-08-11)

主题系统(CSS 变量驱动)

  • 全部硬编码配色重构为 CSS 变量令牌(RGB 通道格式),Tailwind 语义色经 rgb(var(--x) / <alpha-value>) 接线,133 处透明度修饰符(bg-accent/10 等)正常
  • 支持三种模式:浅色 / 深色 / 跟随系统(auto 模式随 Windows 亮暗自动切换,matchMedia 实时响应)
  • 自定义主色:设置 → 外观 → accent / accent2 两个拾色器(含 hex 手输),其余色阶(hover 态、边框、浅色面板、光晕、按钮文字)由 colord 自动推导
  • 对比度兜底:深色模式主色与背景自动提亮至 WCAG AA(≥3:1);主色上的文字色按对比度自动选黑/白;纯黑/纯白/荧光色等极端输入不产生不可读组合
  • 跨窗口实时同步:config:save 广播 config:changed,主窗口与知识库窗口任一修改主题,另一窗口即时生效
  • 图谱(canvas)与 CodeMirror 编辑器跟随主题:canvas 从 CSS 变量读取调色板并订阅主题变更重绘,节点渐变由用户主色推导(自定义主色贯穿图谱);编辑器主题引用 CSS 变量,无需重建实例
  • 代码高亮深色适配:[data-theme='dark'] 下 github-dark 色板覆盖
  • 修复启动闪色:BrowserWindow.backgroundColor 按解析后主题取值(原主窗口深色首帧与浅色 body 不一致)
  • 默认主题 = 原品牌配色(浅色 + 粉蓝 #f4719c / #6db7d9),「恢复默认配色」一键还原

AI 分析管线增强

  • analyze() 注入知识库契约(CLAUDE.md 相关小节:总则 / wikilink / confidence / 个人写作 / 质量红线)——改契约 → AI 分析行为随之变化
  • 按页面类型定制审查规则(source / concept / entity / raw / 普通笔记)
  • 新增质量建议输出(stub 提示、缺溯源 wikilink、可回答开放问题、矛盾检测)
  • AIPanel 一键应用:插入摘要到正文顶部、插入关联笔记 wikilink(遵循契约铁律 [[slug]] 裸 slug)
  • 修复 LINT 检查 2 把裸 slug 合规链接误判为断链(pageIds 补 basename);图谱链接解析同根因修复
  • 契约截断改为行级(章节标题完整不切半),extractContractSections 按优先级抽取小节

文档读取 Skills 扩展

  • 新增 read_docxread_pptxread_xlsx 三个 skill,分别读取 Word / PowerPoint / Excel 文档文本(纯 JS 提取,无需 Office/LibreOffice)
  • 共享提取核心 skills/pdf/extract.js:支持 pdf/pptx/docx/xlsx/xlsm/doc/xls/ppt 全格式,各 skill 复用同一核心
  • read_pdf.js 重构为瘦入口(-175 行),消除与新增 skills 的重复代码
  • GraphEngine 链接解析修复:knownIds 补 basename 裸 slug(GraphEngine.ts),与 LINT 检查 2 同根因——契约铁律 [[slug]] 裸 slug 链接在图谱中现在也能正确解析

v0.2.1(2026-08-08)

知识库独立窗口(第二窗口)

  • 主窗口顶栏点击 📖 图标弹出知识库独立窗口(?view=wiki 渲染 WikiWindowApp),与主窗口解耦,可独立拖拽、缩放、关闭
  • 独立窗口顶栏工具栏:批量摄入、AI 问答、健康检查、综合分析、去重合并、开放问题、URL 导入
  • 批量摄入交互式标定流程:先编译第 1 篇供用户审查 → 确认质量达标后继续批量 → 可中途「调整契约规则」(编辑 CLAUDE.md 后立即生效)或停止
  • 拖拽文件到独立窗口:1 个走单文件快路径,多个走批量标定
  • Toast 通知系统:操作结果以右下角气泡提示(成功/失败),8 秒自动消失
  • LINT 发现 SOURCE MODIFIED 时弹出重新摄入提示条,一键全部重编译

Wiki 浏览器增强

  • 右侧详情面板四标签页:标签(Tag)、反链(Backlinks)、AI 分析、注释(Annotations)
  • 注释功能:编辑模式选中文本 → 添加注释 → 右侧面板管理/删除
  • 反向链接面板:显示引用当前笔记的所有页面,点击跳转
  • 标签面板:当前笔记标签管理 + 全库标签云(含计数),点击按标签筛选
  • AI 分析面板:对当前笔记调用 LLM 生成建议标签、关联概念、摘要
  • ConfirmHighDialog:概念达 5+ 来源时弹窗确认是否晋升 confidence: high
  • 量子粒子图谱视图:全库 wikilink 关系可视化

工作流扩展

  • AI 问答(workflow:query):基于知识库检索回答,答案带 [[source]] 溯源 + Confidence Notes + Limitations,落盘 wiki/outputs/
  • 去重合并(workflow:merge):Jaccard 相似度检测重复概念/实体,保留页吸收 aliases + Sources + Evolution Log,全库 wikilink 改写,被合并页替换为 redirect
  • 综合分析(workflow:reflect):Stage 0 反向检验(SHA-256 校验来源完整性)+ Gap Analysis(识别知识缺口),生成 synthesis 报告
  • 健康检查(workflow:lint):10 项检查含 SOURCE MODIFIED 检测(raw 文件 SHA-256 变化时提示重新摄入)

URL 导入

  • 粘贴网页 URL → 抓取正文 → 保存到 raw/clippings/(含 source_url frontmatter)→ 自动 AI 编译为 sources/concepts/entities 页

修复:INGEST 管线无法处理非 .md 文件

  • 文件监听器(VaultManager.startWatching)原先只放行 .md 文件,PDF/Word/PPT/Excel/图片等放入 raw/ 后不触发自动编译 → 新增 INGESTIBLE_EXTS 常量覆盖全部可摄入格式,watcher 按扩展名过滤
  • listNotes() 只列出 .md 文件,启动补偿扫描 ingestPendingRawFiles() 无法发现未编译的非 Markdown 文件 → 新增 listRawFiles() 方法递归扫描 raw/ 下所有可摄入文件,ingestPendingRawFiles() 改用此方法
  • AiPipeline.ingestSource()maxTokens 从 1500 提高到 3000,减少复杂来源 JSON 输出被截断导致解析失败的概率
  • LLM 输出无法解析为 JSON 时输出 console.warn 日志,便于排查

修复:Wiki 界面内容过长无法滚动

  • flexbox height 链断裂:WikiWindowApp 包裹 WikiLayout 的容器非 flex 布局,导致子元素 flex-1 无效、高度由内容撑开 → 容器加 flex flex-col,整条 height 链贯通
  • WikiEditor 根元素 h-fullmin-h-0 flex-1,所有 MarkdownPreview 包裹容器加 flex flex-col + min-h-0 overflow-hidden
  • MarkdownPreview 自身 h-full overflow-automin-h-0 flex-1 overflow-auto,内容过长时在 flex 布局中正确滚动

v0.2.0(2026-08-07)

LLM Wiki 个人知识库(Karpathy 模式)

  • 三层架构:raw/(原始文件只读)+ wiki/(编译层)+ outputs/,目录自动初始化
  • 拖拽任意文档(PDF/PPTX/DOCX/XLSX/PPT/DOC/XLS/MD/TXT)→ 自动导入 raw/ → 提取文本 → AI 编译为 sources/concepts/entities 页面,带实时进度条
  • 概念名称对齐(slug + aliases 匹配,避免重复建页)、Evolution Log、confidence 体系(5+ 来源用户确认晋升 high)
  • possibly_outdated 标注、SHA-256 完整性、个人写作流程(raw/personal/)
  • 系统文件自动维护:index.md / log.md / overview.md / QUESTIONS.md
  • 知识库面板:分层文件树(raw 只读 / wiki 可编辑)、中缝拖拽调宽、量子粒子图谱、raw 源码/预览切换
  • Agent 知识库工具 9 个:search_knowledge_base、read_note、list_notes、read_raw_file、add_question、save_knowledge_output、lint_knowledge_base(9 项检查)、merge_knowledge_pages、reflect_knowledge_base
  • raw/ 目录自动监视:任何方式放入的文件自动编译(防抖 + 去重)

Agent 模式合并入桌宠模式

  • 移除模式切换,单一安洁莉娜桌宠:人设 + 完整 Agent 工具能力
  • 系统提示词运行时自动附加工具清单与执行规则,不再"拒绝访问本地文件"

文档格式支持

  • PDF(pdf-parse)、PPTX/DOCX/XLSX(jszip)、PPT(Office COM 转换)、DOC(word-extractor)、XLS(SheetJS)全格式文本提取
  • 旧版二进制格式识别、未知二进制 NUL 检测,提取失败给出明确原因

其他

  • SKILL.md 格式适配(Anthropic 官方 skill 可直接挂载)+ PDF 读取 skill
  • skills 路径打包回退(resources/skills)、pdf-parse 1.x require 加载修复
  • 注释功能修复(CodeMirror 选中文本获取)、预览滚动修复、系统文件保护
  • 打包模式改为 zip(解压即用)+ 首次启动询问桌面快捷方式
  • 版本号 0.2.0

v0.1.0(2026-08-06)

Angelina 主题界面

  • 全面换装《明日方舟》安洁莉娜可爱风:奶油色浅色主题、玫瑰粉主色 + 天蓝点缀、粉色渐变光晕
  • 空状态展示安洁莉娜「坐坐」GIF 动图,漂浮气泡/爱心/魔法棒/云朵装饰
  • 左侧常驻大立绘:随对话实时状态切换动画——思考中📖看书 / 执行工具🧭探险 / 识别图片📷拍照 / 回答中🪑坐坐,并显示状态文字
  • AI 消息头像动态化,思考占位显示跳动三点 + 状态提示
  • 代码高亮切换为浅色主题,Markdown 样式整体适配

Agent / 桌宠双模式

  • 新增 chatMode 配置(agent / pet),顶栏胶囊按钮一键切换
  • 桌宠模式使用可编辑的安洁莉娜人设提示词(petPrompt),角色扮演 + 保留工具能力「跑腿」
  • 设置 → 系统提示词页可切换模式并编辑对应提示词;切换模式自动清空会话

图片生成提示词

  • 新增 generate_image_prompt 内置工具:返回可复制英文 Prompt + 中文拆解 + 使用建议
  • 支持 17 种风格关键词(写实/动漫/赛博朋克/水彩/3D/国风等)与 6 种宽高比
  • 系统提示词新增「图片生成规则」:需要图片时只输出提示词,不编造图片

其他

  • 打包图标更换为安洁莉娜角色图(多尺寸 ICO)
  • 修复 3D 对象键语法错误

v0.0.3(2026-08-03)

视觉辅助(双模型协作)

  • 新增 visionAssist 配置(enabled / providerId / model / prompt
  • 主模型不支持 vision 时,自动调用选定的视觉模型逐张识别图片,描述文本回填给主模型继续任务
  • 识别指令可自定义,默认要求原文转写、公式用 LaTeX、表格用 Markdown
  • 新增 vision 事件(start/done/error),状态栏实时显示识别进度
  • 单张图片识别失败不中断整体流程,错误以文本形式告知主模型
  • 设置界面新增「视觉辅助」区:开关、接口来源选择、视觉模型名、指令编辑框,实时回显实际调用目标并对无效配置告警
  • detectVision() 抽为公共函数,关键词列表提升为模块级常量
  • ConfigStore.load()visionAssist 做深合并,兼容旧配置

同一 API 双模型

  • visionAssist 新增 model 字段;providerId 留空表示复用主 Provider 的 baseUrl / apiKey,仅换模型名
  • 新增 resolveVisionProvider() 统一解析接口来源与模型,解析结果强制标记 supportsVision: true,避免关键词误判
  • 同 API 同模型时返回 undefined,防止自己调自己

流式输出开关

  • 新增 stream 配置(默认 true)
  • OpenAIClient 实现非流式请求路径,支持 tool_calls / reasoning_content 解析,并回调一次让界面拿到内容

深度思考开关

  • 新增 thinkingMode 配置(auto / on / off
  • 同时下发 enable_thinkingreasoning.enabledthinking.type,兼容主流网关
  • 接口不认识参数时自动去参重试一次
  • 流式解析兼容 OpenRouter 的 delta.reasoning 字段

Token 消耗统计

  • 新增 TokenUsage 类型与 usage 事件
  • 优先使用接口真实 usage;流式下自动下发 stream_options.include_usage
  • 接口未返回时本地估算,显示时加 ~ 前缀区分
  • 统计覆盖每轮工具循环、视觉辅助模型与上下文压缩摘要
  • 顶栏显示会话累计,悬停查看输入/输出细分与最近一次用量;清空对话后归零

修复

  • 主模型被误判为支持 vision 导致 404(No endpoints found that support image input):新增 isImageUnsupportedError() 识别各网关文案,自动降级走视觉辅助路径重试(仅一次,防死循环)
  • 从自动检测关键词中移除 mimomimo-v2.5-pro 实际不支持图片输入,属误报
  • buildUserContent() 抽出并支持 forceNoVision,降级路径复用同一逻辑
  • 降级时按 role 定位最后一条用户消息,避免上下文压缩后下标错位

v0.0.2(2026-07-31)

Word 文档与公式

  • 新增 create_word_documentmarkdown_to_wordlatex_formula_to_omml 三个内置工具
  • LaTeX → MathML(temml)→ OMML(mathml2omml)→ OOXML(jszip)纯 JS 管线,无需安装 Word
  • 修复 mml2omml 双重转义 bug:正则 <m:t 误匹配 <m:type 导致结构标签被转义为 &lt;...&gt;,Word 无法打开
  • 修复公式空位多余空格:trim m:t 文本内容,移除 xml:space="preserve",清理空 m:r 残留
  • create_word_documentblocks 参数从 string 改为 array 类型,消除双重 JSON 编码导致的解析失败

Vision 图片识别

  • 新增 supportsVision 字段(ProviderConfig),支持三态:undefined(自动检测)/ true(强制支持)/ false(强制不支持)
  • 设置界面新增「图片识别」下拉选择(自动检测 / 支持 / 不支持)
  • 自动检测关键词扩充:mimoglm-4vyi-vlinternvlqwen2.5-vl
  • 添加 [Vision] 检测日志,便于排查模型识别问题

安全

  • API Key 加密存储:Electron safeStorage(Windows DPAPI),enc:v1: 前缀,绑定用户
  • 旧版明文 apiKey 首次启动自动迁移为密文
  • 解密失败时清空 apiKey,不泄露错误信息
  • save() 磁盘写密文、内存保持明文,正常使用不受影响

上下文压缩

  • 重构 token 估算:正确处理 multipart 消息(文本 + 图片)的 token 开销
  • 两阶段压缩算法:阶段一截断旧工具结果 + 剥离旧图片 base64(免 LLM),阶段二 LLM 摘要旧消息
  • LLM 摘要失败自动降级返回阶段一结果,不中断当前请求
  • safeSplitIndex:确保压缩切分点不以 tool 消息开头,避免 API 报错

About

**Windows 桌面 AI Agent**。兼容 **OpenAI 格式 API** 与 **本地 Ollama**,带聊天窗口、可本地切换模型、内置完整 Windows 工具集,支持**文件/图片附件输入**,并预留 **skills(本地脚本插件)** 与 **MCP** 两种扩展挂载接口。可打包为**免安装便携 exe**,在不同电脑上拷贝即用。

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages