@usenaive-sdk/vetta
v0.3.0
Published
Typed TypeScript client for the Vetta API — agents, sessions, identities, and event streaming.
Readme
@usenaive-sdk/vetta
Typed TypeScript client for the Vetta API — agents, sessions, identities, connections, vaults, comms, deployments, webhooks, the model proxy, and a resumable event stream. One method per route, parsed with the same schemas the server does.
Install
npm i @usenaive-sdk/vettaNot published to a registry yet — this command 404s today. In-repo the package resolves as a workspace dependency.
Usage
import { randomUUID } from "node:crypto";
import { createClient } from "@usenaive-sdk/vetta";
const client = createClient({
baseUrl: "https://api.vetta.sh",
apiKey: process.env.VETTA_API_KEY!,
fetch: globalThis.fetch,
idempotencyKey: () => randomUUID(),
});
// `budget` is required: an agent with no spending ceiling is refused, not defaulted.
const agent = await client.agents.create({
name: "Refunder",
model: "zai-org/GLM-5.2-FP8",
window: "immediate",
budget: { cap_micro_usd: 50_000_000, max_task_micro_usd: 5_000_000, period: "month" },
});Configuring an agent's tools
configs is replaced wholesale on the wire, so changing one tool by hand means resending every
other one unchanged. withTool does that, and types the config the built-ins read —
WebToolConfig (web_search, web_fetch) and MediaToolConfig (generate_image,
generate_video). Omitted fields keep their current value and config merges key by key.
import { withTool } from "@usenaive-sdk/vetta";
await client.agents.update(agent.id, {
tools: withTool(agent.tools, "web_fetch", {
permission: "ask",
config: { allowed_domains: ["docs.example.com"], max_content_tokens: 2000 },
}),
});One model call, no session
client.proxy.messages is the Messages-format endpoint: one org-level call with no agent, no
tools and no state between calls. The completion window is the second argument, because the format
has no field for one. Streaming is deliberately absent — point the Messages-format client you
already have at <baseUrl>/v1/proxy/anthropic, which is what the endpoint exists for.
const reply = await client.proxy.messages(
{ model: "openai/gpt-oss-120b", max_tokens: 1024, messages: [{ role: "user", content: "hi" }] },
"priority",
);See the TypeScript SDK reference for the full method index.
