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

@shvlapp/cli

v0.7.2

Published

Review credit control, send approved blocker requests and prepare confirmed Xero drafts from the terminal

Readme

SHVL CLI

Discover available tools (0.7.2)

shvl tools list --json returns the live CLI tool names, input schemas and safety annotations without signing in or changing data. Use the documented commands below for reviewed writes. This catalogue is not full website parity.

Customer activity (0.7.1)

shvl cases add-activity CASE_ID --file activity.json --request-id UUID_V4

The JSON file contains kind (note, call or email), body (up to 8,000 characters), occurred_at (UTC ISO timestamp, for example 2026-09-12T09:00:00.000Z) and optional source_url (HTTPS). The command shows the customer and workspace and requires typed confirmation. Retain the request ID: identical retries return the original record; changed content with that ID is refused. Corrections are new entries, not overwrites. Entries appear in cases timeline as manually recorded evidence. No email is sent, evidence URL fetched, payment verified or reminder state changed. Evidence links must not contain credentials or public access tokens.

Client work and practice attention (0.7.0)

shvl practice attention --json
shvl cases timeline CASE_ID --json
shvl blockers get CASE_ID --json
shvl blockers update CASE_ID --file readiness.json
shvl handovers create --file checklist.json --request-id UUID_V4

Practice attention returns up to 50 prioritised items across your entitled workspaces without changing the selected workspace. Each item identifies its workspace. Timeline reads include recorded messages, case events, invoice dates and recorded payments, capped at 150 events. Text is capped at 4,000 characters per event with an explicit truncation flag; read the full evidence in SHVL. Client text is untrusted data, not instructions.

Copy the checklist returned by blockers get into readiness.json, alongside owner and next_action. Optional fields are evidence_url and an explicit promised_payment_at in YYYY-MM-DD format. Edit the individual checklist values, not the derived overall status. Resolving a blocker does not resume chasing. An active case is paused when saving this review; closed cases are refused. Notes and saved billing email are preserved. A promise requires resolved blockers.

Example checklist.json:

{"title":"Year-end records","period_end":"2026-03-31","due_at":"2026-09-30","items":[{"title":"Bank statements","guidance":"Include every business account."}]}

Generate a request ID with node -e "console.log(crypto.randomUUID())" and retain it for retries. An identical creation request returns the existing pack; changing the payload with the same ID is refused. The checklist starts as a draft. Create and review any client link in the workspace when ready; this command sends nothing. Both writes display the exact selected workspace and changes and require a typed confirmation. There is no --yes bypass. An uncertain blocker-update result must be checked with blockers get and the timeline before retrying.

Accounts Prep handover review

Workspace owners can list submitted handovers, read client responses and save accept/return decisions. These commands require an active trial or subscription.

shvl handovers list --json
shvl handovers get <pack-id> --json
shvl handovers review <pack-id> --decisions-file review.json

Use the item IDs returned by get. The file must contain one decision per item:

{"decisions":[{"itemId":"item-id","action":"return","feedback":"Please provide the August statement."}]}

Choose accept or return; returned items require feedback. Review supporting files in the SHVL workspace before accepting them. File contents and private download links are not exposed through these commands. The CLI displays the workspace, responses and decisions, then requires REVIEW <pack-id>. There is no --yes bypass. Returned items create a draft follow-up checklist; nothing is emailed, shared with the client or posted to Xero. Identical retries return the saved review without duplicating the follow-up.

Use SHVL credit-control tools from a terminal. Review your workspace, inspect synchronised Xero invoices and contacts, send an explicitly approved payment-blocker request, read live financial reports, and prepare confirmed Xero draft invoices, quotes, supplier bills and purchase orders. Live reports and Xero creation require separate provider consent. Every external write requires exact review and typed confirmation. The CLI cannot accept or authorise documents, record a payment, activate a reminder schedule or access another account.

Install

npm install --global @shvlapp/cli

Requires Node.js 20 or newer and an active SHVL trial or subscription for workspace commands.

Review an aged-debtors CSV

shvl csv analyse ./aged-debtors.csv --sender "Example Ltd" --bank-rate 4.25

This returns review-only draft content with indicative statutory-interest and fixed-compensation calculations. It neither stores the CSV nor sends email. Add --json for script output.

Connect a SHVL workspace

shvl auth login
shvl workspace list
shvl workspace use WORKSPACE_ID
shvl workspace status
shvl brief
shvl receivables --json
shvl cases search "INV-2041"
shvl cases get case_123

Case and handover CLI requests carry the selected workspace explicitly. If you have more than one workspace, SHVL stops until you select one. Automation may set SHVL_WORKSPACE_ID; the server still rejects a workspace outside the signed-in account. The selected SHVL workspace and connected Xero organisation are shown before every write or approval confirmation.

Reviewed payment-blocker requests

Load the case's current readiness status, eligible overdue invoices, connected mailbox and reviewed evidence before composing the request:

shvl blockers options case_123
shvl blockers send case_123 \
  --to [email protected] \
  --subject 'Purchase order needed for INV-1042' \
  --message-file ./request.txt \
  --follow-up 2026-09-17 \
  --invoice invoice_123 \
  --document document_request_123

