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

ryanvogel-opencode-note-review

v0.4.1

Published

OpenCode TUI review-note plugin with shared note uploads and HTML/PDF report generation.

Readme

OpenCode Content Review

Shared OpenCode review-note tooling for model and release evaluations.

What It Does

  • Adds TUI slash commands: /note for shared review collection and /feedback for response-specific early-access feedback.
  • Lets the reviewer choose how many prompt/response pairs to capture.
  • Lets the reviewer select or create a shared tag through an authenticated Worker API.
  • Uploads each complete note to a Cloudflare Worker/D1 review store; /note does not save local copies.
  • Captures exact prompt text, model/version fields when available, reasoning effort, request IDs, tool inputs/outputs, and trace parts.
  • Correlates submitted feedback only when the selected response supports the early-access feedback flow.
  • Generates a minimal, academic-style HTML or PDF report.

/note collection and report generation use the shared remote store by default. The report CLI can still read local or exported note files when --input is provided.

Install From npm

Add the TUI plugin to .opencode/tui.json in the project where you want to review models:

{
  "$schema": "https://opencode.ai/tui.json",
  "plugin": [
    ["ryanvogel-opencode-note-review", {
      "defaultPairs": 1,
      "defaultTag": "General",
      "apiEndpoint": "https://feedback-notes.anoma.ly/v1",
      "authSecret": "replace-with-shared-auth-secret",
      "maxTextChars": 12000,
      "includeToolOutputs": true,
      "feedbackEndpoint": "https://feedback-intake.example.invalid/v1/response-feedback",
      "releaseChannel": "early-access"
    }]
  ]
}

Restart OpenCode after editing tui.json.

authSecret must match the Worker's AUTH_SECRET secret. This is a shared bearer credential: anyone who can read the plugin configuration can read and write shared review data through the API.

For the configured hosted review store and current shared setup prompt, open https://feedback-notes.anoma.ly/install.md.

Install the report CLI globally if you want the opencode-review command available outside OpenCode:

npm install -g ryanvogel-opencode-note-review

You can also run the report CLI with npm exec:

npx ryanvogel-opencode-note-review report --help

Set the shared API secret in your shell before generating API-backed reports:

export OPENCODE_REVIEW_AUTH_SECRET="replace-with-shared-auth-secret"

Run the report command without arguments for an interactive setup flow:

opencode-review report

It asks for report name, optional local notes input, output format, output path, and optional tag filter while showing defaults. Leave local notes input blank to retrieve notes from the hosted API. The default output filename includes the report name and current date.

Install For Local Development

Build the package:

bun install
bun run build

For local development, point .opencode/tui.json at the built file:

{
  "$schema": "https://opencode.ai/tui.json",
  "plugin": [
    ["/Users/ryanvogel/dev/opencode-content-review/dist/tui.js", {
      "defaultPairs": 1,
      "defaultTag": "General",
      "apiEndpoint": "https://feedback-notes.anoma.ly/v1",
      "authSecret": "replace-with-shared-auth-secret",
      "maxTextChars": 12000,
      "includeToolOutputs": true,
      "feedbackEndpoint": "https://feedback-intake.example.invalid/v1/response-feedback",
      "releaseChannel": "early-access"
    }]
  ]
}

Restart OpenCode after editing tui.json.

Usage

In an OpenCode session, run:

/note

The plugin asks for the number of prompt/response pairs to capture, fetches shared tags from the API, lets you select or create a tag, and then opens a note prompt. After confirmation it uploads the complete note to the configured API. It does not write a local note copy.

Each note is self-contained. For each captured pair, it stores the exact prompt, assistant output, model/provider IDs, request IDs when OpenCode exposes them, reasoning effort when available, token/cost metadata, tool inputs and outputs, raw message metadata, and trace parts such as reasoning, snapshots, patches, retries, and step markers.

Submit Feedback

Configure feedbackEndpoint with the feedback intake URL supplied for the early-access program, then run:

/feedback

The feedback flow selects an individual feedback-capable model response, requires one of Bug, Poor result, Good result, Safety concern, or Other, and requires written details. Submission includes the required correlation identifier for the selected response. If no feedback-capable response exists in the current session, the plugin does not submit feedback.

