ESC
开源 1 分钟阅读

HermesOffice:从GenOffice分支的AI原生办公套件,集成Hermes Agent AI

HermesOffice是一款面向macOS和Windows的AI原生办公套件,包含文档、表格、演示文稿和PDF编辑器,以AI编辑为核心而非附加聊天功能。它是GenOffice的Apache-2.0精简分支,默认集成Nous Research的Hermes Agent作为本地AI,通过OpenAI兼容端点运行,无需第三方代理。目前处于开发阶段,欢迎社区贡献。

来源:GitHub

HermesOffice

CI License: Apache-2.0 GitHub issues PRs welcome

面向macOS和Windows的AI原生办公套件:文字处理、电子表格、演示文稿和PDF——五个Electron应用共享一个引擎层,将AI编辑作为一流流程构建,而非附加的聊天功能。

fork自 genspark-ai/genoffice (Apache-2.0)。这是一个_精简分支_:引擎和应用代码跟随上游,拥有自己的身份层和Hermes Agent(Nous Research)集成作为原生AI。

下载

签名的fork版本将在此发布(进行中——请使用GenOffice上游或通过npm run dist:mac本地构建)。

路线图

产品的未来方向——以及社区如何提供帮助:

  • ROADMAP.md — 愿景、阶段、计划、贡献领域。
  • 开放问题 — 公共工作队列。功能以问题形式跟踪,包含实现说明、验收标准和明确范围,任何人都可以认领。
  • Good First Issues面板 — 为新贡献者精选的入门任务:小型、范围明确、有清晰审查路径的任务。在问题列表中按good first issue标签筛选。

应用

应用产品说明
apps/docsHermesOffice Docs.docx文字处理器。字节级保留的往返转换:仅重新生成“脏”段落(段落补丁);原文件中的其他内容逐字节保留,因此打开/保存不会破坏Word布局。分页视图的线条度量重现原始布局,支持修订、批注、样式、公式、墨迹。
apps/sheetsHermesOffice Sheets.xlsx电子表格。基于开源Univer核心(Apache-2.0)的UI,带有大量自定义扩展层;通过Rust sidecar(calamine + IronCalc)进行xlsx导入/导出,内置图表(Konva)、透视表、切片器、条件格式和公式追踪。
apps/slidesHermesOffice Slides.pptx演示文稿。内置pptx解析/渲染/编辑引擎,支持母版、图表、裁剪、墨迹和文本整形(HarfBuzz度量)。
apps/pdfHermesOffice PDF基于pdf.js + pdf-lib的PDF查看器/编辑器:批注、表单、大纲、图章、签名、页面操作、打印。
apps/shellHermesOffice套件外壳:主屏幕、四个编辑器的标签页托管、自动更新。

每个应用都嵌入相同的AI面板:文档中支持块级AI编辑,带有快照和差异;其他应用中支持通过工具调用操作电子表格/演示文稿/PDF状态的代理。

原生AI(Hermes)。 在此分支中,默认提供商是Hermes Agent——Hermes网关暴露一个OpenAI兼容端点(http://127.0.0.1:8642/v1),运行完整代理(记忆、技能、工具、MCP)。无需Genspark账户,无需第三方代理:100%本地。 (集成开发中——参见docs/hermes-integration.md。)

引擎包

纯TypeScript,无Electron依赖,单元测试覆盖(UI工具包除外):

  • packages/docx-engine — docx解析→块树(带有docxIndex锚点和透传),OOXML片段生成,字节级段落补丁。
  • packages/pptx-engine / packages/pptx-render — pptx模型和渲染。
  • packages/file-parse — 用于AI附件的文本提取(办公和文本格式)。
  • packages/agent-core — 所有应用共享的代理循环和技能组合。
  • packages/ai-provider — 模型后端的提供商抽象和流式传输。
  • packages/ai-search — Genspark认证和网页/图像搜索工具(保留自上游;此fork不依赖它)。
  • packages/i18n、packages/ui、packages/project-store、packages/electron-utils — 共享i18n、React UI工具包、最近文件存储和主进程辅助工具。

开发

npm install
npm run fixtures     # 生成.docx测试夹具
npm test             # 引擎+应用单元测试(docs/sheets/slides无头模式)
npm run typecheck    # 在所有工作区运行 tsc --noEmit
npm run dev          # 所有编辑器+shell针对Vite开发服务器
npm run dev:docs     # 单个应用(每个工作区模式相同)
npm run dist:mac     # 打包macOS dmg(重新生成第三方声明)
npm run dist:win     # 打包Windows nsis安装程序

sheets应用额外需要Rust工具链用于xlsx sidecar(cargo在PATH中);npm run build -w @hermesoffice/sheets会自动编译它。

与上游同步

git fetch upstream
git merge upstream/main        # 解决fork层中的冲突(品牌重命名/集成)
python3 tools/rebrand-hermesoffice.py   # 确保没有“genoffice”泄漏回来
npm install && npm run typecheck

架构(docx往返)

打开 docx ─► 按哈希归档原始文件(从不触碰)
          ─► docx-engine解析word/document.xml的顶层元素(w:p / w:tbl / …)
          ─► 块树,每个块由docxIndex + 原始XML切片锚定
          ─► TipTap流式编辑器(手动+AI编辑,脏跟踪)
保存      ─► 脏块 → OOXML片段(仅引用现有样式)
          ─► 拼接到原始document.xml中(未触碰的块保留原始字节)
          ─► 重新打包;所有其他条目逐字节复制

同样的理念适用于sheets和slides:原始文件是事实来源,编辑是窄补丁,编辑器未触碰的所有内容在往返中完整保留。

安全

参见SECURITY.md了解进程安全态势(渲染器沙箱、IPC验证、外部链接门控)以及针对AI生成内容的威胁模型。

第三方声明

npm run notices重新生成第三方许可证摘要(tools/gen-third-party-notices.mjs);所有运行时依赖均为MIT/Apache-2.0/OFL,内置字体(Liberation、Carlito、Caladea、Noto CJK子集)为OFL/Apache。

社区

许可证

HermesOffice根据Apache License 2.0授权,但有一个例外:ee/目录保留给未来的企业模块,受HermesOffice企业许可证保护。

署名:本项目是genspark-ai/genoffice(Apache-2.0,Copyright Mainfunc, Inc.)的分支,保留原始NOTICE。HermesOffice和Genspark名称及标志是Mainfunc, Inc.的商标,本分支不使用它们——根据许可证采用自己的品牌。