Skip to content
PluginStats

@lushly-dev/afd-core weekly downloads statistics

By lushly-dev (4 listings) · npm · MCP servers

Core types and utilities for Agent-First Development

View on npm Stale · Oct 17, 2026

@lushly-dev/afd-core has 16,328 recorded weekly downloads on npm, an increase of 168% over the past 30 days, ranking #804 of 2,256 tracked listings.

Weekly downloads
16,328
Official API · Oct 17, 2026
7-day growth
+8.7%
+1.3K weekly downloads
30-day growth
+168%
+10.2K weekly downloads
90-day growth
+3715%
+15.9K weekly downloads
Rank
#804
Among tracked npm listings

About @lushly-dev/afd-core

@lushly-dev/afd-core

Core types and utilities for Agent-First Development.

Installation

Overview

This package provides the foundational types used across all AFD packages:

• CommandResult - Standard result type with UX-enabling fields • CommandError - Actionable error structure • CommandDefinition - Full command schema with handler • MCP types - Model Context Protocol types for agent communication

Entry points

| Import | Contents | Runs in |

| @lushly-dev/afd-core | All types and helpers; not connectors or platform | Node.js and browsers | | @lushly-dev/afd-core/commands | Command types, defaultExpose, validateCommandName, createCommandRegistry, MCP tool conversion | Node.js and browsers | | @lushly-dev/afd-core/result | CommandResult, success, failure, error, isSuccess, isFailure | Node.js and browsers | | @lushly-dev/afd-core/connectors | GitHubConnector, PackageManagerConnector and their types | Node.js only | | @lushly-dev/afd-core/platform | exec, findUp, isWindows and other process helpers | Node.js only |

Connectors live in their own subpath

GitHubConnector and PackageManagerConnector spawn processes through node:child_process, so they are exported only from the connectors subpath:

Since 2.0 the root entry no longer re-exports them, so it bundles for the browser (for example with esbuild --bundle --platform=browser).

Contract version

AFD_CONTRACT_VERSION is the version of the AFD contract this package implements: the wire shapes, pipeline variables, behavior vectors and conformance suite that the TypeScript, Python, Rust and C++ implementations share (spec/VERSION). It is independent of the package version. afd-help reports it as contractVersion.

Running processes

exec(['git', 'status'], options) from the platform subpath never uses a shell. It captures at most maxOutputBytes (default 10 MiB, DEFAULT_MAX_OUTPUT_BYTES) from each of stdout and stderr. Past that it kills the process and returns errorCode: 'OUTPUT_LIMIT_EXCEEDED' with the output captured up to the limit.

Usage

Creating Command Results

Using Type Guards

isSuccess checks only success === true, so a void command's success(undefined) is a success. isFailure checks only success === false, so every result is exactly one of the two, and { success: false } without an error is a failure. Results built with failure() always carry an error; read one from an untrusted peer defensively (result.error?.code).

Defining Commands

The registry follows the same rules as the MCP server:

• Pass { interface: 'mcp' } (or 'cli', 'agent', 'palette') as the context to execute, executeBatch or executeStream and the command's expose options are checked on every entry point, including each batch entry. • executeBatch validates the whole request with isBatchRequest() before running anything, and options.timeout is a deadline at any parallelism. • A handler that throws returns COMMAND_EXECUTION_ERROR without the exception message or stack. Pass createCommandRegistry({ devMode: true }) to include them.

Batch and stream execution live in executeBatch() and executeStream(), which take an execute callback like executePipeline(), so other hosts can reuse the same semantics. The MCP server uses them too.

executeStream() does not stream incrementally: the command runs to completion, then its result is turned into chunks (one data chunk per array item, or one for any other value, then complete). StreamableCommand is metadata only. registry.executeStream(name, input, { signal, timeout }) honors both options: timeout is a deadline for the whole stream, after which the command's signal aborts and the stream ends with a STREAM_TIMEOUT error chunk, even if the command ignores the signal.

Creating Errors

MCP Integration

Pipelines

executePipeline runs chained steps; the server's afd-pipe tool and DirectClient.pipe both use it. Variable references follow spec/pipeline-variables.md, which Python and Rust implement too:

