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

@attalabs/aeg-core

v0.41.0

Published

The pure, no-I/O core of the AEG (Agentic Engineering Governance) engine.

Readme

@attalabs/aeg-core

The pure, no-I/O core of the AEG (Agentic Engineering Governance) engine.

Two capabilities, plus two small non-pure helpers:

  • Parse a repo's AEG artifacts — registry, tranche files, Issue/PR bodies, doc-owners bindings — into a typed model.

  • Derive — deriveTranche(tranche, forgeFacts) produces per-task derived status, the dependency/conflict graph, and dispatch eligibility. Status is never stored; it is always derived from forge facts.

  • ensureLabelExists (src/ensure-label.ts) — the idempotent "list, check, create" decision shared by every forge label-minting call site in this repo. Callers inject their own listLabelNames/createLabel I/O so this stays agnostic to shell mechanism and error-handling policy.

  • hardenedMeteringDeps (src/metering-io-guard.ts) — the MeteringCapabilityDeps every real caller of resolveMeteringCapability should build from, rather than hand-rolling existsSync/readFileSync. Refuses a symlink, a FIFO/blocking special file, or a foreign-owned file at the transcript-pointer path (O_NOFOLLOW | O_NONBLOCK + an fstat owner check) instead of following/hanging on/trusting one. claude-code-transcript.ts itself stays pure — this is a sibling module, the one other deliberate exception alongside ensure-label.ts to this package otherwise being no-I/O.

  • The Vinaya Log's typed policy layer (src/log/) — LogEventSchema (a zod union over the ten families: dispatch, dev_review_loop, forge_write, gate, operation, usage, role_attempt, handoff, effect, and custom), the pure buildHeader(input) envelope builder, and redact(value, home). No filesystem, network, or process here; the one write lives in @attalabs/vinaya's apps/cli/src/lib/log-sink.ts (apps/cli/specs/log.md).

  • The dev-review-loop's policy half (src/dev-review-loop/) — assessRound(state, observations) decides every transition of the developer/reviewer/CI loop (dispatch the developer, dispatch reviewers, ask for confidence, publish, or pause with a reason) and returns the DevReviewLoopEvents for the caller to pass to the injected log(); renderPublishedMarker(journal, head) renders the publication comment (one hidden marker line: the published head and each round's confidence — no round table) with no finding text and no line either verdict extractor would read as a real verdict. No filesystem, network, process, or vendor reference anywhere in this directory — the driver (dispatching the developer/reviewers, running CI, calling log()) lives elsewhere.

  • The task tools' catalog (src/task-tools.ts) — one typed entry per tool the task Operator may call, each carrying the purpose and boundaries text a server composes into the description it serves (apps/cli/src/lib/task-tools/server.ts), plus OPERATOR_TOOL_GRANT, the closed set of tools that Operator holds. That text is the only documentation the caller is served, so it states which run states a tool acts on and names the tool that owns each one it does not — a caller handed a refusal always has a next tool to call, and a state one tool continues is never described as another's. Where the path a tool launches is weaker than the tool that owns a state (a continuation that accepts any standing ruling, say, against one that requires a ruling newer than the pause it answers), the text says so rather than implying a gate the launched path does not have.

The bin/ directory carries the check binaries (verify-dispatch, verify-docs, verify-coherence, open-pr, open-issue, …) that mechanize the AEG gates. They are consumed through the @attalabs/vinaya CLI, which bundles this package at build time. verify-dispatch's Depends-on/Conflicts-with resolver understands three edge shapes — a same-tranche bare task id, a bare #NNN Issue reference, and the cross-tranche <slug> <n> form — resolving the last one via the same tranche derivation used for the task's own tranche; an edge matching none of these reports UNRESOLVABLE rather than being read as an unmerged dependency. dispatch-gate.ts's and coherence-checks.ts's failures each carry a closed, machine-readable class (DispatchBlockerClass, CoherenceFailureCode) beside the human message string, so a consumer's recovery-prompt switch can be exhaustive over it rather than parsing message text — a new class with no matching prompt fails typecheck instead of silently routing to the wrong advice.

Two src/*.test.ts files double as self-audit gates over this package's own tree, both src/ and bin/: symbol-collisions.test.ts refuses a name declared in more than one non-test source file (a baselined KNOWN_COLLISIONS set covers what's already there), and no-binary-sources.test.ts refuses a tracked file that git treats as binary — either a literal NUL byte or a .gitattributes binary marking.

This package is published as TypeScript source (main points at ./src/index.ts) — consume it with Bun or a TS-aware bundler, not plain Node.

Part of the fixed release group @attalabs/aeg-types / @attalabs/aeg-forge-state / @attalabs/aeg-core / @attalabs/vinaya-sources / @attalabs/vinaya: all five always share one version, and internal dependencies are pinned exactly.

License

Licensed under the Functional Source License, Version 1.1, with an Apache-2.0 future license (FSL-1.1-ALv2) from version 0.35.0 — see LICENSE. Versions 0.34.0 and earlier were released under Apache-2.0 and stay Apache-2.0.