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

acture-ai-vercel

v2.0.0

Published

Project an acture registry as Vercel AI SDK tool definitions. Requires AI SDK v5+ (inputSchema). Tier-filtered; errors-as-data; converts each command's Zod params to JSON Schema so the wire contract is ours, not the SDK's bundled converter's.

Readme

acture-ai-vercel

acture is a development tool first. This package is an optional accelerator — an agent can hand-write this integration into your project instead, with no acture-* dependency. Installing it is a deliberate, opt-in choice to reuse tested code rather than own it. See docs/positioning.md.

Project an acture registry as Vercel AI SDK tool definitions. Drop directly into streamText({ tools }) / generateText({ tools }).

Install

pnpm add acture-ai-vercel ai acture zod

Requires AI SDK v5 or later (ai@^5 || ^6 || ^7), where a tool's schema field is inputSchema. For ai@^4 — which called it parameters — use acture-ai-vercel@1. Staying on v4 is not recommended: its final @ai-sdk/google predates Gemini 3 and drops the thoughtSignature Gemini 3 requires you to echo back, so multi-step tool calling fails outright.

Use

import { streamText, isStepCount } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
import { toAITools } from 'acture-ai-vercel';
import { registry } from './registry';

const result = streamText({
  model: anthropic('claude-sonnet-5'),
  tools: toAITools(registry),
  prompt: 'Add three nodes labeled A, B, C and connect them in a triangle.',
  stopWhen: isStepCount(8),
});

for await (const part of result.fullStream) {
  // ...
}

Tier filter

Default: { tiers: ['stable'] }. Pass tiers: ['stable', 'experimental'] to expose experimental commands to the model.

@deprecated banners

Description rewrites to [DEPRECATED] <original> so the model sees the deprecation before composing tool calls.

Errors-as-data

Tool execute resolves to:

{ ok: true,  value: ... }        // on success
{ ok: false, error: { code, message, details } }  // on failure

The model sees the same shape on every surface (palette, hotkeys, MCP, AI SDK). This is the central guarantee of acture's architecture.

Why convert to JSON Schema (not pass Zod through)?

The AI SDK accepts a Zod schema on inputSchema directly, but we convert each command's params up front with Zod 4's native z.toJSONSchema() and hand the SDK a ready schema via jsonSchema().

This keeps the wire schema ours: what the model sees is decided here, not by whichever Zod-to-JSON-Schema converter the SDK happens to bundle. That coupling has already bitten us once — ai v4 shipped a Zod-v3-only converter that, given a Zod v4 schema, silently emitted {}. The model then saw a tool with no parameters and could not call it, with no error anywhere.

Runtime validation is unaffected. registry.dispatch still validates against the original Zod schema, so refinements JSON Schema cannot express (z.refine predicates and friends) are still enforced on every dispatch — the JSON Schema is only what the model is shown.

See also