• A string is a reference only when the whole string is $prev, $first, $steps[N], $steps. or $input, optionally followed by . (user.name, items[2], items.2). $prev is the last successful step. Other strings ($9.99, $HOME) pass through unchanged, $$ sends a literal $ ('$$USD' becomes '$USD'), and strings over 1024 characters are literals. • $input is the request's input field. It is never the executor's context; before this change it resolved to that context, so trace IDs, auth or other host values could be copied into a command input. • Paths follow only own keys of plain JSON objects and in-bounds array indices. constructor, proto, any __-prefixed segment and array length never resolve. • An unresolved reference is omitted from an object and becomes null in an array. In when conditions it is absent: $exists is false and every comparison with it is false. • Step inputs or a request input nested deeper than 64 levels fail with VALIDATION_ERROR before any step runs. A malformed request fails with INVALID_PIPELINE_REQUEST. • Step data is copied (structuredClone) when it is recorded and when it is resolved, so a handler that mutates its input cannot change another step's data. • Steps run one after another. options.parallel: true and a step with stream: true are not implemented: the offending step (step 0 for parallel) fails with UNSUPPORTED_OPTION and every other step is skipped, before any command runs. PipelineStep.stream and options.onProgress are deprecated; onProgress is accepted but never called.

Types

CommandResult

The standard return type for all AFD commands:

CommandError

Actionable error structure:…

Description from the npm listing.

  • afd
  • agent-first
  • mcp
  • ai-agents
  • command-schema

README badge

Show your rank in a README or on your website. The badge updates automatically.

Charts

Images: 30d · 1y · all time · 1600×900 dark

Adoption over time

@lushly-dev/afd-core weekly downloads on npm, last 90 days: 16,328 weekly downloads as of Oct 17, 2026, +3715% over 90 days.@lushly-dev/afd-coreWeekly downloads on npm · Last 90 days16,328downloads / week+3715% over 90 days010K20K30K40K50KJul 19Aug 3Aug 18Sep 2Sep 17Oct 2Oct 17downloads / weekobservedarchived (Internet Archive)no observationsJul 22, 2026 – Oct 17, 2026 · 88 observations · Updated Oc…pluginstats.com
@lushly-dev/afd-core weekly downloads on npm, last 90 days: 16,328 weekly downloads as of Oct 17, 2026, +3715% over 90 days.

7/30/90-day growth

@lushly-dev/afd-core weekly downloads growth on npm: +8.7% over 7 days, +168% over 30 days, +3715% over 90 days.@lushly-dev/afd-coreWeekly downloads growth on npm16,328downloads / week now7-day growth+1,304 weekly downloads+8.7%30-day growth+10,230 weekly downloads+168%90-day growth+15,900 weekly downloads+3715%Growth vs. nearest observation to each baseline date · Updated Oct 17, 2026pluginstats.com
@lushly-dev/afd-core weekly downloads growth on npm: +8.7% over 7 days, +168% over 30 days, +3715% over 90 days.

Ranking history

@lushly-dev/afd-core npm ranking history: currently #804 (by weekly downloads).@lushly-dev/afd-corenpm ranking · by weekly downloads · Last 90 days#804current rank#200#300#400#500#600#700#800#900Jul 21Aug 5Aug 20Sep 4Sep 19Oct 4Oct 19rankOct 17, 2026 – Oct 19, 2026 · 3 observations · Updated Oct 17, 2026pluginstats.com
@lushly-dev/afd-core npm ranking history: currently #804 (by weekly downloads).

Listing placement

All npm2,256 listings · 113 pages · 1,130 shown · page 41, #4 (overall #804)
All npm: every listing in weekly downloads order

Listing placement

MCP servers255 listings · 13 pages · page 6, #12 (overall #112)
MCP servers: every listing in weekly downloads order

Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.

Each band is one page of 20. Weekly downloads on a linear scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.

Recent observations

Full history (543)
Recent weekly downloads observations for @lushly-dev/afd-core
Date (UTC)Weekly downloadsChange vs. previous
16,328-4.7K
21,041+7.6K
13,434-2.5K
15,969-1.8K
17,7480
17,748+3K
14,771-253
15,024+1.6K
13,470-1.6K
15,064+370
14,694-1.4K
16,056-3.9K
19,969-1.1K
21,102—

Similar npm MCP servers plugins

All 20 @lushly-dev/afd-core alternatives

Data source

Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.

Listing: https://www.npmjs.com/package/@lushly-dev/afd-core. First seen Oct 16, 2026; last successful collection Oct 19, 2026. See the methodology.