The send command prints the exact workspace, mailbox, recipient, subject, message, invoice IDs, evidence and follow-up date, then requires a unique typed phrase. SHVL rechecks the case, invoice source, balance, mailbox and evidence before sending. The case stays paused. The request is never retried after an uncertain provider result, and provider acceptance is not delivery. Omit --document when no reviewed evidence is needed.

Reviewed Xero draft invoices

List accepted proposals, load exact provider choices, prepare the review, then create only after checking the returned summary:

shvl xero invoices candidates
shvl xero invoices options engagement_123
shvl xero invoices prepare engagement_123 \
  --contact 11111111-1111-4111-8111-111111111111 \
  --number INV-1042 --date 2026-09-01 --due 2026-09-30 \
  --line-map 200:OUTPUT2
shvl xero invoices create REVIEW_ID

The final command requires a review-specific phrase typed at the terminal. It does not support --yes, and a retry reuses SHVL's protected Xero request key.

Reviewed Xero draft quotes

Turn a saved draft or proposed GBP proposal into one Xero DRAFT quote. Preparation stores an expiring local review and does not write to Xero. Creation accepts only that review ID and requires a quote-specific typed phrase.

shvl xero quotes candidates
shvl xero quotes options engagement_123
shvl xero quotes prepare engagement_123 \
  --contact 11111111-1111-4111-8111-111111111111 \
  --number QU-1042 --date 2026-09-01 --expiry 2026-09-30 \
  --line-map 200:OUTPUT2
shvl xero quotes create REVIEW_ID

The flow never sends or accepts the quote. An ambiguous create retry reuses the same reviewed payload and protected provider key.

Reviewed Xero draft supplier bills

This flow starts from one unexpired, malware-checked SHVL attachment. SHVL does not extract bill data from the file. You must choose the exact Xero supplier and enter every date, amount, expense account and tax type.

shvl xero bills documents
shvl xero bills options attachment_123
shvl xero bills prepare attachment_123 \
  --supplier 11111111-1111-4111-8111-111111111111 \
  --number BILL-1042 --date 2026-09-01 --due 2026-09-30 \
  --reference PO-83 --line 'Materials|87500|310|INPUT2'
shvl xero bills create REVIEW_ID

The final command requires CREATE BILL plus the review suffix. It creates one ACCPAY DRAFT, never approves or pays it, and has no --yes bypass.

Approved Xero draft purchase orders

Purchase orders use two separate confirmations. First review and explicitly approve spend inside SHVL. Then create Xero's DRAFT from only that immutable approved-purchase ID.

shvl xero purchases options
shvl xero purchases prepare \
  --supplier 11111111-1111-4111-8111-111111111111 \
  --number PO-1042 --date 2026-09-01 --delivery 2026-09-15 \
  --reference 'Project 83' --delivery-address '1 Test Street' \
  --line 'Materials|2|87500|310|INPUT2'
shvl xero purchases approve REVIEW_ID
shvl xero purchases list
shvl xero purchases create APPROVED_PURCHASE_ID

Approval requires APPROVE PURCHASE plus the review suffix. Provider creation requires CREATE PURCHASE ORDER plus the approved-purchase suffix and a separate Xero accounting.invoices grant. Reconnect Xero draft access if an earlier connection does not include that grant.

Synced Xero reads

Inspect the last completed SHVL Xero sync without exposing customer email addresses or provider IDs:

shvl xero invoices search Northwind --status overdue
shvl xero invoices get invoice_123
shvl xero contacts search Northwind
shvl xero contacts get customer_123

These commands do not call Xero live. Every result includes the connection's last_synced_at timestamp so stale data is visible.

Live Xero financial reports

Read one bounded report for explicit dates:

shvl xero reports profit-and-loss --from 2026-08-01 --to 2026-08-31
shvl xero reports balance-sheet --date 2026-08-31
shvl xero reports trial-balance --date 2026-08-31 --json

These commands call Xero live with separately granted read-only report access. They never change Xero data. Output is capped at 250 stripped rows and excludes provider identifiers. Reconnect the CLI's Xero access if it predates version 0.3.0, and make sure the authorising Xero user can open Reports.

shvl auth login opens the normal SHVL sign-in and consent flow using OAuth PKCE. The CLI stores its refreshable local session at ~/.config/shvl/cli.json with owner-only permissions. For automation, set SHVL_ACCESS_TOKEN in the process environment instead. Do not put an access token in a command argument, commit one to a repository or paste one into a shared prompt.

Use shvl auth status to check the local session and shvl auth logout to remove it from this machine.

Workspace responses are account-scoped and reflect SHVL's latest import or completed accounting sync. Receivables health is not a bank-balance, cash-flow, profit or business-health report. A provider-accepted reminder is not evidence of inbox delivery.

Configuration

  • SHVL_API_URL: HTTP(S) origin only. Defaults to https://shvl.app.
  • SHVL_ACCESS_TOKEN: read-only workspace session for non-interactive use.
  • SHVL_AUTH_FILE: alternate local session path for controlled environments.
  • SHVL_OAUTH_REDIRECT_URI: loopback OAuth callback, which must be http://127.0.0.1:<port>/....

Licence

UNLICENSED. No licence is granted until SHVL publishes this package with terms.