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

msproject-gen

v0.2.1

Published

Generate Microsoft Project (MSPDI XML) files from a structured Markdown estimation.

Readme

Project Estimator

Generate Microsoft Project (MSPDI XML) files from a structured Markdown estimation.

What it does

  • Parses a Markdown estimation file into sections, tasks, and roles.
  • Calculates project management hours automatically.
  • Produces MSPDI XML and a CSV report.
  • Validates role hours and required sections.

Requirements

  • Node.js
  • TypeScript

Install

npm install

Install skill (short)

Copy the skill folder into your Codex skills directory so an agent can reuse it:

cp -R skills/msproject-gen ~/.codex/skills/msproject-gen

Install from registry (for reuse)

Install from your npm registry:

npm install msproject-gen

If you publish under a scope:

npm install @your-scope/msproject-gen

Run the CLI after install (use your own files):

npx msproject-gen \
  --template "/path/to/template.xml" \
  --input "/path/to/estimation.md" \
  --roles "/path/to/roles.yml" \
  --output "./project.xml" \
  --csv "./project.csv"

Publish

npm run publish:package

This runs npm publish, which triggers prepublishOnly to build before publishing. Only dist/ and docs are included in the package.

Quick start (local repo)

Build and run the CLI:

npm run build
node dist/cli.js \
  --template "example/Estimación Experian.xml" \
  --input inputs/estimacion_experian.md \
  --roles inputs/roles_map_final.yml \
  --output results/estimacion_experian_generated.xml \
  --csv results/estimacion_experian_generated.csv

Project layout

  • inputs/ Markdown inputs and the roles map.
  • example/ Golden MSPDI XML template and source artifacts.
  • results/ Generated XML/CSV outputs.
  • src/ Source code.
  • dist/ Compiled CLI output.

Input format (Markdown)

The file uses:

  • Front‑matter for project metadata.
  • # for sections.
  • ## (and deeper) for tasks.
  • work and roles under tasks.
  • Optional id and depends_on for dependencies.
  • Optional scheduling settings in front‑matter: project.calendar, project.workday_hours.

Example:

---
project:
  name: "Estimación Logitech"
  start_date: 2023-03-08T09:00:00
  pm_percentage: 13
  calendar: workdays
  workday_hours: 8
---

# 1. Entrega de Prerequisitos
enabled: yes

## Archivo de entrada
- type: CLIENTE
- notes: Entregar firmado

## Tarea interna
- work: 4h
- roles: AWS Software Developer=4h

Scheduling options:

  • project.calendar: workdays (Mon–Fri) or all_days (Mon–Sun).
  • project.workday_hours: hours per workday (default 8).

More examples:

Nested tasks:

# 6. Análisis y Diseño
enabled: yes

## Documento Tecnico
### Borrador inicial
- work: 3h
- roles: AWS Software Developer=3h

### Revisión
- work: 2h
- roles: Quality Engineer=2h

Disabled section:

# 8. Transición Ambiente QA
enabled: no

Role aliases (from the roles map):

## Pruebas funcionales
- work: 6h
- roles: QA=6h

Dependencies with IDs:

# 6. Análisis y Diseño
enabled: yes
id: analisis

## KickOff
- id: kickoff
- work: 0h
- roles: PM=0h

## Backend API
- id: backend
- work: 8h
- roles: AWS Software Developer=8h
- depends_on: kickoff

## Frontend UI
- id: frontend
- work: 8h
- roles: AWS Software Developer=8h
- depends_on: kickoff

Roles map (YAML)

inputs/roles_map_final.yml defines canonical roles and aliases. Roles found in the MSPDI template are merged at runtime.

Example snippet:

canonical_roles:
  - name: "AWS Software Developer"
    aliases:
      - Dev
      - Developer

CLI examples

Generate a Logitech estimation:

node dist/cli.js \
  --template "example/Estimación Experian.xml" \
  --input inputs/template_estimacion.md \
  --roles inputs/roles_map_final.yml \
  --output results/estimacion_logitech_generated.xml \
  --csv results/estimacion_logitech_generated.csv

Install and run from a registry in another project:

npm install msproject-gen
npx msproject-gen \
  --template "/path/to/template.xml" \
  --input "/path/to/estimation.md" \
  --roles "/path/to/roles.yml" \
  --output "./project.xml" \
  --csv "./project.csv"

Helper script (in this repo):

npm run estimate:experian

Agent usage

For a step‑by‑step agent workflow (install, inputs, dependencies, outputs), see:

  • docs/agent-usage.md

Tests and quality

npm test
npx ultracite check

Coverage target: 85% minimum.

Project rules (summary)

  • Use functions and plain objects (no classes).
  • Prefer data‑driven branching over if/else chains and ternaries.
  • Keep logic simple and explicit.
  • Use Vitest for tests and Ultracite for linting.

Output

  • MSPDI XML: results/*.xml
  • CSV report: results/*.csv