@agentguard-run/spend 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +1 -1
  3. package/README.es-419.md +28 -102
  4. package/README.md +50 -124
  5. package/README.pt-BR.md +28 -102
  6. package/dist/bindings/anthropic.d.ts +11 -0
  7. package/dist/bindings/anthropic.d.ts.map +1 -0
  8. package/dist/bindings/anthropic.js +116 -0
  9. package/dist/bindings/anthropic.js.map +1 -0
  10. package/dist/bindings/bedrock.d.ts +11 -0
  11. package/dist/bindings/bedrock.d.ts.map +1 -0
  12. package/dist/bindings/bedrock.js +177 -0
  13. package/dist/bindings/bedrock.js.map +1 -0
  14. package/dist/cli/auth.d.ts +7 -0
  15. package/dist/cli/auth.d.ts.map +1 -0
  16. package/dist/cli/auth.js +189 -0
  17. package/dist/cli/auth.js.map +1 -0
  18. package/dist/cli/colors.d.ts +8 -3
  19. package/dist/cli/colors.d.ts.map +1 -1
  20. package/dist/cli/colors.js +93 -4
  21. package/dist/cli/colors.js.map +1 -1
  22. package/dist/cli/demo.d.ts.map +1 -1
  23. package/dist/cli/demo.js +23 -2
  24. package/dist/cli/demo.js.map +1 -1
  25. package/dist/cli/main.d.ts +0 -6
  26. package/dist/cli/main.d.ts.map +1 -1
  27. package/dist/cli/main.js +36 -16
  28. package/dist/cli/main.js.map +1 -1
  29. package/dist/cli/models.d.ts +18 -0
  30. package/dist/cli/models.d.ts.map +1 -0
  31. package/dist/cli/models.js +277 -0
  32. package/dist/cli/models.js.map +1 -0
  33. package/dist/cli/tips.d.ts +21 -0
  34. package/dist/cli/tips.d.ts.map +1 -0
  35. package/dist/cli/tips.js +191 -0
  36. package/dist/cli/tips.js.map +1 -0
  37. package/dist/cli/wizard.d.ts +27 -0
  38. package/dist/cli/wizard.d.ts.map +1 -0
  39. package/dist/cli/wizard.js +182 -0
  40. package/dist/cli/wizard.js.map +1 -0
  41. package/dist/cost-table.d.ts +11 -36
  42. package/dist/cost-table.d.ts.map +1 -1
  43. package/dist/cost-table.js +114 -45
  44. package/dist/cost-table.js.map +1 -1
  45. package/dist/index.d.ts +6 -3
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +25 -8
  48. package/dist/index.js.map +1 -1
  49. package/dist/openrouter-catalog.d.ts +56 -0
  50. package/dist/openrouter-catalog.d.ts.map +1 -0
  51. package/dist/openrouter-catalog.js +183 -0
  52. package/dist/openrouter-catalog.js.map +1 -0
  53. package/dist/spend-guard.d.ts +38 -55
  54. package/dist/spend-guard.d.ts.map +1 -1
  55. package/dist/spend-guard.js +268 -83
  56. package/dist/spend-guard.js.map +1 -1
  57. package/dist/telemetry.d.ts.map +1 -1
  58. package/dist/telemetry.js +52 -21
  59. package/dist/telemetry.js.map +1 -1
  60. package/dist/templates/index.d.ts +17 -0
  61. package/dist/templates/index.d.ts.map +1 -0
  62. package/dist/templates/index.js +100 -0
  63. package/dist/templates/index.js.map +1 -0
  64. package/dist/types.d.ts +18 -3
  65. package/dist/types.d.ts.map +1 -1
  66. package/package.json +32 -4
  67. package/src/bindings/anthropic.ts +142 -0
  68. package/src/bindings/bedrock.ts +200 -0
  69. package/src/cli/auth.ts +145 -0
  70. package/src/cli/models.ts +236 -0
  71. package/src/cli/tips.ts +161 -0
  72. package/src/cli/wizard.ts +160 -0
  73. package/src/openrouter-catalog.ts +180 -0
  74. package/src/templates/agent-support.yaml +30 -0
  75. package/src/templates/chargeback-evidence.yaml +30 -0
  76. package/src/templates/code-scan.yaml +30 -0
  77. package/src/templates/index.ts +109 -0
  78. package/src/templates/payment-approval.yaml +30 -0
  79. package/src/templates/risk-review.yaml +30 -0
  80. package/tests/fixtures/openrouter-catalog.json +1 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.0
