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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@a5c-ai/a5c

v1.26.2

Published

a5c SDK and CLI for normalizing and enriching repo/CI events for agentic workflows

Downloads

12,162

Readme

99% built by agents codecov

@a5c-ai/a5c — a5c SDK & CLI

Turn raw GitHub Actions/webhook payloads into a consistent Normalized Event (NE) that agents and automations can trust. Enrich with repo context, extract @mentions, generate prompt context, apply rules, and emit composed events. Use it as a CLI in CI or as a programmatic SDK.

  • Commands: a5c normalize, a5c enrich, a5c mentions, a5c generate_context, a5c reactor, a5c emit, a5c validate, a5c run (see docs for full flags)
  • Output: JSON to stdout or file
  • Provider: GitHub first; adapter surface enables more providers
  • Safe by default: offline enrichment unless explicitly enabled

See: docs/cli/reference.md, docs/specs/ne.schema.json, docs/user/sdk-quickstart.md.

What It Is

Purpose: a minimal, predictable events layer for agentic workflows.

Scope:

  • Normalize provider payloads to the NE schema
  • Enrich with repository metadata (offline by default; optional GitHub API)
  • Extract @mentions from PRs, issues, commits, and code diffs
  • Generate task/prompt context from templates (generate_context)
  • Apply rule-based reactors to produce composed events
  • Validate against the NE JSON Schema

Supported GitHub types: workflow_run, pull_request, push, issue, issue_comment, check_run, release, deployment/deployment_status, job (workflow_job), step (when granular), alert (e.g., code/secret scanning).

Ownership semantics (routing): enrichment computes owners_union — the sorted, de‑duplicated union of CODEOWNERS matches across changed files. Unlike GitHub’s last‑rule‑wins, union semantics support broader, safer routing. Details: docs/routing/ownership-and-routing.md.

Branch model: a5c/main is development/staging; main is production.

Install

Prerequisites: Node.js 20.x (see .nvmrc).

npm install @a5c-ai/a5c
# CLI-only
npm install -g @a5c-ai/a5c

Quick Start (CLI)

# Normalize a payload file
npx @a5c-ai/a5c normalize \
  --in samples/workflow_run.completed.json \
  --out out.json

# Peek a few fields
jq '.type, .repo.full_name, .provenance.workflow?.name' out.json

# Validate against the NE schema (quiet on success)
a5c validate --in out.json --schema docs/specs/ne.schema.json --quiet

Smoke Test

Run a fast, offline end-to-end check that chains normalize → enrich → validate using bundled samples. Produces out.ne.json and out.enriched.json in the repo root.

npm run smoke
# expected: exit code 0, quiet validation
ls -1 out.ne.json out.enriched.json

Enrich offline vs online:

# Offline (default; no network calls)
a5c enrich --in samples/pull_request.synchronize.json --out enriched.offline.json

# Online (requires token)
export GITHUB_TOKEN=ghp_xxx
a5c enrich --in samples/pull_request.synchronize.json --use-github --out enriched.online.json

Mentions scanning (examples):

# Disable code-comment scanning over changed files
a5c enrich --in ... --flag 'mentions.scan.changed_files=false'

# Restrict languages
a5c enrich --in ... --flag 'mentions.languages=ts,js'

Canonical flags and defaults live in docs/cli/reference.md#events-enrich and #mentions-scanning.

Reactor Quick Start

Run the reactor locally against a bundled sample PR event using the default rules path .a5c/events/ (loads all *.yaml|*.yml recursively). A single-file rules path like .a5c/events/reactor.yaml is also supported via --file:

npm run reactor:sample | jq '.events | length'
# expected: 1

# Or view the produced events
npm run reactor:sample | jq
  • Default rules path is the directory .a5c/events/ (recursive YAML load). You can also point to a single file such as .a5c/events/reactor.yaml using --file.
  • Full CLI reference: docs/cli/reference.md#events-reactor.

Quick Start (SDK)

See docs/user/sdk-quickstart.md for a minimal example using mapToNE, enrichGithub, and helpers.

GitHub Actions Example

End‑to‑end recipe (normalize → enrich → reactor → emit): docs/ci/actions-e2e-example.md.

- name: Normalize current run
  run: |
    npx @a5c-ai/a5c normalize \
      --source actions \
      --in "$GITHUB_EVENT_PATH" \
      --out event.json

- name: Enrich (offline by default)
  run: |
    a5c enrich --in event.json --out event.enriched.json

