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

@openeditor/workspace

v0.0.43

Published

Provider-neutral virtual workspaces for agents that edit OpenEditor projects. The package does not run a model, own a chat interface, or persist application data. It projects a trusted project snapshot into ordinary JSON files, then validates the complete

Readme

@openeditor/workspace

Provider-neutral virtual workspaces for agents that edit OpenEditor projects. The package does not run a model, own a chat interface, or persist application data. It projects a trusted project snapshot into ordinary JSON files, then validates the complete filesystem result and returns one atomic changeset.

Workspace format

OPENEDITOR.md                  protected agent instructions
site.json                      editable project metadata and page graph
pages/<stable-page-id>.json    editable canonical OpenEditor documents
.openeditor/workspace.json     protected format, policy, revision, and limits
.openeditor/pages.json         protected page baseline fingerprints
.openeditor/schema.json        protected host-provided schema context

The host-side WorkspaceBaseline is the trust root. It is deeply frozen and is never written into the workspace. Files under .openeditor/ help the agent understand the projection, but imports trust the host baseline instead of those files and reject any protected-file change.

Export, run, import

import {
  InMemoryWorkspaceFileStore,
  importProjectWorkspace,
  materializeProjectWorkspace,
} from "@openeditor/workspace";

const store = new InMemoryWorkspaceFileStore();
const baseline = await materializeProjectWorkspace(project, store, {
  documentValidation: { contract },
});

// A sandbox adapter now exposes `store` as real files to its agent.

const result = await importProjectWorkspace(baseline, store, {
  documentValidation: { contract },
  validateCrossDocumentReferences(nextProject) {
    return validateConsumerReferences(nextProject);
  },
});

if (!result.ok) {
  console.error(result.diagnostics);
} else {
  // This adapter must compare and commit in one real storage transaction.
  await applyProjectChangeset(transactionalProjectStore, result.changeset);
}

Sandbox-backed stores should implement readSnapshot() so imports observe one filesystem state. They should implement replaceFiles() when materialization must be atomic. The generic fallback detects file-list races but cannot prove that a same-path write did not race a read.

Stable IDs

Every non-text node must have a unique stable openeditor-id before export. Workspace creation is a strict trust boundary and never repairs source data. New pages use IDs matching page_[a-z0-9]{20,32}; existing page IDs must use the broader workspace-safe convention.

Commit boundary

ProjectChangeset is a proposal, not a database mutation. Consumers must apply it transactionally and reject it if the current project revision or any expected page fingerprint differs. fingerprintProjectPage, fingerprintProjectSnapshot, and fingerprintSiteManifest are exported so a consumer can reproduce the same preconditions against current application state.

The function-free validation contract manifest is fingerprinted into the host baseline. Import fails if the consumer omits or changes the contract used at export. Custom validator functions are represented by their presence, so a consumer must bump schemaVersion whenever validator behavior changes.

Portable contracts encode explicit child types and root constraints, but they do not attempt to execute every ProseMirror content-expression feature. A host whose configured Tiptap schema is authoritative should also provide validateDocument using validateOpenEditorTiptapDocument (or its configured engine wrapper). Custom blocks intended inside built-in containers must be included explicitly in the composed portable container rules.

PolicyEnforcedWorkspaceFileStore is the least-privilege facade intended for agent tools. It allows protected files to be read but limits writes to site.json and pages/*.json, validates paths, and enforces file budgets.