{"_id":"@ai-craft/agent-llm","name":"@ai-craft/agent-llm","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.1":{"name":"@ai-craft/agent-llm","version":"0.1.1","description":"Native multi-provider LLM client for @ai-craft/sandbox agents","type":"module","main":"./index.js","module":"./index.js","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"}},"engines":{"node":">=22.0.0"},"license":"MIT","publishConfig":{"access":"public"},"dependencies":{"@anthropic-ai/sdk":"^0.92.0","openai":"^6.35.0","ai":"^4.3.0","@ai-sdk/azure":"^1.3.0"},"_id":"@ai-craft/agent-llm@0.1.1","_integrity":"sha512-dRwrX39zgktLae5TOrCv2jfYxqqu6GAPDEEyXLGa+MdGqoG7pv4R0G8xipgKThjv2riJZaUOaeRJ2b1G7tA7sw==","_resolved":"/private/var/folders/_j/tzygz83s12v4rnxgchnxz55m0000gp/T/d568c2d804502899c9a2beb6fd73d337/ai-craft-agent-llm-0.1.1.tgz","_from":"file:ai-craft-agent-llm-0.1.1.tgz","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-dRwrX39zgktLae5TOrCv2jfYxqqu6GAPDEEyXLGa+MdGqoG7pv4R0G8xipgKThjv2riJZaUOaeRJ2b1G7tA7sw==","shasum":"8d1de2198479cddf7dbc90be83db645516415f1a","tarball":"https://registry.npmjs.org/@ai-craft/agent-llm/-/agent-llm-0.1.1.tgz","fileCount":981,"unpackedSize":4325947,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCby3g4/RcXitj+TZhv7UQI1SdpdpuHNK0l6v/vtkUQqAIgYSXCBQImvnGRiEiI/DaAob/nTyQ2UNaRWZ24LFjTJQU="}]},"_npmUser":{"name":"volkz","email":"delacruzd93@gmail.com"},"directories":{},"maintainers":[{"name":"volkz","email":"delacruzd93@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-llm_0.1.1_1784450393247_0.4165037874449491"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-19T08:39:53.082Z","0.1.1":"2026-07-19T08:39:53.441Z","modified":"2026-07-19T08:39:53.629Z"},"maintainers":[{"name":"volkz","email":"delacruzd93@gmail.com"}],"description":"Native multi-provider LLM client for @ai-craft/sandbox agents","license":"MIT","readme":"# @ai-craft/agent-llm\n\nNative multi-provider LLM client for sandboxed agent workloads.\n\n## Install\n\n```bash\nnpm install @ai-craft/agent-llm\n```\n\n## Quickstart\n\n```ts\nimport { createFake } from '@ai-craft/agent-llm';\n\nconst llm = createFake();\n\nconst res = await llm.chat({\n  messages: [{ role: 'user', content: 'Say hi' }],\n});\n\nconsole.log(res.content);\nconsole.log(res.usage); // { inputTokens, outputTokens, ... }\n```\n\nFor real Anthropic, swap `createFake()` with `createAnthropic({ model, tier })`. Auth is resolved from `ANTHROPIC_API_KEY` (api-key mode) or an OAuth credentials file written by `ai-agent auth login` (subscription mode).\n\n```ts\nimport { createAnthropic } from '@ai-craft/agent-llm';\n\nconst llm = createAnthropic({ model: 'claude-sonnet-4-5', tier: 'routine' });\n```\n\nFor Azure AI Foundry (OpenAI deployments on Azure), use `createFoundry`:\n\n```ts\nimport { createFoundry } from '@ai-craft/agent-llm';\n\nconst llm = createFoundry({\n  endpoint: 'https://my-resource.openai.azure.com/',\n  apiKey: 'my-api-key',\n  deploymentName: 'gpt-4o',\n  model: 'gpt-4o',\n  tier: 'routine',\n});\n```\n\n`endpoint` and `apiKey` fall back to `AZURE_AI_FOUNDRY_ENDPOINT` and `AZURE_AI_FOUNDRY_API_KEY` env vars respectively. `deploymentName` must be provided either via the option or `AZURE_AI_FOUNDRY_DEPLOYMENT_NAME` — no silent fallback.\n\n## Auth modes\n\n| Mode | Trigger | Cost accounting |\n|---|---|---|\n| `api-key` | `ANTHROPIC_API_KEY` env var set | Per-token billing, BudgetGate enforces USD cap |\n| `subscription` | OAuth credentials file present (Claude Pro/Max/Team) | No USD cap; rate-limit halts only |\n\nThe `auth` mode is exposed on every `LLMClient` so the agent loop can skip USD budget checks under subscription.\n\n## Provider matrix\n\n| Provider | Status | Notes |\n|---|---|---|\n| `anthropic` | real | API key + OAuth refresh, prompt caching, streaming |\n| `openai` | real | API key auth, tool calls, streaming, prefix-cache detection |\n| `azure-foundry` | real | Vercel AI SDK, rate-limit retry, real streaming via Azure OpenAI |\n| `fake` | real | Deterministic fixtures for tests via `createFake()` |\n\n## LLMClient interface\n\nEvery provider returns a uniform shape:\n\n```ts\ninterface LLMClient {\n  readonly provider: LLMProvider;\n  readonly auth: AuthMode;\n  readonly model: { id: string; tier: 'routine' | 'architect' };\n  with(opts: { tier?: Tier; model?: string }): LLMClient;\n  chat(req: ChatRequest): Promise<ChatResponse>;\n  stream(req: ChatRequest): AsyncIterable<StreamEvent>;\n  cacheControl(block: ContentBlock): ContentBlock;\n}\n```\n\n`with({ tier: 'architect' })` returns a sibling client pinned to the architect-tier model — the agent loop uses this to escalate planning steps without rebuilding the auth chain.\n\n## Prompt caching\n\nAnthropic prompt caching is exposed via `applyEphemeral`:\n\n```ts\nimport { applyEphemeral } from '@ai-craft/agent-llm';\n\nconst cached = applyEphemeral({ type: 'text', text: longSystemPrompt });\n// cached.cacheControl === { type: 'ephemeral' }\n```\n\nCache hits are reported back through `Usage.cacheReadTokens` and `Usage.cacheCreationTokens`.\n\n## License\n\nMIT. Part of the [@ai-craft](https://github.com/aicraft-sdk) monorepo.\n","readmeFilename":"README.md","_rev":"1-8841509447848607abd764aff6f714d3"}