npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@a3s-lab/office

v0.312.0

Published

Open-source collaborative browser editors for documents, Markdown, spreadsheets, presentations, and PDFs.

Readme


A3S Office 是一个开源 Office 引擎,供团队将编辑构建为 他们自己的产品。它为文档提供完整的浏览器界面, 电子表格、演示文稿、Markdown 和 PDF,以及单独的 Rust 文件和编码代理的自动化平面。

产品边界经过深思熟虑:A3S Office 拥有格式感知编辑功能, 布局、导入、导出和类型化突变。您的应用程序可以控制 内容、持久性、身份、授权、协作传输和人工智能 提供商。核心编辑和文件工作流程不需要 A3S 后端或捆绑 云服务。

证据,而非承诺

这些是与真实情况的视觉回归基线 Playground,不是概念图。

为什么 A3S Office 存在

嵌入办公室工作不是一个问题。一个可靠的产品需要四个 同时发生的事情:

  1. 完整的交互界面 — 功能区、对话框、窗格、快捷方式、 响应式布局、可访问性和可预测的焦点。
  2. 格式本机行为 — DOCX、XLSX、PPTX、Markdown 和 PDF 不能 扁平化为一个最小公分母模型而不失去意义。
  3. 明确的所有权边界 - 编辑者不应规定文件的位置 实时、用户是谁、权限如何工作或允许哪个人工智能提供商。
  4. 确定性自动化 - 代理和后端作业需要键入, 冲突感知突变而不是 UI 抓取。

A3S Office 将这些问题分开,同时通过一个解决方案将它们暴露出来 包和一套有界合同。

五个表面,一个产品边界

  • 文档 (DOCX、HTML、TXT) — 结构化创作,实时 分页、表格、方程式、参考文献、评论和 PDF 输出。
  • 电子表格 (XLSX、XLS、ODS、CSV) — 稀疏工作表, 公式、表格、格式、排序/过滤、验证、数据透视表、图表和 打印工作流程。
  • 演示文稿 (PPTX) — 幻灯片、键入的场景对象、母版/布局、 过渡、有界入口/出口动画、注释、幻灯片和 演示者视图。
  • Markdown (MD) — GFM 源、视觉模式、分割预览、直接圆形 旅行和本机自动化。
  • PDF — PDFium 渲染、搜索、表单、注释、历史记录、保存和 页面组织。

表面是懒惰地要求的。大型或昂贵的工作被隔离在后面 可取消的 Workers、Rust WebAssembly、视口边界渲染和 显式 PDFium 运行时。 React、Vue 3、Web 组件和框架中立 核心 API 使用相同的受控内容模型。

核心设计

两个执行平面解决不同的工作:

  • 浏览器编辑通过React提供完整的交互界面, Vue 3、Web 组件和核心 API。 Workers、Rust/WASM 和 PDFium 保持 布局、计算、解析和渲染有界。
  • 本机自动化提供确定性文件读取、验证、 突变、批处理、CLI 命令、标准 MCP 服务器和 Office 技能 无需启动桌面 Office。

两个平面均由主机控制:

| A3S Office拥有|您的产品拥有 | | ---| ---| |格式本机模型和命令 |内容持久性和版本历史记录 | |导入、导出、布局和渲染 |身份、授权和策略 | |编辑器 UI 和响应式交互 |应用程序外壳和导航 | |类型化协作和代理端口 |房间、交通、模型提供商和 AI 生命周期 |

这两架飞机都不需要 A3S 后端。阅读 浏览器架构和 原生引擎设计精确 边界。

快速开始

尝试完整的产品

最快的第一次成功是 现场Playground。它暴露了 普通文档模板、最近功能、文件导入和每个编辑器 无需本地安装。

要在本地运行相同的 Playground,请使用 Node.js 20+、Bun 1.3+ 和 Rust 1.85+:

git clone https://github.com/A3S-Lab/Office.git
cd Office
bun install --frozen-lockfile
bun run playground

嵌入受控的 React 编辑器

bun add @a3s-lab/office react react-dom

导入样式表一次,给编辑器一个明确高度的主机,并保留 onChange 发出的完整值:

import { useState } from 'react';
import type { DocumentContent } from '@a3s-lab/office/core';
import { DocumentEditor } from '@a3s-lab/office/react';
import '@a3s-lab/office/styles.css';

const initialContent: DocumentContent = {
  type: 'document',
  html: '<h1>Project brief</h1><p>Start editing here.</p>',
  pageSize: 'a4',
  pageColor: '#ffffff',
};

export function ProjectBrief() {
  const [content, setContent] = useState(initialContent);

  return (
    <main style={{ height: '100dvh', minHeight: 0 }}>
      <DocumentEditor
        content={content}
        onChange={setContent}
        theme="system"
      />
    </main>
  );
}

编辑拥有编辑事务。您的应用程序决定何时、何地、 以及如何存储受控值。

选择一个入口点