4
+
5
+ - Added streaming true-up for OpenAI, Anthropic, and Bedrock, including signed settlement entries.
6
+ - Added native TypeScript Anthropic and Bedrock bindings.
7
+ - Added OpenRouter model aliases, catalog sync, local pricing overrides, and auth CLI.
8
+ - Added models picker, guided wizard, tips system, and five task templates.
9
+ - Added public verifier demo receipt export and README quickstarts for the wizard flow.
10
+
11
+ ## 0.2.2
12
+
13
+ - Emit opt-in sdk_init beacon on package import so adoption metrics capture executed SDK loads before guard construction. Install IDs persist in ~/.agentguard/install.json and telemetry remains best effort.
14
+
3
15
  ## 0.2.1
4
16
 
5
17
  - Beacon endpoint moved from merchantguard.ai to agentguard.run for clean positioning. No SDK behavior change.
package/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- AgentGuard(TM) Spend SDK Alpha License
1
+ AgentGuard(TM) Spend SDK - Alpha License
2
2
  Copyright (c) 2026 Dunecrest Ventures Inc.
3
3
 
4
4
  1. SCOPE.
package/README.es-419.md CHANGED
@@ -1,128 +1,54 @@
1
1
  # @agentguard-run/spend
2
2
 
3
- > Límites de gasto de tiempo de ejecución local y enrutamiento de modelos con capacidades para agentes de IA.
4
-
5
- Cada decisión de política se ejecuta dentro de su proceso. Los prompts, claves API del proveedor y claves de firma nunca salen de su entorno de ejecución. Cada decisión de aplicación produce un recibo firmado con Ed25519, encadenado por hash, apto para auditoría y revisión de cumplimiento.
3
+ > Límites de gasto en runtime local, enrutamiento de modelos por capacidad y recibos firmados para agentes de IA.
6
4
 
7
5
  > Disponible también en: [English](README.md) · [Português (BR)](README.pt-BR.md)
8
6
 
9
- ## Por qué sin proxy
10
-
11
- Cada competidor financiado en gobernanza del gasto en IA (Portkey, Helicone, LiteLLM, Cloudflare AI Gateway, Vercel AI Gateway) usa proxy sobre su tráfico. Eso significa que sus prompts y claves de proveedor pasan por la infraestructura de ellos. `@agentguard-run/spend` nunca ve nada de eso. La política corre en su proceso. El registro firmado vive en su almacenamiento.
7
+ Cada decisión de política corre dentro de su proceso. Prompts, respuestas, claves API del proveedor, claves de firma, políticas y overrides de costo nunca van a infraestructura de AgentGuard. Las llamadas a OpenRouter salen directo desde su runtime hacia `openrouter.ai` con su clave.
12
8
 
13
- ## Instalación
9
+ ## Quickstart en 90 segundos
14
10
 
15
11
  ```bash
16
12
  npm install @agentguard-run/spend
17
- # o
18
- pnpm add @agentguard-run/spend
19
- # o
20
- yarn add @agentguard-run/spend
13
+ agentguard auth openrouter
14
+ agentguard wizard
21
15
  ```
22
16
 
23
- ## Inicio rápido
24
-
25
- ```ts
26
- import OpenAI from 'openai';
27
- import {
28
- withSpendGuard,
29
- AgentGuardBlockedError,
30
- type SpendPolicy,
31
- } from '@agentguard-run/spend';
32
- import { randomBytes } from 'crypto';
33
-
34
- const policy: SpendPolicy = {
35
- id: 'finance-ops-v1',
36
- name: 'Límites diarios de operaciones financieras',
37
- scope: { tenantId: 'acme-corp' },
38
- caps: [
39
- {
40
- amountCents: 500,
41
- window: 'per_day',
42
- action: 'downgrade',
43
- downgradeTo: 'gpt-4o-mini',
44
- reason: 'Límite blando diario alcanzado, enrutando al modelo más económico',
45
- },
46
- {
47
- amountCents: 2000,
48
- window: 'per_day',
49
- action: 'block',
50
- reason: 'Tope diario duro',
51
- },
52
- ],
53
- mode: 'enforce',
54
- version: 1,
55
- effectiveFrom: '2026-05-24T00:00:00Z',
56
- };
57
-
58
- const privateKey = new Uint8Array(randomBytes(32));
59
-
60
- const client = withSpendGuard(new OpenAI(), {
61
- policy,
62
- scope: { tenantId: 'acme-corp', agentId: 'finance-bot' },
63
- config: {
64
- policy,
65
- signingKeys: {
66
- privateKey,
67
- publicKey: new Uint8Array(32), // derivar de privateKey en producción
68
- },
69
- locale: 'es-419', // opcional - también detecta automáticamente
70
- },
71
- });
72
-
73
- try {
74
- const completion = await client.chat.completions.create({
75
- model: 'gpt-4o',
76
- messages: [{ role: 'user', content: 'Hola' }],
77
- });
78
- } catch (err) {
79
- if (err instanceof AgentGuardBlockedError) {
80
- // El mensaje será mostrado en español por el detector de locale
81
- console.error(err.message);
82
- }
83
- }
84
- ```
17
+ El wizard escribe `~/.agentguard/policy.yaml`, `~/.agentguard/quickstart.ts` y `~/.agentguard/quickstart.py`. También imprime el snippet listo para pegar en su app.
85
18
 