CLI Overview

  • a5c normalize — Map provider payload to NE. Filters/selectors available.
  • a5c enrich — Add metadata, mentions, ownership, correlations; optional --use-github.
  • a5c mentions — Extract @mentions from files/stdin.
  • a5c generate_context — Render templates from file/github URIs with the event as data.
  • a5c reactor — Apply rules to NE and emit composed events.
  • a5c emit — Emit composed events to sinks (stdout by default) and optionally run side-effects (labels, scripts, status checks). See docs/cli/reference.md#events-emit.
  • a5c validate — Validate NE (and enriched documents) against JSON Schema.
  • a5c run — Profile-based AI provider runner (experimental). See reference: docs/cli/reference.md#events-run.
  • a5c parse — Parse streaming provider logs to JSON events (experimental). See reference: docs/cli/reference.md#events-parse.

Full command/flag reference: docs/cli/reference.md.

Logging

  • Global flags on every command:
    • --log-level <info|debug|warn|error> → sets env A5C_LOG_LEVEL (default: info)
    • --log-format <pretty|json> → sets env A5C_LOG_FORMAT (default: pretty)
  • In CI, prefer --log-format=json for structured logs.
  • See global flags in docs/cli/reference.md#global-flags and additional notes in docs/observability.md.

Troubleshooting

  • Offline vs online: enrichment is offline by default. Pass --use-github to enable API calls. Without a token, the CLI exits with code 3 and prints an error; no JSON is emitted by the CLI path. Details: docs/cli/reference.md#a5c-enrich.
  • Tokens and precedence: set A5C_AGENT_GITHUB_TOKEN or GITHUB_TOKEN (the former takes precedence). Some commands like generate_context also use tokens for github:// templates.
  • Exit codes: 0 success; 1 generic error; 2 input/validation error (missing --in, invalid JSON, filter mismatch); 3 provider/network error (e.g., --use-github without a token).
  • CI convenience: export A5C_EVENTS_AUTO_USE_GITHUB=true to auto‑enable --use-github when a token exists (default remains offline). See docs/cli/reference.md#a5c-enrich.
  • Rate limits: for github:// templates and online enrichment, prefer A5C_AGENT_GITHUB_TOKEN and use --log-format=json to surface errors clearly in CI. Retries/backoff are limited; reduce calls or cache inputs when possible.

NE Schema

Core fields produced by normalize include id, provider, type, occurred_at, repo, ref, actor, payload, labels, provenance. Enrichment adds enriched and optional composed[] (from rules).

  • JSON Schema (canonical): docs/specs/ne.schema.json
  • Overview: docs/cli/ne-schema.md

Ref note: ref.type is branch | tag | unknown. PRs use branch semantics; ref.base/ref.head carry branch names. There is no pr enum value.

CI Checks

Guidance and required checks: docs/ci/ci-checks.md.

  • PRs: quick checks (Lint, Typecheck, Tests, commit hygiene)
  • Protected branches (a5c/main, main): build + full tests with coverage

Validate locally: npm run -s validate:examples.

Configuration

Environment variables:

  • A5C_AGENT_GITHUB_TOKEN / GITHUB_TOKEN — enable online GitHub enrichment
  • DEBUG=true — enable verbose logs in select paths
  • Logging toggles and observability: docs/observability.md

CLI defaults favor reproducibility in CI: explicit --in, write artifacts with --out.

Troubleshooting Tips

  • enrich --use-github exits 3 with "token required": set A5C_AGENT_GITHUB_TOKEN or GITHUB_TOKEN.
  • normalize --source actions fails with missing GITHUB_EVENT_PATH: pass --in FILE or run inside GitHub Actions.
  • emit --sink file without --out: specify an output path.
  • validate reports schema errors: inspect .errors[] for instancePath and message.
  • Slow or noisy logs: pass --log-format=json and control verbosity via --log-level.
  • generate_context with github://... URIs requires a token.

Development

  • Build: npm run build
  • Dev CLI: npm run dev
  • Lint/Typecheck/Format: npm run lint / npm run typecheck / npm run format
  • Commit conventions: Conventional Commits; local hooks via Husky + commitlint (see CONTRIBUTING.md and docs/dev/precommit-hooks.md)
  • Node policy: Node 20 LTS (see .nvmrc, package.json#engines)

Project structure:

  • src/cli.ts — CLI entry (mentions, normalize, enrich, generate_context, reactor, emit, validate)
  • src/providers/github/* — GitHub mapping/enrichment
  • docs/* — CLI reference, specs, CI examples, routing semantics

Links

  • How‑to guide: docs/user/how-to.md
  • CLI reference: docs/cli/reference.md
  • SDK quickstart: docs/user/sdk-quickstart.md
  • NE schema: docs/specs/ne.schema.json
  • Actions e2e example: docs/ci/actions-e2e-example.md
  • Ownership semantics: docs/routing/ownership-and-routing.md