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

@atrib/summarize

v0.5.3

Published

Deprecated on npm; stays mounted through the D164 alias window. MCP server for atrib's verifiable action layer: summarizes signed records so agents read context, not raw bytes.

Readme

@atrib/summarize

MCP server exposing the summarize tool for atrib's verifiable action layer. It synthesizes a narrative across N records using an OpenAI-compatible LLM.

Deprecated on npm. summarize has no successor shape in the recall verb (D164): the read surface returns verified material and the caller synthesizes. The tool stays mounted through the alias window.

Closes the consumer-side cognitive-loop primitive companion to atrib-trace: trace returns the declared-relationship path; summarize returns the synthesized meaning across the selected records. Both read the same local mirror including the optional _local sidecar.

Install

pnpm add @atrib/summarize

Verify a local build with pnpm --filter @atrib/summarize test.

Tool

mcp__atrib-summarize__summarize({
  context_id?: string,        // 32-hex trace; summarize all records in it
  record_hashes?: string[],   // explicit list; unioned with context_id
  focus?: string,             // optional steering for the synthesis
  max_records?: number,       // cap on records fed to LLM (default 50, max 200)
  model?: string              // override model from env
})
→ {
  narrative: string | null,
  cited_record_hashes: string[],
  records_summarized: number,
  records_skipped: number,           // beyond max_records
  records_with_sidecar: number,      // had semantic content
  records_without_sidecar: number,   // legacy bare records, impoverished input
  model_used: string | null,
  warnings: string[]
}

LLM provider

OpenAI-compatible HTTP. Defaults to NVIDIA NIM with qwen/qwen3.5-397b-a17b. Override via env or per-call model input:

| Env var | Default | | ----------------------------- | ------------------------------------- | | ATRIB_SUMMARIZE_API_KEY | fallback to provider env/cache | | ATRIB_SUMMARIZE_BASE_URL | https://integrate.api.nvidia.com/v1 | | ATRIB_SUMMARIZE_MODEL | qwen/qwen3.5-397b-a17b | | ATRIB_SUMMARIZE_MAX_TOKENS | 4000 | | ATRIB_SUMMARIZE_TEMPERATURE | 0.3 | | ATRIB_SUMMARIZE_TIMEOUT_MS | 120000 |

Provider env/cache fallback:

| Provider URL contains | Env var | Cache file | | -------------------------- | -------------------- | ------------------------------------- | | integrate.api.nvidia.com | NVIDIA_API_KEY | ~/.atrib/secrets/nvidia-api-key | | api.cerebras.ai | CEREBRAS_API_KEY | ~/.atrib/secrets/cerebras-api-key | | cloudflare.com | CLOUDFLARE_API_KEY | ~/.atrib/secrets/cloudflare-api-key |

Without an API key, the tool returns a warnings-only response per the §5.8 graceful-degradation contract.

Reads

Same as @atrib/trace: every *.jsonl mirror under ~/.atrib/records/ (override via ATRIB_RECORDS_DIR). Tolerates both legacy bare-record and current envelope shapes.

Summarize reads _local.content first, then derives the same content shape from legacy wrapper or OpenInference sidecar fields when needed. OpenInference content can add span kind/name, tool/agent/model, prompt identifiers and templates, input/output, usage, cost, score, metadata, and topics to the synthesis prompt. Those fields stay local sidecar payload per D108; they are not promoted to signed protocol fields.

When a record lacks usable local content (legacy entry), the prompt includes a marker telling the LLM the input is impoverished, only event_type + cryptographic metadata is available, so the synthesis can be honest about gaps. The output reports records_with_sidecar and records_without_sidecar counts so callers know how rich the input was.

Behaviors

  • Selection: record_hashes ∪ records-with-matching-context_id, deduplicated.
  • Capping: chronological-ascending sort, then take max_records. Skipped count surfaced.
  • Honest input flagging: a per-record line in the prompt marks records lacking semantic content; the system prompt instructs the LLM not to invent semantics.
  • Network access only on LLM call: storage reads are local, but the selected record content is sent to the configured LLM endpoint (NVIDIA NIM by default) to produce the narrative. This is the one read primitive that sends mirror content off-machine. Point ATRIB_SUMMARIZE_BASE_URL at a self-hosted or local model to keep record content on-machine. Tests use the same FORBIDDEN_HOSTS guard as the rest of the workspace to prevent fixture leakage.
  • No retry on LLM failure: surfaces the error in warnings and returns null narrative. Caller decides whether to retry with smaller max_records or different model.
  • Instrumented (per D084 Surface 6): every call writes a per-invocation jsonl entry to ~/.atrib/state/read-primitives/calls.jsonl for the unified loop-closure analyzer. Includes elapsed_ms covering the full LLM round-trip plus errored: true on LLM failure paths. Silent-failure per §5.8; instrumentation never blocks the summarize response. ATRIB_READ_PRIMITIVES_LOG overrides the default path for tests.

Wire-up

Add to your MCP host config:

{
  "atrib-summarize": {
    "command": "npx",
    "args": ["-y", "@atrib/summarize"],
    "env": {
      "ATRIB_SUMMARIZE_MODEL": "qwen/qwen3.5-397b-a17b"
    }
  }
}

From a monorepo checkout, use "command": "node" with "args": ["/path/to/atrib-summarize/dist/main.js"] instead. The API key can live in the host env or in the cache file above. Do not write secret values into shared MCP config.

Relationship to the attest/recall rename (D164)

summarize has no successor shape in the recall verb. recall returns verified material; the caller synthesizes. The npm package is deprecated without a replacement pointer; the tool stays mounted through the alias window.

Status

Published and maintained. Unit tests cover record selection (by hash, by context, unioned, missing-skip) and the degradation paths (no inputs, no API key). An integration test against a real LLM is gated behind ATRIB_SUMMARIZE_API_KEY and not run in CI.

The companion atrib-trace is the structural primitive; together they close the consumer side of the cognitive loop.

Part of atrib

atrib is an open protocol for verifiable agent actions. Every action becomes a signed, chain-linked record that anyone can verify against a public Merkle log, with no operator to trust. This package is one entrypoint. See the full package family and the protocol spec.