HermesOffice
面向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/docs | HermesOffice Docs | .docx文字处理器。字节级保留的往返转换:仅重新生成“脏”段落(段落补丁);原文件中的其他内容逐字节保留,因此打开/保存不会破坏Word布局。分页视图的线条度量重现原始布局,支持修订、批注、样式、公式、墨迹。 |
apps/sheets | HermesOffice Sheets | .xlsx电子表格。基于开源Univer核心(Apache-2.0)的UI,带有大量自定义扩展层;通过Rust sidecar(calamine + IronCalc)进行xlsx导入/导出,内置图表(Konva)、透视表、切片器、条件格式和公式追踪。 |
apps/slides | HermesOffice Slides | .pptx演示文稿。内置pptx解析/渲染/编辑引擎,支持母版、图表、裁剪、墨迹和文本整形(HarfBuzz度量)。 |
apps/pdf | HermesOffice PDF | 基于pdf.js + pdf-lib的PDF查看器/编辑器:批注、表单、大纲、图章、签名、页面操作、打印。 |
apps/shell | HermesOffice | 套件外壳:主屏幕、四个编辑器的标签页托管、自动更新。 |
每个应用都嵌入相同的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。
社区
- 路线图和如何帮助:ROADMAP.md — 好的首次问题在问题标签中标记为
good first issue。 - 看板:HermesOffice路线图项目 — 阶段和进行中的工作一目了然。
- 维护者:Gustavo Caetano — 通过X/Twitter(@gustavocaetano)联系,讨论产品方向、合作或仅仅聊聊办公中的代理。
许可证
HermesOffice根据Apache License 2.0授权,但有一个例外:ee/目录保留给未来的企业模块,受HermesOffice企业许可证保护。
署名:本项目是genspark-ai/genoffice(Apache-2.0,Copyright Mainfunc, Inc.)的分支,保留原始NOTICE。HermesOffice和Genspark名称及标志是Mainfunc, Inc.的商标,本分支不使用它们——根据许可证采用自己的品牌。