Before submission, the user chooses whether to include limited diagnostics. This option is off by default. With diagnostics disabled, the payload includes only the required response correlation, category, details, harness version, and configured release channel. With diagnostics enabled, it additionally includes only the model label for the selected response. It does not send captured prompts, response bodies, paths, tool inputs or outputs, raw trace data, or session identifiers, and it does not persist a local copy of submitted feedback.

Generate Report HTML

By default, the report CLI retrieves all available notes from https://feedback-notes.anoma.ly/v1 using OPENCODE_REVIEW_AUTH_SECRET or --auth-secret.

export OPENCODE_REVIEW_AUTH_SECRET="replace-with-shared-auth-secret"
opencode-review report \
  --out .opencode/reviews/reports/model-review.html \
  --title "GPT-5.5 Model Review"

Or after building:

opencode-review report --out .opencode/reviews/reports/model-review.html

If --title is omitted in an interactive terminal, the CLI asks for a report name. Default output filenames include the report name and current date, for example .opencode/reviews/reports/frontier-model-review-2026-05-13.pdf.

For a different deployed service, pass --api-endpoint <url>. To use local or exported notes instead of the API, --input can be a single .jsonl file, a single note .json file, or a folder. Folder inputs are scanned recursively for .jsonl files and note_*.json notes, then deduped by note ID.

Example combined folder workflow:

combined-notes/
  alice/note_20260511_120000_a1b2c3d4.json
  ben/notes.jsonl
  casey/reviews/notes/note_20260511_130000_e5f6g7h8.json
opencode-review report \
  --input combined-notes \
  --out reports/combined-model-review.pdf \
  --title "Combined Model Review"

Filter by tag:

opencode-review report \
  --tag gpt-5-5 \
  --out reports/gpt-5-5-review.pdf

Generate Report PDF

The CLI can render the report directly to PDF with headless Chrome. On macOS it automatically checks /Applications/Google Chrome.app/Contents/MacOS/Google Chrome; on other systems it checks common Chrome/Chromium executable names in PATH.

export OPENCODE_REVIEW_AUTH_SECRET="replace-with-shared-auth-secret"
opencode-review report \
  --pdf .opencode/reviews/reports/model-review.pdf \
  --title "GPT-5.5 Model Review"

Generate an AI-written abstract at the beginning of the report with OpenCode:

opencode-review report \
  --out .opencode/reviews/reports/model-review.pdf \
  --title "GPT-5.5 Model Review" \
  --abstract

Optional abstract controls:

opencode-review report \
  --out .opencode/reviews/reports/model-review.pdf \
  --abstract \
  --abstract-model opencode/gpt-5.5 \
  --abstract-variant high

For deterministic/manual reports, pass your own abstract text:

opencode-review report \
  --out .opencode/reviews/reports/model-review.pdf \
  --abstract-text "This report summarizes reviewer observations and supporting traces for the evaluated model."

You can also use a .pdf output path:

opencode-review report --out .opencode/reviews/reports/model-review.pdf

Useful PDF options:

  • --html <path> writes the intermediate HTML used for PDF rendering.
  • --keep-html writes a sidecar HTML file next to the PDF.
  • --chrome-path <path> uses a specific Chrome or Chromium executable.
  • --title <text> skips the interactive report-name prompt.
  • --tag <name> filters by tag name or tag folder ID.
  • --input <path> uses local/exported JSON or JSONL notes instead of the API.
  • --api-endpoint <url> selects another notes API endpoint.
  • --auth-secret <secret> passes API authentication directly; prefer OPENCODE_REVIEW_AUTH_SECRET in shell history-sensitive environments.
  • --abstract calls opencode run to generate a report abstract.
  • --abstract-text <text> uses a manual abstract instead of calling a model.
  • --abstract-model <provider/model> chooses the model for abstract generation.
  • --abstract-variant <variant> passes a provider variant/reasoning effort to opencode run.

Notes

  • Tool inputs and outputs are captured and uploaded by default for technical review evidence.
  • maxTextChars limits each prompt and response body to prevent accidental giant reports.
  • Use defaultPairs: "all" only for short review sessions.
  • Use defaultTag to change the default tag shown in the tag picker.