@clampd/sdk 0.5.1 → 0.6.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.
package/README.md CHANGED
@@ -36,32 +36,41 @@ const response = await client.chat.completions.create({
36
36
  // Prompts scanned before LLM, responses scanned after
37
37
  ```
38
38
 
39
- ## What's New in 0.4.0
39
+ ## What's New in 0.5.0
40
40
 
41
- - **`scanInput` and `scanOutput` now default to `true`** prompts are scanned before the LLM call, responses are scanned after. Set `scanInput: false` to opt out.
42
- - 50 detection rules across 20 languages
43
- - 7 compliance frameworks (HIPAA, GDPR, PCI-DSS, CCPA, SOC 2, EU AI Act, NIST AI RMF)
41
+ - **Per-agent JWT identity**each agent in a multi-agent system authenticates independently. Kill/rate-limit/EMA operate per-agent.
42
+ - **Streaming guard** opt-in tool call interception for streaming responses (`guardStream: true`)
43
+ - **Circuit breaker & retry** automatic retry with exponential backoff, circuit breaker for gateway failures
44
+ - **CrewAI, ADK, Vercel AI wrappers** — guard tool calls across all major frameworks
45
+ - **216 detection rules** with Aho-Corasick prefilter (22μs at 10K rules)
44
46
 
45
47
  ## Configuration
46
48
 
47
- Three ways to configure (pick one):
48
-
49
49
  ```typescript
50
- // Option 1: Environment variables
51
- // CLAMPD_GATEWAY_URL=http://localhost:8080
52
- // CLAMPD_API_KEY=ag_live_...
53
- // CLAMPD_AGENT_ID=my-agent
54
- // JWT_SECRET=ags_...
55
-
56
- // Option 2: Global init (recommended)
57
- clampd.init({ agentId: "my-agent", secret: "ags_...", gatewayUrl: "...", apiKey: "..." });
58
-
59
- // Option 3: Inline per-call
60
- const safeFn = clampd.guard(myFn, {
61
- toolName: "db.query",
50
+ // Option 1: Single agent (simple)
51
+ clampd.init({
62
52
  agentId: "my-agent",
63
- secret: "ags_...",
53
+ secret: "ags_...", // from dashboard → Agent → Secret
54
+ gatewayUrl: "http://localhost:8080",
55
+ apiKey: "ag_live_...",
64
56
  });
57
+
58
+ // Option 2: Multi-agent (per-agent identity)
59
+ clampd.init({
60
+ agentId: "orchestrator",
61
+ apiKey: "ag_live_...",
62
+ agents: {
63
+ "orchestrator": process.env.CLAMPD_SECRET_orchestrator,
64
+ "research-agent": process.env.CLAMPD_SECRET_research_agent,
65
+ "writer-agent": process.env.CLAMPD_SECRET_writer_agent,
66
+ },
67
+ });
68
+
69
+ // Option 3: Environment variables
70
+ // CLAMPD_GATEWAY_URL=http://localhost:8080
71
+ // CLAMPD_API_KEY=ag_live_...
72
+ // CLAMPD_SECRET_orchestrator=ags_...
73
+ // CLAMPD_SECRET_research_agent=ags_...
65
74
  ```
66
75
 
67
76
  ## Anthropic / Claude
@@ -116,6 +125,49 @@ const client = clampd.openai(new OpenAI(), {
116
125
  });
117
126
  ```
118
127
 
128
+ ## Multi-Agent (A2A Delegation)
129
+
130
+ ```typescript
131
+ import clampd from "@clampd/sdk";
132
+
133
+ // Each agent authenticates with its own secret.
134
+ // Delegation chains are tracked automatically via AsyncLocalStorage.
135
+ clampd.init({
136
+ agentId: "orchestrator",
137
+ apiKey: "ag_live_...",
138
+ agents: {
139
+ "orchestrator": process.env.CLAMPD_SECRET_orchestrator,
140
+ "research-agent": process.env.CLAMPD_SECRET_research_agent,
141
+ },
142
+ });
143
+
144
+ // research-agent gets its own JWT (sub=research-agent).
145
+ // Kill "research-agent" from dashboard → only this agent is blocked.
146
+ const search = clampd.guard(searchFn, {
147
+ agentId: "research-agent",
148
+ toolName: "web.search",
149
+ });
150
+ ```
151
+
152
+ ## Streaming Guard (opt-in)
153
+
154
+ ```typescript
155
+ // Stream tool calls are guarded only when guardStream is enabled.
156
+ const client = clampd.openai(new OpenAI(), {
157
+ agentId: "my-agent",
158
+ guardStream: true, // buffer + guard tool call chunks before release
159
+ });
160
+
161
+ const stream = await client.chat.completions.create({
162
+ model: "gpt-4o",
163
+ stream: true,
164
+ tools: [...],
165
+ messages: [{ role: "user", content: "..." }],
166
+ });
167
+ // Tool calls in the stream are buffered, guarded, then released.
168
+ // Text chunks pass through immediately with zero added latency.
169
+ ```
170
+
119
171
  ## Tool Definitions Wrapper
120
172
 
121
173
  ```typescript
@@ -144,11 +196,12 @@ try {
144
196
 
145
197
  | Function | Description |
146
198
  |----------|-------------|
147
- | `clampd.init(opts)` | Configure global client (once at startup) |
148
- | `clampd.openai(client, opts?)` | Wrap OpenAI client (scanInput/scanOutput on by default) |
149
- | `clampd.anthropic(client, opts?)` | Wrap Anthropic client (scanInput/scanOutput on by default) |
150
- | `clampd.guard(fn, opts)` | Wrap any async function |
199
+ | `clampd.init(opts)` | Configure global client. `agents` for per-agent secrets. |
200
+ | `clampd.openai(client, opts?)` | Wrap OpenAI client. `guardStream: true` for streaming. |
201
+ | `clampd.anthropic(client, opts?)` | Wrap Anthropic client. `guardStream: true` for streaming. |
202
+ | `clampd.guard(fn, opts)` | Wrap any async function. `agentId` for per-agent identity. |
151
203
  | `clampd.tools(defs, opts)` | Wrap OpenAI tool definitions |
204
+ | `clampd.agent(agentId, fn)` | Run function in agent's delegation scope |
152
205
 
153
206
  ## Requirements
154
207
 
package/dist/client.d.ts CHANGED
@@ -48,12 +48,28 @@ export interface VerifyRequest {
48
48
  params: Record<string, unknown>;
49
49
  target_url?: string;
50
50
  }
51
+ export interface CircuitBreakerOptions {
52
+ /** Number of consecutive failures before opening the circuit. Default: 5. */
53
+ threshold?: number;
54
+ /** Time in ms to keep circuit open before allowing a probe. Default: 30000. */
55
+ resetTimeoutMs?: number;
56
+ }
57
+ export interface RetryOptions {
58
+ /** Max retry attempts (0 = no retries). Default: 0. */
59
+ maxRetries?: number;
60
+ /** Base delay in ms for exponential backoff. Default: 500. */
61
+ baseDelayMs?: number;
62
+ }
51
63
  export interface ClampdClientOptions {
52
64
  gatewayUrl?: string;
53
65
  agentId: string;
54
66
  apiKey?: string;
55
67
  secret?: string;
56
68
  timeoutMs?: number;
69
+ /** Retry options for transient gateway errors. */
70
+ retry?: RetryOptions;
71
+ /** Circuit breaker to avoid hammering a failing gateway. */
72
+ circuitBreaker?: CircuitBreakerOptions;
57
73
  }
58
74
  /**
59
75
  * Synchronous-style (async/await) client for the Clampd gateway proxy API.
@@ -66,7 +82,20 @@ export declare class ClampdClient {
66
82
  private readonly apiKey;
67
83
  private readonly jwt;
68
84
  private readonly timeoutMs;
85
+ private readonly maxRetries;
86
+ private readonly baseDelayMs;
87
+ private readonly cbThreshold;
88
+ private readonly cbResetTimeoutMs;
89
+ private cbFailures;
90
+ private cbOpenedAt;
91
+ private cbState;
69
92
  constructor(opts: ClampdClientOptions);
93
+ /** Check if circuit breaker allows a request. */
94
+ private cbAllowRequest;
95
+ /** Record a successful request. */
96
+ private cbRecordSuccess;
97
+ /** Record a failed request. */
98
+ private cbRecordFailure;
70
99
  private headers;
71
100
  /**
72
101
  * Send a tool call through the Clampd gateway for evaluation.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -4,7 +4,7 @@
4
4
  import { makeAgentJwt } from "./auth.js";
5
5
  import { getDelegation, delegationHeaders } from "./delegation.js";
6
6
  // ── Synthesized error response ─────────────────────────────────────
7
- function blockedResponse(reason) {
7
+ function blockedResponse(reason, gatewayError = false) {
8
8
  return {
9
9
  request_id: "error",
10
10
  allowed: false,
@@ -14,6 +14,7 @@ function blockedResponse(reason) {
14
14
  latency_ms: 0,
15
15
  degraded_stages: [],
16
16
  session_flags: [],
17
+ _gatewayError: gatewayError,
17
18
  };
18
19
  }
19
20
  // ── Client ─────────────────────────────────────────────────────────
@@ -28,12 +29,54 @@ export class ClampdClient {
28
29
  apiKey;
29
30
  jwt;
30
31
  timeoutMs;
32
+ // Retry config
33
+ maxRetries;
34
+ baseDelayMs;
35
+ // Circuit breaker state
36
+ cbThreshold;
37
+ cbResetTimeoutMs;
38
+ cbFailures = 0;
39
+ cbOpenedAt = 0;
40
+ cbState = "closed";
31
41
  constructor(opts) {
32
42
  this.gatewayUrl = (opts.gatewayUrl ?? "http://localhost:8080").replace(/\/$/, "");
33
43
  this.agentId = opts.agentId;
34
44
  this.apiKey = opts.apiKey ?? process.env.CLAMPD_API_KEY ?? "";
35
45
  this.jwt = makeAgentJwt(this.agentId, { secret: opts.secret });
36
46
  this.timeoutMs = opts.timeoutMs ?? 30_000;
47
+ // Retry
48
+ this.maxRetries = opts.retry?.maxRetries ?? 0;
49
+ this.baseDelayMs = opts.retry?.baseDelayMs ?? 500;
50
+ // Circuit breaker
51
+ this.cbThreshold = opts.circuitBreaker?.threshold ?? 5;
52
+ this.cbResetTimeoutMs = opts.circuitBreaker?.resetTimeoutMs ?? 30_000;
53
+ }
54
+ /** Check if circuit breaker allows a request. */
55
+ cbAllowRequest() {
56
+ if (this.cbState === "closed")
57
+ return true;
58
+ if (this.cbState === "open") {
59
+ if (Date.now() - this.cbOpenedAt >= this.cbResetTimeoutMs) {
60
+ this.cbState = "half-open";
61
+ return true; // Allow one probe request
62
+ }
63
+ return false;
64
+ }
65
+ // half-open: already allowing one probe
66
+ return true;
67
+ }
68
+ /** Record a successful request. */
69
+ cbRecordSuccess() {
70
+ this.cbFailures = 0;
71
+ this.cbState = "closed";
72
+ }
73
+ /** Record a failed request. */
74
+ cbRecordFailure() {
75
+ this.cbFailures++;
76
+ if (this.cbFailures >= this.cbThreshold) {
77
+ this.cbState = "open";
78
+ this.cbOpenedAt = Date.now();
79
+ }
37
80
  }
38
81
  headers(tools) {
39
82
  const h = {
@@ -69,10 +112,11 @@ export class ClampdClient {
69
112
  if (toolDescriptorHash) {
70
113
  body.tool_descriptor_hash = toolDescriptorHash;
71
114
  }
72
- // Auto-include delegation context if present
115
+ // Auto-include delegation context if present.
116
+ // SDK sends chain as-is — the gateway appends the current agent (from JWT sub)
117
+ // and computes caller_agent_id from the complete chain.
73
118
  const delegation = getDelegation();
74
- if (delegation && delegation.chain.length > 1) {
75
- body.caller_agent_id = delegation.chain[delegation.chain.length - 2];
119
+ if (delegation && delegation.chain.length > 0) {
76
120
  body.delegation_chain = delegation.chain;
77
121
  body.delegation_trace_id = delegation.traceId;
78
122
  }
@@ -134,44 +178,65 @@ export class ClampdClient {
134
178
  }
135
179
  // ── Internal ────────────────────────────────────────────────────
136
180
  async post(path, body, authorizedTools) {
137
- const url = `${this.gatewayUrl}${path}`;
138
- let resp;
139
- try {
140
- resp = await fetch(url, {
141
- method: "POST",
142
- headers: this.headers(authorizedTools),
143
- body: JSON.stringify(body),
144
- signal: AbortSignal.timeout(this.timeoutMs),
145
- });
181
+ // Circuit breaker check
182
+ if (!this.cbAllowRequest()) {
183
+ return blockedResponse("Circuit breaker open: gateway unavailable, requests are being short-circuited", true);
146
184
  }
147
- catch (err) {
148
- const message = err instanceof Error ? err.message : "Unknown fetch error";
149
- return blockedResponse(`Fetch error: ${message}`);
150
- }
151
- if (resp.ok) {
152
- const json = (await resp.json());
153
- // Ensure array fields are always present for ProxyResponse shape
154
- if (typeof json === "object" && json !== null && "degraded_stages" in json) {
155
- const pr = json;
156
- return {
157
- ...json,
158
- degraded_stages: pr.degraded_stages ?? [],
159
- session_flags: pr.session_flags ?? [],
160
- };
185
+ const url = `${this.gatewayUrl}${path}`;
186
+ let lastError = "";
187
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
188
+ if (attempt > 0) {
189
+ // Exponential backoff: 500ms, 1000ms, 2000ms, ...
190
+ const delay = this.baseDelayMs * Math.pow(2, attempt - 1);
191
+ await new Promise((r) => setTimeout(r, delay));
161
192
  }
162
- return json;
163
- }
164
- // Gateway returned an error — synthesize a blocked response
165
- let errorText = await resp.text().catch(() => `HTTP ${resp.status}`);
166
- // Map cryptic JWT errors to user-friendly messages
167
- if (resp.status === 401 &&
168
- (errorText.includes("InvalidSignature") || errorText.includes("JWT validation failed"))) {
169
- errorText =
170
- "agent_auth_failed: Agent authentication failed. This usually means the agent is suspended " +
171
- "or the signing secret is incorrect. Check your agent status in the dashboard " +
172
- "or verify JWT_SECRET / secret parameter.";
193
+ let resp;
194
+ try {
195
+ resp = await fetch(url, {
196
+ method: "POST",
197
+ headers: this.headers(authorizedTools),
198
+ body: JSON.stringify(body),
199
+ signal: AbortSignal.timeout(this.timeoutMs),
200
+ });
201
+ }
202
+ catch (err) {
203
+ lastError = err instanceof Error ? err.message : "Unknown fetch error";
204
+ this.cbRecordFailure();
205
+ continue; // Retry on network errors
206
+ }
207
+ if (resp.ok) {
208
+ this.cbRecordSuccess();
209
+ const json = (await resp.json());
210
+ // Ensure array fields are always present for ProxyResponse shape
211
+ if (typeof json === "object" && json !== null && "degraded_stages" in json) {
212
+ const pr = json;
213
+ return {
214
+ ...json,
215
+ degraded_stages: pr.degraded_stages ?? [],
216
+ session_flags: pr.session_flags ?? [],
217
+ };
218
+ }
219
+ return json;
220
+ }
221
+ // Don't retry on 4xx client errors (except 429 rate limit)
222
+ if (resp.status >= 400 && resp.status < 500 && resp.status !== 429) {
223
+ this.cbRecordSuccess(); // Client error is not a gateway failure
224
+ let errorText = await resp.text().catch(() => `HTTP ${resp.status}`);
225
+ if (resp.status === 401 &&
226
+ (errorText.includes("InvalidSignature") || errorText.includes("JWT validation failed"))) {
227
+ errorText =
228
+ "agent_auth_failed: Agent authentication failed. This usually means the agent is suspended " +
229
+ "or the signing secret is incorrect. Check your agent status in the dashboard " +
230
+ "or verify JWT_SECRET / secret parameter.";
231
+ }
232
+ return blockedResponse(errorText, true);
233
+ }
234
+ // 5xx or 429 — retry
235
+ lastError = await resp.text().catch(() => `HTTP ${resp.status}`);
236
+ this.cbRecordFailure();
173
237
  }
174
- return blockedResponse(errorText);
238
+ // All retries exhausted
239
+ return blockedResponse(`Fetch error: ${lastError}`, true);
175
240
  }
176
241
  /**
177
242
  * Like `post`, but throws on network errors and non-OK responses
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -29,11 +29,26 @@ export { withDelegation, getDelegation, getCallerAgentId, delegationHeaders, typ
29
29
  export { scanForSchemaInjection, type SchemaInjectionWarning } from "./schema-injection.js";
30
30
  export { verifyScopeToken, requireScope, getCurrentScopeToken, ScopeVerificationError, withScopeToken, setScopeToken, fetchJwks, invalidateJwksCache } from "./tool-verify.js";
31
31
  export type { ScopeTokenClaims } from "./tool-verify.js";
32
+ export { guardOpenAIStream, guardAnthropicStream } from "./stream-guard.js";
33
+ export type { CircuitBreakerOptions, RetryOptions } from "./client.js";
32
34
  interface InitOptions {
33
35
  agentId: string;
34
36
  gatewayUrl?: string;
35
37
  apiKey?: string;
36
38
  secret?: string;
39
+ /** Per-agent secrets for multi-agent setups.
40
+ * Each agent gets its own JWT signed with its own ags_ secret.
41
+ * Kill/rate-limit/EMA operate independently per agent.
42
+ * @example
43
+ * clampd.init({
44
+ * agentId: "orchestrator",
45
+ * agents: {
46
+ * "orchestrator": process.env.ORCHESTRATOR_SECRET,
47
+ * "research-agent": process.env.RESEARCHER_SECRET,
48
+ * }
49
+ * });
50
+ */
51
+ agents?: Record<string, string | undefined>;
37
52
  }
38
53
  interface GuardOptions {
39
54
  agentId?: string;
@@ -49,6 +64,10 @@ interface WrapOptions {
49
64
  checkResponse?: boolean;
50
65
  scanInput?: boolean;
51
66
  scanOutput?: boolean;
67
+ /** Enable stream interception for tool calls. When true, streaming tool call
68
+ * chunks are buffered and guarded before release. Default: false.
69
+ * When false and streaming with tools, a warning is logged. */
70
+ guardStream?: boolean;
52
71
  schemaRegistry?: Record<string, string>;
53
72
  }
54
73
  declare function init(opts: InitOptions): ClampdClient;
@@ -67,12 +86,56 @@ declare function anthropic<T extends {
67
86
  create: AnyFunction;
68
87
  };
69
88
  }>(client: T, opts: WrapOptions): T;
89
+ interface AdkOptions {
90
+ agentId?: string;
91
+ targetUrl?: string;
92
+ failOpen?: boolean;
93
+ checkResponse?: boolean;
94
+ secret?: string;
95
+ }
96
+ interface AdkCallbacks {
97
+ beforeTool: (toolName: string, args: Record<string, unknown>) => Promise<null | {
98
+ error: string;
99
+ }>;
100
+ afterTool?: (toolName: string, response: unknown) => Promise<null | {
101
+ error: string;
102
+ }>;
103
+ }
104
+ declare function adk(opts: AdkOptions): AdkCallbacks;
105
+ interface VercelAITool {
106
+ description?: string;
107
+ parameters?: unknown;
108
+ execute?: (args: Record<string, unknown>) => Promise<unknown>;
109
+ [key: string]: unknown;
110
+ }
111
+ declare function vercelAI<T extends Record<string, VercelAITool>>(toolDefs: T, opts: WrapOptions): T;
112
+ /**
113
+ * Run a function within an agent's delegation scope.
114
+ *
115
+ * Instead of manually using `withDelegation()`, wrap your agent logic
116
+ * with `clampd.agent()` — all `guard()` calls inside automatically
117
+ * inherit the delegation chain.
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * // Before (manual):
122
+ * return withDelegation("orchestrator", async () => { ... });
123
+ *
124
+ * // After (automatic):
125
+ * return clampd.agent("orchestrator", async () => { ... });
126
+ * ```
127
+ */
128
+ declare function agent<T>(agentId: string, fn: () => Promise<T>): Promise<T>;
129
+ export type { AdkOptions, AdkCallbacks, VercelAITool };
70
130
  declare const clampd: {
71
131
  init: typeof init;
72
132
  guard: typeof guard;
73
133
  tools: typeof tools;
74
134
  openai: typeof openai;
75
135
  anthropic: typeof anthropic;
136
+ adk: typeof adk;
137
+ vercelAI: typeof vercelAI;
138
+ agent: typeof agent;
76
139
  delegationHeaders: typeof delegationHeaders;
77
140
  scanForSchemaInjection: typeof scanForSchemaInjection;
78
141
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}