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

@eforge-build/input

v0.7.12

Published

Reusable input-artifact protocols for eforge: playbooks and session plans that compile to ordinary build source.

Readme

@eforge-build/input

Reusable build-input protocols for eforge - playbook and session-plan artifacts that compile to ordinary build source.

Consumers

  • @eforge-build/monitor - daemon playbook routes and normalizeBuildSource for session-plan source paths before enqueue
  • @eforge-build/eforge - in-process normalization for CLI build commands that accept session plans or playbooks as input
  • Future wrapper apps that need to compile playbooks or session plans to build source independently of the daemon

Dependencies

  • Depends on @eforge-build/scopes for scope directory lookup and named-set resolution
  • Does NOT depend on @eforge-build/engine

The engine consumes normalized PRD/build source; it has no knowledge of where that source originated. This keeps the engine input-agnostic.

What's included

Playbooks

Playbooks are Markdown files with YAML frontmatter encoding a reusable build intent. They resolve across all three scope tiers via @eforge-build/scopes named-set resolution.

  • parsePlaybook(content) - parse a playbook Markdown file
  • serializePlaybook(playbook) - serialize a playbook to Markdown
  • validatePlaybook(playbook) - validate playbook structure
  • listPlaybooks(opts) - list all playbooks across scope tiers with shadow annotations
  • loadPlaybook(name, opts) - load the highest-precedence playbook by name
  • writePlaybook(playbook, opts) - write a playbook to a scope directory
  • movePlaybook(name, opts) - move a playbook between scope tiers
  • copyPlaybookToScope(name, opts) - copy a playbook to a target scope
  • playbookToBuildSource(playbook) - compile a playbook to ordinary build source for the engine queue
  • playbookToSessionPlan(playbook) - deprecated alias for playbookToBuildSource

Session plans

Session plans are Markdown files in .eforge/session-plans/ that accumulate decisions during a structured /eforge:plan conversation. They are project-local only and compile to ordinary build source.

Lifecycle

A session plan moves through the following status values:

| Status | Meaning | |--------|---------| | planning | Actively being built up during a planning conversation | | ready | All required dimensions are filled; can be enqueued | | submitted | Enqueued to the daemon build queue; eforge_session is set in frontmatter | | abandoned | Discarded; excluded from active listings |

listActiveSessionPlans returns only planning and ready plans. submitted and abandoned plans are excluded.

Parse / serialize

  • parseSessionPlan(content) - parse a session plan Markdown file
  • serializeSessionPlan(plan) - serialize a session plan to Markdown

List / load / write

  • listActiveSessionPlans(opts) - list all active (planning or ready) session plans in the project-local scope
  • loadSessionPlan(opts) - read and parse a session plan by session identifier (path-traversal safe)
  • writeSessionPlan(opts) - serialize and atomically write a session plan to disk; constrained to <cwd>/.eforge/session-plans/

Path resolution

  • resolveSessionPlanPath(opts) - resolve a session identifier to <cwd>/.eforge/session-plans/<session>.md; throws on path traversal attempts

Dimension helpers

  • selectDimensions(plan) - resolve required/optional/skipped dimension sets for a plan
  • checkReadiness(plan) - check whether all required dimensions have substantive content; returns { ready, missingDimensions }
  • getReadinessDetail(plan) - like checkReadiness but also returns coveredDimensions and skippedDimensions arrays
  • migrateBooleanDimensions(plan) - migrate legacy boolean dimension format to the current schema

Mutation helpers

All mutation helpers return a new SessionPlan value; they do not write to disk. Use writeSessionPlan after composing mutations.

  • createSessionPlan(opts) - create a fresh SessionPlan with canonical frontmatter in planning status
  • setSessionPlanSection(plan, dimensionName, content) - append or replace a ## {Dimension Title} section in the plan body; heading is derived from the kebab-case dimension name (e.g. 'acceptance-criteria'## Acceptance Criteria)
  • skipDimension(plan, name, reason) - add or update an entry in skipped_dimensions
  • unskipDimension(plan, name) - remove an entry from skipped_dimensions
  • setSessionPlanStatus(plan, status, metadata?) - update status; when status is 'submitted', metadata.eforge_session is required
  • setSessionPlanDimensions(plan, opts) - apply planning_type/planning_depth and write required_dimensions/optional_dimensions using the canonical dimension map; no-op on existing explicit lists unless overwrite: true

Build source compilation

  • sessionPlanToBuildSource(plan) - compile a session plan to ordinary build source for the engine queue

Boundary normalization

  • normalizeBuildSource(input) - single chokepoint for session-plan handling: if a source path matches **/.eforge/session-plans/*.md, parses the plan and converts it to ordinary build source; other paths pass through unchanged

The matcher contract is **/.eforge/session-plans/*.md. Paths that do not match this pattern are returned unchanged.

Boundary

This package compiles input artifacts (playbooks, session plans) to ordinary build source. The engine consumes that source and has no dependency on @eforge-build/input. See docs/architecture.md for the full package dependency diagram.

Out of scope

  • No daemon HTTP client - use @eforge-build/client for daemon-backed flows
  • No engine queue knowledge - this package normalizes input before the engine sees it
  • No new CRUD or tool API surface - wire-protocol additions belong in @eforge-build/client
  • No conversational planning logic - the /eforge:plan skill owns structured planning conversations

Stability

  • Public exports are stability-promised within a major version.
  • Breaking changes bump the major version and are noted in the release.