|切入点|用它来 | | ---| ---| | @a3s-lab/office/react | Lazy React 编辑器组件和预加载助手 | | @a3s-lab/office/vue | Vue 3 适配器与 v-model:content | | @a3s-lab/office/web-component |与框架无关的自定义元素 | | @a3s-lab/office/core |模型、模板、导入/导出、文件工作流程和 Yjs 绑定 | | @a3s-lab/office/styles.css |共享编辑器和交互系统样式|

可复制的集成位于 组件文档。

文件保留文件

Core API 可以在不安装编辑器的情况下导入和导出文件:

import {
  createArtifact,
  createArtifactBlob,
  importOfficeFile,
} from '@a3s-lab/office/core';

const shell = createArtifact('blank-document');
const artifact = await importOfficeFile(file, {
  artifactId: shell.id,
  onProgress: ({ stage, progress }) => {
    console.info(stage, Math.round(progress * 100));
  },
});

const output = await createArtifactBlob(artifact);

导入的 DOCX 工件是有源支持的。安全、未经编辑的包装部件和 稳定的本土身份在有限的规则下得以保留;不支持或 不安全的结构会产生兼容性诊断或显式失败 而不是附加到错误的内容。结构化文档值也可以 通过版本化快照编解码器跨进程边界。

请参阅 文档, 电子表格, 演示文稿,以及 PDF 文件特定参考 合同。

无需捆绑云的协作

每个编辑器都通过以下方式公开相同的传输中立协作边界 Yjs/Yrs 内容和意识。浏览器用户、本机副本、CLI 会话、 MCP 客户端和 A3S Code可以参与同一主机拥有的文档。

A3S Office 提供特定于格式的绑定、本地撤消、验证存在、 远程选择或位置、评论、建议和本地冲突 分型突变。主机提供房间、认证、授权、 交付、离线缓冲、持久性和 Y.Doc。