86
- Cuando se dispara la política:
19
+ ## Por qué OpenRouter
87
20
 
88
- | Acción | Resultado |
89
- |-------------|------------------------------------------------------------------------------------|
90
- | `allow` | La llamada pasa sin modificaciones |
91
- | `downgrade` | El parámetro `model` se reescribe a `downgradeTo`, luego la llamada continúa |
92
- | `block` | Se lanza `AgentGuardBlockedError` antes de contactar al proveedor |
93
- | `shadow` | La llamada pasa; la decisión se registra solo para análisis |
21
+ Una clave de OpenRouter da acceso a cientos de modelos de muchos proveedores. Finanzas ve una factura. AgentGuard aplica quién usa qué, qué tiers de tarea pueden llegar a qué modelos y cuánto puede gastar cada llamada. La clave vive en `OPENROUTER_API_KEY` o `~/.agentguard/openrouter-key` con modo `600`.
94
22
 
95
- ## Localización (v0.1.4+)
96
-
97
- Los mensajes de bloqueo legibles están localizados en **inglés (en-US)**, **español de América Latina (es-419)** y **portugués brasileño (pt-BR)**. La resolución del locale sigue la cadena de prioridad estándar:
23
+ ```bash
24
+ agentguard models --sync-pricing
25
+ agentguard models --task payment-approval
26
+ agentguard models --search gpt-4o --json
27
+ ```
98
28
 
99
- 1. Configuración explícita: `config: { locale: 'es-419', ... }`
100
- 2. Variable de entorno: `export AGENTGUARD_LOCALE=es-419`
101
- 3. Variables de entorno del sistema: `LC_ALL`, `LC_MESSAGES`, `LANG`
102
- 4. `Intl.DateTimeFormat().resolvedOptions().locale` (navegador / Deno / Bun)
103
- 5. Respaldo: `en-US`
29
+ Los overrides de precios se guardan localmente en `~/.agentguard/cost-overrides.json`.
104
30
 
105
- ## Estado
31
+ ## Verificar cualquier recibo
106
32
 
107
- Vista previa privada. Diseñado para integración empresarial, OEM y de plataforma.
33
+ Comparta https://agentguard.run/verify con su auditor. Pegue un recibo y la clave pública en el navegador para verificar firma Ed25519, hash de entrada y enlace de cadena. El recibo nunca sale de la página.
108
34
 
109
- Para acceso a evaluación, licencias OEM o consultas de asociación estratégica: `invest@agentguard.run`
35
+ ```bash
36
+ agentguard demo
37
+ agentguard verify --trace latest
38
+ ```
110
39
 
111
- ## Licencia y umbrales de uso
40
+ ## Templates de tarea
112
41
 
113
- El SDK es **gratuito** para:
42
+ `agentguard wizard` incluye `risk-review`, `payment-approval`, `chargeback-evidence`, `agent-support` y `code-scan`. Cada template define modelos OpenRouter recomendados, tier de capacidad, fallback, caps e instrucciones de sistema.
114
43
 
115
- - Evaluación, prototipado y desarrollo no comercial a cualquier volumen
116
- - Despliegues de producción que procesan **hasta 10 000 llamadas de aplicación por mes calendario**
44
+ ## Sin proxy
117
45
 
