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

@ingram-tech/eve-ingram-cloud

v0.2.1

Published

eve adapter for Ingram Cloud — run an Ingram smith as an eve agent's model over the OpenAI-compatible API, attach an Ingram-hosted deployment's tools as an eve MCP connection, and resolve human-in-the-loop approvals. Standards-first; no proprietary protoc

Readme

@ingram-tech/eve-ingram-cloud

Wire an Ingram Cloud smith into an eve agent. A thin, idiomatic extension of eve: run a smith as your agent's model, attach Ingram-hosted tools as an MCP connection, and resolve approvals — each over an industry-standard surface, no bespoke protocol.

Philosophy: stand on the standard

This package adds no proprietary client. The model rides Ingram Cloud's OpenAI-compatible API as a plain AI SDK LanguageModel (eve takes one directly); tools ride MCP through eve's own connection system; approvals ride the standard tool-call channel. A smith still runs the agent loop server-side — memory, tools, approvals, isolation — but to eve it looks like any model.

Install

npm install @ingram-tech/eve-ingram-cloud

eve and ai are peer dependencies — you already have them in an eve project.

Model: a smith as your agent's model

eve's model takes an AI SDK LanguageModel, so a smith drops straight into agent/agent.ts:

// agent/agent.ts
import { defineAgent } from "eve";
import { ingramCloudModel } from "@ingram-tech/eve-ingram-cloud";

// A per-smith token names exactly one smith; the agent is the one that smith runs.
export default defineAgent({
  model: ingramCloudModel({ apiKey: process.env.IC_SMITH_TOKEN! }),
});

eve routes this as an external provider — it bypasses the AI Gateway and talks to Ingram Cloud directly.

The model id is the LLM, not the agent

The agent a smith runs — its instructions, tools, and memory — is resolved from the smith, never from the model id. modelId is the upstream inference LLM for the turn: omit it to use the smith's configured model, or name one to override it (ingramCloudModel({ apiKey, modelId: "gpt-5.5" })).

Opt into Ingram Cloud's server-side memory with threadId. Server-side with a tenant-admin token instead of a smith token? Name the smith with smithId:

ingramCloudModel({ apiKey: process.env.IC_TENANT_TOKEN!, smithId: "smt_…" });

Never ship a tenant-admin token to the browser.

Tools: Ingram-hosted MCP as an eve connection

Expose an Ingram Cloud deployment of kind: "mcp" as an eve connection. The filename is the connection name:

// agent/connections/ingram.ts
import { defineIngramMcpConnection } from "@ingram-tech/eve-ingram-cloud";

export default defineIngramMcpConnection({
  apiKey: process.env.IC_SMITH_TOKEN!,
  deploymentId: "dep_…",
  description: "Ingram-hosted tools for this smith.",
});

eve discovers the deployment's tools, brokers auth, and hands them to the model — the token never reaches the model. Gate them with eve's own per-connection approval (never() / once() / always() from eve/tools/approval) or filter with tools: { allow: [...] }.

This is distinct from ingramCloudModel: there a smith runs its own server-side tools as the model; here an eve agent calls Ingram-hosted tools directly over MCP.

Approvals (human-in-the-loop)

A smith tool marked destructiveHint pauses its run for approval. On the OpenAI-compatible surface the pause arrives as a tool call whose id is "<run_id>::<tool_call_id>" and the turn ends with finish_reason: "tool_calls". The helpers are pure and also live at @ingram-tech/eve-ingram-cloud/approvals:

import {
  getApprovalRequests,
  approvalToolResult,
} from "@ingram-tech/eve-ingram-cloud";

// `toolCalls` from the model result (composite ids are Ingram approvals).
const approvals = getApprovalRequests(toolCalls);
for (const a of approvals) {
  const decision = (await askTheHuman(a)) ? "approve" : "reject";
  // Append this `tool` message and run the next turn to resume the paused run.
  messages.push(approvalToolResult(a, decision));
}

On approve, Ingram Cloud executes the tool itself and continues; on reject, the run completes with stop_reason: "approval_rejected" and nothing runs. These are the smith's server-side approvals — distinct from eve's per-connection approval gate above.

Identity & tokens

| Token | Use | How the smith is chosen | |---|---|---| | Smith token (sub = "<tenant>:<smith>") | browser-safe; the default | the token is the smith | | Tenant-admin token | server-side only | pass smithId (sent as IC-Smith-Id) |

Notes

  • ESM-only, ships as dist/. Build with npm run build (plain tsc).
  • Built on @ingram-tech/ai-sdk-adapter (the model seam) — for the same product over the raw Vercel AI SDK or Flue (@ingram-tech/flue-ingram-cloud), reach for those.
  • Independent of the API's api/web checks, like the pulumi/, ai-sdk-adapter/, and flue/ packages. Keep it in step when the OpenAI-compatible / MCP surfaces it wraps change.