这种分离使得协作成为可选的基础设施,而不是一个 强制帐户或存储服务。从 【协作指南](https://a3s-lab.github.io/Office/docs/components/collaboration.html) 或可运行的 A3S启动示例。

自动化,无需 UI 抓取

Rust CLI、标准 MCP 服务器、类型化 Rust API 和打包的 Office Skill 共享相同的有界文件合约:

# Validate and inspect a file.
cargo run -p a3s-office-cli -- validate report.docx --json
cargo run -p a3s-office-cli -- view report.docx outline --json

# Apply an exact guarded mutation.
cargo run -p a3s-office-cli -- set report.docx /body \
  --find Draft --replace Final --json

# Expose the same contracts over standard MCP.
cargo run -p a3s-office-cli -- mcp

本机协作副本可以交换标准 Yjs 更新和状态 矢量,然后应用键入的文档、Markdown、电子表格、演示文稿和 PDF 突变无需解释 Office 的私有 CRDT 架构。

阅读自动化指南 和 CLI 参考。

在编码代理使用缓存的指导之前,请验证打包的技能合同 与cargo run -p a3s-office-cli -- skills manifest a3s-office --json(或 安装后a3s-office skills manifest a3s-office --json)。的 清单包括 SKILL.md 和每个的字节数和 SHA-256 值 捆绑参考。

对于浏览器编辑器工作,请使用存储库的本地操作符而不是 组装临时 shell 条件。它是一个基于 Commander 的 CLI,其中包含一个 Writer、电子表格、演示文稿、Markdown 和 PDF 的声明矩阵:

bun run office:ops -- plan all --json
bun run office:ops -- capabilities --json
bun run office:ops -- doctor --json
bun run office:ops -- gate writer --run \
  --browser-driver standalone \
  --cdp-port 9345
bun run office:ops -- visual spreadsheet --project compact-768

office-ui-ops plan <surface> --json 是该矩阵的类型化清单入口 (bun run office:ops -- plan <surface> --json)。

声明性运算符检查重点 A3S 测试 ACL; gate --run 将它们作为主要交互合约来执行,而 Playwright 只是一个 补充桌面/紧凑像素基线。屏幕截图和诊断保留 低于.a3s-test/office-ops/。它从不轮询 CI 或更改已提交的视觉效果 基线。使用 a3s agent start/observe/act/finish 进行有界探索 会话和 a3s cua certification --json 在本机 GUI 工作之前。上锁的 目前不支持 CUA 驱动程序 0.10.0 Windows 配置文件,因此 Windows 浏览器编辑器证据使用 A3S Test Web/CDP。在 Windows 上, 提供 --cdp-port 自动编译本机 .exe 适配器 .a3s-test/office-ops/,将交互式参数排除在 .cmd 解析之外。 bun run office:ops -- wps-probe --connector 捕获有界的 WPS COM 用于 UI/OOXML 奇偶校验的参考;该探测器是证据,而不是产品 运行时。使用--connector-type straight|elbow|curved选择键入的WPS 通过 Commander CLI 参考形状。 wps-fields-probe --profile numeric|common --json 记录已安装的WPS数字或公共字段 指令并馈送相应的 A3S 测试夹具;它同样是一个 显式的本地引用捕获,从来都不是 CI 的先决条件。 wps-ui-probe --profile shell|fields|all --json 记录已安装的WPS Writer 窗口 shell、功能区/状态栏和与字段相关的命令 ID 作为 输入 JSON UX 参考。它启动并关闭一个拥有的 COM 实例,因此 收据可以指导 UI 决策,而无需将 WPS 转变为产品运行时或 CI 依赖性。

对于探索性浏览器工作,同一个 Commander 操作员公开类型化的 A3S 测试代理操作:click、hover、focus、double-click、context-click、 fill、type、check、uncheck、select、drag、press、wheel、 viewport、等待、断言、屏幕截图、可访问性、控制台和页面 错误。使用显式目标语法(@e7、css=...、role=role|name、 label=...、placeholder=...、testid=...、automation=... 或 text=...) 并保持 A3S 测试observe → one action → observe 生命周期。这保持 Codex 编辑器操作可在所有五个表面上键入和重现。

当前版本

版本 0.246.0 在应用后把页眉页脚撤销/重做与移除链接焦点留在功能区:

  • 页眉页脚功能区撤销/重做与移除链接,以及内联页眉页脚工具栏撤销/重做与移除链接,在应用时不再调用 TipTap chain().focus(),延迟的编辑器焦点不会抢走触发按钮上的 L2 页眉页脚编辑循环。通过提示对话框添加链接后仍会还原页眉页脚编辑器焦点。

更早的版本请查看产品向 更新日志 时间线,以及完整工程 CHANGELOG。在线 Playground 从带版本标签的模板网格暴露这些工作流。

能力和边界

A3S Office 优先显式保真边界,而不是静默近似。 Supported 表示该路径具备确定性行为或原生往返证据。 Partial 表示已有可用路径,但边界已文档化。

文档

强路径: 结构化写作、分页、表格、引用、审阅、大篇幅纯文窗口、源感知 DOCX 往返, 以及文档 PDF 导出中的可搜索 Latin Helvetica 矢量文本(可选宿主注册 CJK)。

边界: 长尾 DrawingML、域、精确版式对齐、完整 PDF/UA 结构树,以及未注册的非 Latin PDF 字形仍为部分支持或失败软化。

电子表格

强路径: 稀疏编辑、依赖感知公式、表格、 排序/筛选、验证、图表、数据透视、XLSX 往返,以及保留工作簿 原生的 1900 或 1904 日期系统。

边界: 公式覆盖面、外部数据、宏、加载项和专业 分析仍不完整。

演示文稿

强路径: 场景编辑、母版/版式、切换、有界进入 动画、演示者流程,以及 PPTX 往返。

边界: 更广的形状、效果、媒体、动画族,以及精确 打印/视频输出仍为部分支持或未支持。

Markdown

强路径: GFM 源码与可视化编辑、同步预览、 协作、直接往返,以及原生自动化。

边界: Markdown 保持格式原生,而不是充当一切 富文档结构的转换层。

PDF

强路径: PDFium 渲染、搜索、表单、批注、保存,以及 有界页面组织。

边界: 现有内容流编辑、OCR、签名、优化,以及 可信密文处理需要明确的 Provider 或后续引擎。

完整能力清单、优先级与退出证据见 能力路线图。协作交付另有 路线图。

项目状态

A3S Office 仍处于 1.0 之前。公共模型与组件 props 已可用,但 次要版本仍可能包含破坏性模型变更。必要迁移 记录在 变更日志。

目标是可预期的浏览器编辑与诚实的文件保留,而不是 与每个桌面套件功能像素级对齐。不受支持的语义保持为 可见的兼容性边界。 编辑器质量路线图 记录 推进每个边界所需的证据。

开发

在仓库根目录运行标准检查:

bun install --frozen-lockfile
bun run format:check
bun run lint
bun run typecheck
bun run test
bun run build

聚焦的本地 A3S Test 门禁覆盖首次打开焦点与 IME 组合:

bun run test:e2e:initial-focus:check
bun run test:e2e:initial-focus
bun run test:e2e:presentation-chinese-ime:check
bun run test:e2e:presentation-chinese-ime

受控 Document IME 生命周期也会在 CI 中对 Playwright 固定的 WebKit 引擎运行:

bun run playground:ime:webkit

GitHub Actions 不要求安装 A3S Test。完整验证矩阵见 CONTRIBUTING.md、 E2E 指南 与 视觉测试指南。

文档

社区与安全

欢迎贡献。发起变更前请先阅读 贡献指南 与 行为准则。疑似漏洞请通过 SECURITY.md 中的私密流程报告,不要公开议题。

许可证

A3S Office 以 MIT License 提供。捆绑的 PDFium 与其他第三方 资产的附加声明见 THIRD_PARTY_NOTICES.md。