118
- Se requiere una licencia comercial separada para volúmenes mayores o redistribución. Consultas: `invest@agentguard.run`
46
+ AgentGuard Spend es una biblioteca, no un gateway. No proxyea tráfico, no guarda prompts, no retiene claves de proveedor y no aloja estado de política. El log firmado vive en su almacenamiento.
119
47
 
120
- ## Aviso de patentes
48
+ ## Telemetría
121
49
 
122
- Protegido por solicitudes de patente pendientes en EE. UU. (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626; 64/071,781; 64/071,789).
50
+ La telemetría es opt-in. Use `AGENTGUARD_TELEMETRY=1` o `agentguard telemetry enable`. El beacon envía solo versión del SDK, runtime, familia de OS, ID anónimo de instalación, flag de CI, flag de TTY y nombre del evento. No envía prompts, respuestas, claves de proveedor, claves de firma, detalles de política ni overrides de costo.
123
51
 
124
- ## Enlaces
52
+ ## Aviso de patentes
125
53
 
126
- - agentguard.run
127
- - Contacto: `invest@agentguard.run`
128
- - SDK Python: [`agentguard-spend`](https://pypi.org/project/agentguard-spend/)
54
+ Protegido por tecnología con patente pendiente en EE. UU. (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626; 64/071,781; 64/071,789). Aviso constructivo bajo 35 U.S.C. § 287. Patentes adicionales pendientes.
package/README.md CHANGED
@@ -1,165 +1,91 @@
1
1
  # @agentguard-run/spend
2
2
 
3
- > Local-runtime spend caps and capability-gated model routing for AI agents.
3
+ > Local-runtime spend caps, capability-gated model routing, and signed receipts for AI agents.
4
4
 
5
5
  > Also available in: [Español (LATAM)](README.es-419.md) · [Português (BR)](README.pt-BR.md)
6
6
 
7
- Every policy decision runs inside your process. Prompts, provider API keys, and signing keys never leave your runtime. Each enforcement decision produces an Ed25519-signed, hash-chained receipt suitable for audit and compliance review.
7
+ Every policy decision runs inside your process. Prompts, completions, provider API keys, signing keys, policies, and cost overrides never go to AgentGuard infrastructure. OpenRouter calls go directly from your runtime to `openrouter.ai` with your key.
8
8
 
9
- ## Why no proxy
9
+ ## Quickstart in 90 seconds
10
10
 
11
- Every funded competitor in AI spend governance (Portkey, Helicone, LiteLLM, Cloudflare AI Gateway, Vercel AI Gateway) proxies your traffic. That means your prompts and provider keys flow through their infrastructure. AgentGuard Spend never sees any of that. The policy runs in your process. The signed log lives in your storage.
12
-
13
- The procurement consequence: your security review covers this SDK like any other library, not like a vendor that handles your data.
14
-
15
- ## Status
16
-
17
- Private preview. Designed for enterprise, OEM, and platform integration.
18
-
19
- For evaluation access, OEM licensing, or strategic partnership inquiries: `invest@agentguard.run`
20
-
21
- ## Architecture
22
-
23
- ```
24
- Your code
25
-
26
-
27
- withSpendGuard(openai, { policy, scope })
28
- ├── estimate tokens
29
- ├── evaluatePolicy() ──► SpendStore (your storage)
30
- ├── signDecision() with Ed25519
31
- ├── append to DecisionLog (your storage)
32
- └── pass-through / downgrade / block
33
-
34
-
35
- Provider (OpenAI / Anthropic / Bedrock)
11
+ ```bash
12
+ npm install @agentguard-run/spend
13
+ agentguard auth openrouter
14
+ agentguard wizard
36
15
  ```
37
16
 
38
- No part of this picture sends data to AgentGuard infrastructure.
17
+ The wizard writes:
39
18
 
40
- ## Quick start
19
+ - `~/.agentguard/policy.yaml`
20
+ - `~/.agentguard/quickstart.ts`
21
+ - `~/.agentguard/quickstart.py`
41
22
 
42
- ```bash
43
- npm install @agentguard-run/spend
44
- ```
23
+ It also prints the snippet to paste into your app:
45
24
 
46
25
  ```ts
47
- import OpenAI from 'openai';
48
- import { randomBytes } from 'node:crypto';
49
- import * as ed from '@noble/ed25519';
50
- import {
51
- withSpendGuard,
52
- type SpendPolicy,
53
- } from '@agentguard-run/spend';
54
-
55
- // Generate or load your signing keys. They never leave your runtime.
56
- // In production these come from your HSM / KMS / Vault.
57
- const privateKey = randomBytes(32); // 32-byte Ed25519 secret seed
58
- const publicKey = await ed.getPublicKeyAsync(privateKey);
59
-
60
- const policy: SpendPolicy = {
61
- id: 'finance-ops-v1',
62
- name: 'Finance ops daily caps',
63
- version: 1,
64
- effectiveFrom: new Date().toISOString(),
65
- mode: 'enforce',
66
- scope: { tenantId: 'acme-corp' },
67
- caps: [
68
- {
69
- amountCents: 500,
70
- window: 'per_day',
71
- action: 'downgrade',
72
- downgradeTo: 'claude-sonnet-4-6',
73
- reason: 'Opus daily soft cap reached, route to Sonnet',
74
- },
75
- {
76
- amountCents: 1000,
77
- window: 'per_day',
78
- action: 'block',
79
- reason: 'Hard daily ceiling',
80
- },
81
- ],
82
- };
83
-
84
- const openai = new OpenAI();
85
- const guarded = withSpendGuard(openai, {
86
- policy,
87
- scope: { tenantId: 'acme-corp', userId: 'alice', agentId: 'finance-bot' },
88
- config: { signingKeys: { privateKey, publicKey } },
89
- });
90
-
91
- // Drop-in: same API as openai.chat.completions.create
92
- const completion = await guarded.chat.completions.create({
93
- model: 'gpt-4o',
94
- messages: [{ role: 'user', content: 'Hello' }],
26
+ const response = await guardedClient.chat.completions.create({
27
+ model: 'openai/gpt-4o-mini',
28
+ messages: [{ role: 'user', content: 'Run the governed task.' }],
95
29
  });
96
30
  ```
97
31
 
98
- When the policy fires:
32
+ Then run your agent. AgentGuard decides locally before any provider call starts, signs the receipt, and applies allow, downgrade, shadow, or block.
99
33
 
100
- | Action | Result |
101
- |---|---|
102
- | `allow` | Call passes through unchanged |
103
- | `downgrade` | The `model` parameter is rewritten to `downgradeTo`, then the call proceeds |
104
- | `block` | An `AgentGuardBlockedError` is thrown before the provider is contacted |
105
- | `shadow` | Call passes through; the decision is logged for analysis but no enforcement happens |
34
+ ## Why OpenRouter?
106
35
 
107
- ## Capability-gated escalation
36
+ One OpenRouter key gives your team access to hundreds of models across many providers. Your CFO sees one invoice. AgentGuard enforces who uses what, which task tiers can reach which models, and what each call can spend. The OpenRouter key can live in `OPENROUTER_API_KEY` or `~/.agentguard/openrouter-key` with mode `600`.
108
37
 
109
- You can require a capability tier on a policy:
38
+ Sync pricing when you want local cost math refreshed:
110
39
 
111
- ```ts
112
- const policy: SpendPolicy = {
113
- // ...
114
- requiredCapability: 'payment_initiate',
115
- };
40
+ ```bash
41
+ agentguard models --sync-pricing
42
+ agentguard models --task payment-approval
43
+ agentguard models --search gpt-4o --json
116
44
  ```
117
45
 
118
- Calls that do not present a `capabilityClaim` at or above this tier are blocked immediately. Tiers (ascending): `read_only` < `data_write` < `payment_initiate` < `payment_execute`.
46
+ Pricing overrides are stored locally in `~/.agentguard/cost-overrides.json`.
119
47
 
120
- ## Verifying a signed log
48
+ ## Verify any receipt
121
49
 
122
- Anyone with the public key can verify the chain:
50
+ Share https://agentguard.run/verify with an auditor or reviewer. Paste a receipt and public key in the browser to verify the Ed25519 signature, entry hash, and chain link. The receipt never leaves the page.
123
51
 
124
- ```ts
125
- import { verifyChain } from '@agentguard-run/spend';
52
+ CLI verification is still local:
126
53
 
127
- const entries = await loadEntries(); // from your storage
128
- const result = await verifyChain(entries, publicKey);
129
- if (!result.ok) {
130
- console.error('chain invalid at sequence', result.sequence, ':', result.reason);
131
- }
54
+ ```bash
55
+ agentguard demo
56
+ agentguard verify --trace latest
132
57
  ```
133
58
 
134
- Each entry binds the previous entry's hash via SHA-256 and is signed with Ed25519. Tampering with any field of any entry invalidates the chain from that point forward.
59
+ ## Task templates
135
60
 
136
- ## License & usage thresholds
61
+ `agentguard wizard` ships templates for:
137
62
 
138
- The SDK is **free** for:
63
+ - `risk-review`: read-only review with a $0.50 per-call cap
64
+ - `payment-approval`: payment initiation review with a $5.00 per-call cap
65
+ - `chargeback-evidence`: evidence assembly with a $1.00 per-call cap
66
+ - `agent-support`: data-write support workflow with a $0.25 per-call cap
67
+ - `code-scan`: long-context read-only scan with a $0.10 per-call cap
139
68
 
140
- - Evaluation, prototyping, and non-commercial development at any volume
141
- - Production deployments processing **up to 10,000 enforcement calls per calendar month**
69
+ Each template sets recommended OpenRouter model assignments, capability tier, fallback model, caps, and system instructions.
142
70
 
143
- A separate commercial license is required for:
71
+ ## Provider bindings
144
72
 
145
- - Production deployments processing **more than 10,000 enforcement calls per month**
146
- - Deployments operated as a service to third parties
147
- - Redistribution, sublicensing, public hosting, republication
73
+ TypeScript includes native OpenAI, Anthropic, and Bedrock bindings. Streaming usage is settled from provider usage events when available, with local token-estimator fallback when usage is missing. Settlement entries are signed into the same hash chain as enforcement decisions.
148
74
 
149
- Inbound commercial-license inquiries: `invest@agentguard.run`
75
+ Python includes OpenAI, Anthropic, Bedrock, LangChain, CrewAI, and LlamaIndex integration helpers.
150
76
 
151
- Full terms in `LICENSE`. All patent rights expressly reserved (see Section 2 of `LICENSE`).
77
+ ## No proxy
152
78
 
153
- ## Patent notice
79
+ AgentGuard Spend is a library, not a gateway. It does not proxy traffic, store prompts, hold provider keys, or host policy state. The signed log lives in your storage.
154
80
 
155
- Protected by 6 U.S. patent-pending applications:
81
+ ## Telemetry
156
82
 
157
- - 63/983,615 · 63/983,621 · 63/983,843 · 63/984,626 (filed February 2026)
158
- - 64/071,781 · 64/071,789 (filed May 21, 2026)
83
+ Telemetry is opt-in. Set `AGENTGUARD_TELEMETRY=1` or run `agentguard telemetry enable`. The beacon sends only SDK version, runtime, OS family, anonymous install ID, CI flag, TTY flag, and event name. No prompts, completions, provider keys, signing keys, policy details, or cost overrides are sent.
159
84
 
160
- See `LICENSE` Section 7.
85
+ ## License and usage thresholds
161
86
 
162
- ## Links
87
+ The SDK is free for evaluation, prototyping, non-commercial development, and production deployments processing up to 10,000 enforcement calls per calendar month. Commercial use above that threshold requires a paid license from Dunecrest Ventures Inc. Full terms are in `LICENSE`.
88
+
89
+ ## Patent notice
163
90
 
164
- - agentguard.run
165
- - Contact: `invest@agentguard.run`
91
+ Protected by U.S. patent-pending technology (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626; 64/071,781; 64/071,789). 35 U.S.C. § 287 constructive notice. Additional patents pending.
package/README.pt-BR.md CHANGED
@@ -1,128 +1,54 @@
1
1
  # @agentguard-run/spend
2
2
 
3
- > Limites de gasto em tempo de execução local e roteamento de modelos com capacidades para agentes de IA.
4
-
5
- Toda decisão de política é executada dentro do seu processo. Prompts, chaves de API do provedor e chaves de assinatura nunca saem do seu runtime. Cada decisão de aplicação produz um recibo assinado com Ed25519, encadeado por hash, adequado para auditoria e revisão de compliance.
3
+ > Limites de gasto no runtime local, roteamento de modelos por capacidade e recibos assinados para agentes de IA.
6
4
 
7
5
  > Disponível também em: [English](README.md) · [Español (LATAM)](README.es-419.md)
8
6
 
9
- ## Por que sem proxy
10
-
11
- Todo concorrente financiado em governança de gasto em IA (Portkey, Helicone, LiteLLM, Cloudflare AI Gateway, Vercel AI Gateway) faz proxy do seu tráfego. Isso significa que seus prompts e chaves de provedor passam pela infraestrutura deles. `@agentguard-run/spend` nunca vê nada disso. A política roda no seu processo. O log assinado vive no seu armazenamento.
7
+ Cada decisão de política roda dentro do seu processo. Prompts, respostas, chaves API do provedor, chaves de assinatura, políticas e overrides de custo nunca vão para a infraestrutura da AgentGuard. Chamadas OpenRouter saem direto do seu runtime para `openrouter.ai` com a sua chave.
12
8
 
13
- ## Instalação
9
+ ## Quickstart em 90 segundos
14
10
 
15
11
  ```bash
16
12
  npm install @agentguard-run/spend
17
- # ou
18
- pnpm add @agentguard-run/spend
19
- # ou
20
- yarn add @agentguard-run/spend
13
+ agentguard auth openrouter
14
+ agentguard wizard
21
15
  ```
22
16
 
23
- ## Quickstart
24
-
25
- ```ts
26
- import OpenAI from 'openai';
27
- import {
28
- withSpendGuard,
29
- AgentGuardBlockedError,
30
- type SpendPolicy,
31
- } from '@agentguard-run/spend';
32
- import { randomBytes } from 'crypto';
33
-
34
- const policy: SpendPolicy = {
35
- id: 'finance-ops-v1',
36
- name: 'Limites diários de operações financeiras',
37
- scope: { tenantId: 'acme-corp' },
38
- caps: [
39
- {
40
- amountCents: 500,
41
- window: 'per_day',
42
- action: 'downgrade',
43
- downgradeTo: 'gpt-4o-mini',
44
- reason: 'Limite leve diário atingido, redirecionando para modelo mais barato',
45
- },
46
- {
47
- amountCents: 2000,
48
- window: 'per_day',
49
- action: 'block',
50
- reason: 'Teto diário rígido',
51
- },
52
- ],
53
- mode: 'enforce',
54
- version: 1,
55
- effectiveFrom: '2026-05-24T00:00:00Z',
56
- };
57
-
58
- const privateKey = new Uint8Array(randomBytes(32));
59
-
60
- const client = withSpendGuard(new OpenAI(), {
61
- policy,
62
- scope: { tenantId: 'acme-corp', agentId: 'finance-bot' },
63
- config: {
64
- policy,
65
- signingKeys: {
66
- privateKey,
67
- publicKey: new Uint8Array(32), // derivar de privateKey em produção
68
- },
69
- locale: 'pt-BR', // opcional - também detecta automaticamente
70
- },
71
- });
72
-
73
- try {
74
- const completion = await client.chat.completions.create({
75
- model: 'gpt-4o',
76
- messages: [{ role: 'user', content: 'Olá' }],
77
- });
78
- } catch (err) {
79
- if (err instanceof AgentGuardBlockedError) {
80
- // A mensagem será exibida em português pelo detector de locale
81
- console.error(err.message);
82
- }
83
- }
84
- ```
17
+ O wizard escreve `~/.agentguard/policy.yaml`, `~/.agentguard/quickstart.ts` e `~/.agentguard/quickstart.py`. Ele também imprime o snippet pronto para colar no app.
85
18
 
86
- Quando a política dispara:
19
+ ## Por que OpenRouter
87
20
 
88
- | Ação | Resultado |
89
- |-------------|------------------------------------------------------------------------------------------|
90
- | `allow` | A chamada passa sem alterações |
91
- | `downgrade` | O parâmetro `model` é reescrito para `downgradeTo`, então a chamada prossegue |
92
- | `block` | `AgentGuardBlockedError` é lançado antes de contatar o provedor |
93
- | `shadow` | A chamada passa; a decisão é registrada apenas para análise |
21
+ Uma chave OpenRouter dá acesso a centenas de modelos de muitos provedores. Finanças vê uma fatura. AgentGuard aplica quem usa o quê, quais tiers de tarefa podem acessar quais modelos e quanto cada chamada pode gastar. A chave fica em `OPENROUTER_API_KEY` ou `~/.agentguard/openrouter-key` com modo `600`.
94
22
 
95
- ## Localização (v0.1.4+)
96
-
97
- Mensagens de bloqueio legíveis estão localizadas em **inglês (en-US)**, **espanhol latino-americano (es-419)** e **português brasileiro (pt-BR)**. A resolução do locale segue a cadeia de prioridade padrão:
23
+ ```bash
24
+ agentguard models --sync-pricing
25
+ agentguard models --task payment-approval
26
+ agentguard models --search gpt-4o --json
27
+ ```
98
28
 
99
- 1. Configuração explícita: `config: { locale: 'pt-BR', ... }`
100
- 2. Variável de ambiente: `export AGENTGUARD_LOCALE=pt-BR`
101
- 3. Variáveis de ambiente do sistema: `LC_ALL`, `LC_MESSAGES`, `LANG`
102
- 4. `Intl.DateTimeFormat().resolvedOptions().locale` (browser / Deno / Bun)
103
- 5. Fallback: `en-US`
29
+ Overrides de preço ficam localmente em `~/.agentguard/cost-overrides.json`.
104
30
 
105
- ## Status
31
+ ## Verificar qualquer recibo
106
32
 
107
- Preview privado. Projetado para integração corporativa, OEM e de plataforma.
33
+ Compartilhe https://agentguard.run/verify com seu auditor. Cole um recibo e a chave pública no navegador para verificar assinatura Ed25519, hash da entrada e link da cadeia. O recibo nunca sai da página.
108
34
 
109
- Para acesso de avaliação, licenciamento OEM ou consultas de parceria estratégica: `invest@agentguard.run`
35
+ ```bash
36
+ agentguard demo
37
+ agentguard verify --trace latest
38
+ ```
110
39
 
111
- ## Licença e limiares de uso
40
+ ## Templates de tarefa
112
41
 
113
- O SDK é **gratuito** para:
42
+ `agentguard wizard` inclui `risk-review`, `payment-approval`, `chargeback-evidence`, `agent-support` e `code-scan`. Cada template define modelos OpenRouter recomendados, tier de capacidade, fallback, caps e instruções de sistema.
114
43
 
115
- - Avaliação, prototipagem e desenvolvimento não comercial em qualquer volume
116
- - Implantações de produção processando **até 10.000 chamadas de aplicação por mês calendário**
44
+ ## Sem proxy
117
45
 
118
- Uma licença comercial separada é necessária para volumes maiores ou redistribuição. Consultas: `invest@agentguard.run`
46
+ AgentGuard Spend é uma biblioteca, não um gateway. Não faz proxy de tráfego, não guarda prompts, não retém chaves de provedor e não hospeda estado de política. O log assinado vive no seu armazenamento.
119
47
 
120
- ## Aviso de patentes
48
+ ## Telemetria
121
49
 
122
- Protegido por aplicações de patente pendentes nos EUA (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626; 64/071,781; 64/071,789).
50
+ A telemetria é opt-in. Use `AGENTGUARD_TELEMETRY=1` ou `agentguard telemetry enable`. O beacon envia somente versão do SDK, runtime, família de OS, ID anônimo de instalação, flag de CI, flag de TTY e nome do evento. Não envia prompts, respostas, chaves de provedor, chaves de assinatura, detalhes de política nem overrides de custo.
123
51
 
124
- ## Links
52
+ ## Aviso de patentes
125
53
 
126
- - agentguard.run
127
- - Contato: `invest@agentguard.run`
128
- - SDK Python: [`agentguard-spend`](https://pypi.org/project/agentguard-spend/)
54
+ Protegido por tecnologia com patente pendente nos EUA (App. Nos. 63/983,615; 63/983,621; 63/983,843; 63/984,626; 64/071,781; 64/071,789). Aviso construtivo sob 35 U.S.C. § 287. Patentes adicionais pendentes.
@@ -0,0 +1,11 @@
1
+ /** Native Anthropic binding for AgentGuard Spend. */
2
+ import type { CapabilityTier, SpendPolicy, SpendScope } from '../types';
3
+ import { type SpendGuardConfig } from '../spend-guard';
4
+ export interface AnthropicBindingOptions {
5
+ policy: SpendPolicy;
6
+ scope: SpendScope;
7
+ capabilityClaim?: CapabilityTier;
8
+ config?: Omit<SpendGuardConfig, 'policy'>;
9
+ }
10
+ export declare function withSpendGuardAnthropic(client: any, opts: AnthropicBindingOptions): any;
11
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/bindings/anthropic.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,KAAK,EAAE,cAAc,EAAyB,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC/F,OAAO,EAGL,KAAK,gBAAgB,EAMtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;CAC3C;AAED,wBAAgB,uBAAuB,CAErC,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,uBAAuB,GAE5B,GAAG,CAyCL"}