@tenova/swt3-ai 0.1.0 → 0.2.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
@@ -2,7 +2,7 @@ Cryptographic AI Governance for the Edge. Zero Latency. Zero Data Retention.
2
2
 
3
3
  # @tenova/swt3-ai
4
4
 
5
- **SWT3 AI Witness SDK for TypeScript** continuous, cryptographic attestation for AI systems. Prove your models are running approved weights, safety guardrails are active, and inferences are traceable. All without a single prompt or response ever leaving your infrastructure.
5
+ **SWT3 AI Witness SDK for TypeScript**: continuous, cryptographic attestation for AI systems. Prove your models are running approved weights, safety guardrails are active, and inferences are traceable. All without a single prompt or response ever leaving your infrastructure.
6
6
 
7
7
  Works with OpenAI, Anthropic, Vercel AI SDK, and any OpenAI-compatible endpoint (vLLM, Ollama, Azure, Llama.cpp).
8
8
 
@@ -22,14 +22,14 @@ const witness = new Witness({
22
22
 
23
23
  const client = witness.wrap(new OpenAI()) as OpenAI;
24
24
 
25
- // Non-streaming works exactly as before
25
+ // Non-streaming, works exactly as before
26
26
  const response = await client.chat.completions.create({
27
27
  model: "gpt-4o",
28
28
  messages: [{ role: "user", content: "Summarize this contract..." }],
29
29
  });
30
30
  console.log(response.choices[0].message.content);
31
31
 
32
- // Streaming also works. Chunks arrive in real-time, witnessing happens after.
32
+ // Streaming, also works. Chunks arrive in real-time, witnessing happens after.
33
33
  const stream = await client.chat.completions.create({
34
34
  model: "gpt-4o",
35
35
  messages: [{ role: "user", content: "Explain quantum computing" }],
@@ -93,17 +93,17 @@ const result = await streamText({
93
93
  onFinish: witness.vercelOnFinish({ promptText: prompt }),
94
94
  });
95
95
 
96
- // Works with any Vercel AI SDK providerOpenAI, Anthropic, Google, Mistral, custom
96
+ // Works with any Vercel AI SDK provider:OpenAI, Anthropic, Google, Mistral, custom
97
97
  ```
98
98
 
99
99
  The `onFinish` hook is framework-idiomatic: no wrapping, no proxying, no monkey-patching. It fires after the stream completes and receives a normalized result regardless of provider.
100
100
 
101
101
  ## Sovereign Cloud Support
102
102
 
103
- The SDK works out-of-the-box with any OpenAI-compatible endpoint. Run Llama 3 on vLLM, Mistral on Ollama, or any model behind an OpenAI-compatible APIevery inference is witnessed identically.
103
+ The SDK works out-of-the-box with any OpenAI-compatible endpoint. Run Llama 3 on vLLM, Mistral on Ollama, or any model behind an OpenAI-compatible API:every inference is witnessed identically.
104
104
 
105
105
  ```typescript
106
- // vLLM with Llama 3 sovereign cloud, your hardware
106
+ // vLLM with Llama 3, sovereign cloud, your hardware
107
107
  const client = witness.wrap(
108
108
  new OpenAI({ baseURL: "http://gpu-cluster.internal:8000/v1" }),
109
109
  ) as OpenAI;
@@ -112,7 +112,7 @@ const response = await client.chat.completions.create({
112
112
  model: "meta-llama/Meta-Llama-3-70B-Instruct",
113
113
  messages: [{ role: "user", content: "Classify this threat indicator" }],
114
114
  });
115
- // Same SWT3 anchor, same ledger, same audit trailregardless of where the model runs
115
+ // Same SWT3 anchor, same ledger, same audit trail:regardless of where the model runs
116
116
 
117
117
  // Ollama (local development)
118
118
  const localClient = witness.wrap(
@@ -130,12 +130,12 @@ const azureClient = witness.wrap(
130
130
 
131
131
  ## What Happens Per Inference
132
132
 
133
- 1. **Intercept** ES6 Proxy wraps your AI client transparently
134
- 2. **Hash** Prompts and responses are SHA-256 hashed in-process
135
- 3. **Extract** Model hash, latency, token count, refusal status numeric factors
136
- 4. **Clear** Raw text is purged from the wire payload (configurable clearing level)
137
- 5. **Buffer** Factors queued in background, flushed to the SWT3 ledger asynchronously
138
- 6. **Return** Your original response returns untouched, zero added latency
133
+ 1. **Intercept**: ES6 Proxy wraps your AI client transparently
134
+ 2. **Hash**: Prompts and responses are SHA-256 hashed in-process
135
+ 3. **Extract**: Model hash, latency, token count, refusal status as numeric factors
136
+ 4. **Clear**: Raw text is purged from the wire payload (configurable clearing level)
137
+ 5. **Buffer**: Factors queued in background, flushed to the SWT3 ledger asynchronously
138
+ 6. **Return**: Your original response returns untouched, zero added latency
139
139
 
140
140
  For streaming: chunks arrive to the developer in real-time. The SDK accumulates content in the background and witnesses after the stream completes.
141
141
 
@@ -148,7 +148,7 @@ For streaming: chunks arrive to the developer in real-time. The SDK accumulates
148
148
  | 2 | Sensitive | Hashes + factors + model only | Healthcare, legal, PII |
149
149
  | 3 | Classified | Numeric factors only. Model ID hashed. | Defense, air-gapped |
150
150
 
151
- At Level 1+, raw prompts and responses **never leave your infrastructure**. The witness endpoint is a "Blind Registrar"it stores cryptographic proofs, not data.
151
+ At Level 1+, raw prompts and responses **never leave your infrastructure**. The witness endpoint is a "Blind Registrar":it stores cryptographic proofs, not data.
152
152
 
153
153
  ```typescript
154
154
  // Healthcare deployment: Level 2
@@ -244,3 +244,5 @@ Stop the witness and flush remaining payloads.
244
244
  ---
245
245
 
246
246
  *SWT3: Sovereign Witness Traceability. We don't run your models. We witness them.*
247
+
248
+ SWT3 and Sovereign Witness Traceability are trademarks of Tenable Nova LLC. Patent pending. Apache 2.0 licensed.
@@ -0,0 +1,33 @@
1
+ /**
2
+ * SWT3 AI Witness SDK — AWS Bedrock Adapter (ES6 Proxy).
3
+ *
4
+ * Wraps the @aws-sdk/client-bedrock-runtime client so that
5
+ * `client.send(new ConverseCommand(...))` and
6
+ * `client.send(new InvokeModelCommand(...))` are intercepted.
7
+ *
8
+ * AWS Bedrock uses the Command pattern:
9
+ * const response = await client.send(new ConverseCommand({ modelId, messages }));
10
+ *
11
+ * The adapter intercepts `send()` and checks if the command is a
12
+ * ConverseCommand or InvokeModelCommand to extract factors.
13
+ *
14
+ * Copyright (c) 2026 Tenable Nova LLC. Apache 2.0. Patent pending.
15
+ */
16
+ import type { Witness } from "../witness.js";
17
+ /**
18
+ * Wrap a BedrockRuntimeClient with transparent witnessing.
19
+ *
20
+ * Usage:
21
+ * import { BedrockRuntimeClient, ConverseCommand } from "@aws-sdk/client-bedrock-runtime";
22
+ * import { Witness } from "@tenova/swt3-ai";
23
+ *
24
+ * const witness = new Witness({ endpoint, apiKey, tenantId });
25
+ * const client = witness.wrap(new BedrockRuntimeClient({ region: "us-east-1" }));
26
+ *
27
+ * const response = await client.send(new ConverseCommand({
28
+ * modelId: "anthropic.claude-3-5-sonnet-20241022-v2:0",
29
+ * messages: [{ role: "user", content: [{ text: "Hello" }] }],
30
+ * }));
31
+ */
32
+ export declare function wrapBedrock(client: unknown, witness: Witness): unknown;
33
+ //# sourceMappingURL=bedrock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../src/adapters/bedrock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAatE"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * SWT3 AI Witness SDK — AWS Bedrock Adapter (ES6 Proxy).
3
+ *
4
+ * Wraps the @aws-sdk/client-bedrock-runtime client so that
5
+ * `client.send(new ConverseCommand(...))` and
6
+ * `client.send(new InvokeModelCommand(...))` are intercepted.
7
+ *
8
+ * AWS Bedrock uses the Command pattern:
9
+ * const response = await client.send(new ConverseCommand({ modelId, messages }));
10
+ *
11
+ * The adapter intercepts `send()` and checks if the command is a
12
+ * ConverseCommand or InvokeModelCommand to extract factors.
13
+ *
14
+ * Copyright (c) 2026 Tenable Nova LLC. Apache 2.0. Patent pending.
15
+ */
16
+ import { sha256Truncated } from "../fingerprint.js";
17
+ /**
18
+ * Wrap a BedrockRuntimeClient with transparent witnessing.
19
+ *
20
+ * Usage:
21
+ * import { BedrockRuntimeClient, ConverseCommand } from "@aws-sdk/client-bedrock-runtime";
22
+ * import { Witness } from "@tenova/swt3-ai";
23
+ *
24
+ * const witness = new Witness({ endpoint, apiKey, tenantId });
25
+ * const client = witness.wrap(new BedrockRuntimeClient({ region: "us-east-1" }));
26
+ *
27
+ * const response = await client.send(new ConverseCommand({
28
+ * modelId: "anthropic.claude-3-5-sonnet-20241022-v2:0",
29
+ * messages: [{ role: "user", content: [{ text: "Hello" }] }],
30
+ * }));
31
+ */
32
+ export function wrapBedrock(client, witness) {
33
+ return new Proxy(client, {
34
+ get(target, prop) {
35
+ if (typeof prop === "symbol")
36
+ return Reflect.get(target, prop);
37
+ const real = Reflect.get(target, prop);
38
+ if (prop === "send" && typeof real === "function") {
39
+ return createSendInterceptor(real, witness, target);
40
+ }
41
+ return real;
42
+ },
43
+ });
44
+ }
45
+ function createSendInterceptor(realSend, witness, thisArg) {
46
+ return async function interceptedSend(...args) {
47
+ const command = args[0];
48
+ if (!command)
49
+ return realSend.call(thisArg, ...args);
50
+ // Detect command type by constructor name
51
+ const commandName = command.constructor?.name ?? "";
52
+ if (commandName === "ConverseCommand") {
53
+ return handleConverse(realSend, thisArg, command, witness, args);
54
+ }
55
+ if (commandName === "InvokeModelCommand") {
56
+ return handleInvokeModel(realSend, thisArg, command, witness, args);
57
+ }
58
+ // Not a command we intercept — pass through
59
+ return realSend.call(thisArg, ...args);
60
+ };
61
+ }
62
+ // ── Converse Command Handler ──────────────────────────────────────
63
+ async function handleConverse(realSend, thisArg, command, witness, args) {
64
+ const input = command.input ?? command;
65
+ const modelId = input.modelId ?? "unknown";
66
+ const messages = input.messages ?? [];
67
+ const promptText = extractConversePrompt(messages);
68
+ const promptHash = sha256Truncated(promptText);
69
+ const start = performance.now();
70
+ const response = await realSend.call(thisArg, ...args);
71
+ const elapsedMs = Math.round(performance.now() - start);
72
+ const resp = response;
73
+ const record = extractConverseRecord(resp, modelId, promptHash, elapsedMs);
74
+ witness.record(record);
75
+ return response;
76
+ }
77
+ // ── InvokeModel Command Handler ──────────────────────────────────
78
+ async function handleInvokeModel(realSend, thisArg, command, witness, args) {
79
+ const input = command.input ?? command;
80
+ const modelId = input.modelId ?? "unknown";
81
+ // Parse the body to get prompt
82
+ let body = {};
83
+ const rawBody = input.body;
84
+ if (typeof rawBody === "string") {
85
+ try {
86
+ body = JSON.parse(rawBody);
87
+ }
88
+ catch { /* empty */ }
89
+ }
90
+ else if (rawBody instanceof Uint8Array) {
91
+ try {
92
+ body = JSON.parse(new TextDecoder().decode(rawBody));
93
+ }
94
+ catch { /* empty */ }
95
+ }
96
+ const promptText = extractInvokePrompt(body, modelId);
97
+ const promptHash = sha256Truncated(promptText);
98
+ const start = performance.now();
99
+ const response = await realSend.call(thisArg, ...args);
100
+ const elapsedMs = Math.round(performance.now() - start);
101
+ const resp = response;
102
+ const record = extractInvokeRecord(resp, modelId, promptHash, elapsedMs);
103
+ witness.record(record);
104
+ return response;
105
+ }
106
+ // ── Prompt Extraction ─────────────────────────────────────────────
107
+ function extractConversePrompt(messages) {
108
+ const parts = [];
109
+ for (const msg of messages) {
110
+ const m = msg;
111
+ const content = m.content;
112
+ if (Array.isArray(content)) {
113
+ for (const block of content) {
114
+ const b = block;
115
+ if (b.text)
116
+ parts.push(b.text);
117
+ }
118
+ }
119
+ else if (typeof content === "string") {
120
+ parts.push(content);
121
+ }
122
+ }
123
+ return parts.join("\n");
124
+ }
125
+ function extractInvokePrompt(body, modelId) {
126
+ // Anthropic on Bedrock
127
+ const messages = body.messages;
128
+ if (messages?.length) {
129
+ const parts = [];
130
+ for (const msg of messages) {
131
+ const m = msg;
132
+ const content = m.content;
133
+ if (typeof content === "string") {
134
+ parts.push(content);
135
+ }
136
+ else if (Array.isArray(content)) {
137
+ for (const block of content) {
138
+ const b = block;
139
+ if (b.type === "text" && b.text)
140
+ parts.push(b.text);
141
+ }
142
+ }
143
+ }
144
+ if (parts.length)
145
+ return parts.join("\n");
146
+ }
147
+ // Amazon Titan
148
+ if (body.inputText)
149
+ return body.inputText;
150
+ // Meta Llama
151
+ if (body.prompt)
152
+ return body.prompt;
153
+ return JSON.stringify(body);
154
+ }
155
+ // ── Record Extraction ─────────────────────────────────────────────
156
+ function extractConverseRecord(response, modelId, promptHash, elapsedMs) {
157
+ let responseText = "";
158
+ let hasRefusal = false;
159
+ const output = response.output;
160
+ const message = output?.message;
161
+ const content = message?.content;
162
+ if (content) {
163
+ for (const block of content) {
164
+ if (block.text)
165
+ responseText += block.text;
166
+ }
167
+ }
168
+ const stopReason = response.stopReason;
169
+ if (stopReason === "content_filtered")
170
+ hasRefusal = true;
171
+ const usage = response.usage;
172
+ const inputTokens = usage?.inputTokens;
173
+ const outputTokens = usage?.outputTokens;
174
+ return {
175
+ modelId: modelId,
176
+ modelHash: sha256Truncated(modelId),
177
+ promptHash: promptHash,
178
+ responseHash: sha256Truncated(responseText || ""),
179
+ latencyMs: elapsedMs,
180
+ inputTokens: inputTokens ?? undefined,
181
+ outputTokens: outputTokens ?? undefined,
182
+ hasRefusal: hasRefusal,
183
+ provider: "bedrock",
184
+ systemFingerprint: undefined,
185
+ guardrailsActive: 0,
186
+ guardrailsRequired: 0,
187
+ guardrailPassed: true,
188
+ guardrailNames: [],
189
+ };
190
+ }
191
+ function extractInvokeRecord(response, modelId, promptHash, elapsedMs) {
192
+ let responseText = "";
193
+ let hasRefusal = false;
194
+ let inputTokens = null;
195
+ let outputTokens = null;
196
+ try {
197
+ let body = {};
198
+ const rawBody = response.body;
199
+ if (rawBody instanceof Uint8Array) {
200
+ body = JSON.parse(new TextDecoder().decode(rawBody));
201
+ }
202
+ else if (typeof rawBody === "string") {
203
+ body = JSON.parse(rawBody);
204
+ }
205
+ // Anthropic on Bedrock
206
+ if (body.content) {
207
+ const content = body.content;
208
+ if (Array.isArray(content)) {
209
+ for (const block of content) {
210
+ if (block.type === "text" && block.text)
211
+ responseText += block.text;
212
+ }
213
+ }
214
+ else if (typeof content === "string") {
215
+ responseText = content;
216
+ }
217
+ }
218
+ // Amazon Titan
219
+ else if (body.results) {
220
+ const results = body.results;
221
+ if (results[0]?.outputText)
222
+ responseText = results[0].outputText;
223
+ }
224
+ // Meta Llama
225
+ else if (body.generation) {
226
+ responseText = body.generation;
227
+ }
228
+ // Usage
229
+ const usage = body.usage;
230
+ if (usage) {
231
+ inputTokens = (usage.input_tokens ?? usage.inputTokens ?? null);
232
+ outputTokens = (usage.output_tokens ?? usage.outputTokens ?? null);
233
+ }
234
+ // Refusal
235
+ const stopReason = (body.stop_reason ?? body.stopReason ?? "");
236
+ if (stopReason.toLowerCase().includes("content_filter"))
237
+ hasRefusal = true;
238
+ }
239
+ catch {
240
+ // Parse failure — still witness with what we have
241
+ }
242
+ return {
243
+ modelId: modelId,
244
+ modelHash: sha256Truncated(modelId),
245
+ promptHash: promptHash,
246
+ responseHash: sha256Truncated(responseText || ""),
247
+ latencyMs: elapsedMs,
248
+ inputTokens: inputTokens ?? undefined,
249
+ outputTokens: outputTokens ?? undefined,
250
+ hasRefusal: hasRefusal,
251
+ provider: "bedrock",
252
+ systemFingerprint: undefined,
253
+ guardrailsActive: 0,
254
+ guardrailsRequired: 0,
255
+ guardrailPassed: true,
256
+ guardrailNames: [],
257
+ };
258
+ }
259
+ //# sourceMappingURL=bedrock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock.js","sourceRoot":"","sources":["../../src/adapters/bedrock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,MAAe,EAAE,OAAgB;IAC3D,OAAO,IAAI,KAAK,CAAC,MAAgB,EAAE;QACjC,GAAG,CAAC,MAAc,EAAE,IAAqB;YACvC,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAEvC,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;gBAClD,OAAO,qBAAqB,CAAC,IAAgD,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAClG,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAC5B,QAAkD,EAClD,OAAgB,EAChB,OAAe;IAEf,OAAO,KAAK,UAAU,eAAe,CAAC,GAAG,IAAe;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAwC,CAAC;QAC/D,IAAI,CAAC,OAAO;YAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAErD,0CAA0C;QAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;QAEpD,IAAI,WAAW,KAAK,iBAAiB,EAAE,CAAC;YACtC,OAAO,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,WAAW,KAAK,oBAAoB,EAAE,CAAC;YACzC,OAAO,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACtE,CAAC;QAED,4CAA4C;QAC5C,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC;AACJ,CAAC;AAED,qEAAqE;AAErE,KAAK,UAAU,cAAc,CAC3B,QAAkD,EAClD,OAAe,EACf,OAAgC,EAChC,OAAgB,EAChB,IAAe;IAEf,MAAM,KAAK,GAAI,OAA+C,CAAC,KAAK,IAAI,OAAO,CAAC;IAChF,MAAM,OAAO,GAAI,KAAK,CAAC,OAAkB,IAAI,SAAS,CAAC;IACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAqB,IAAI,EAAE,CAAC;IAEnD,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;IAExD,MAAM,IAAI,GAAG,QAAmC,CAAC;IACjD,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC3E,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,oEAAoE;AAEpE,KAAK,UAAU,iBAAiB,CAC9B,QAAkD,EAClD,OAAe,EACf,OAAgC,EAChC,OAAgB,EAChB,IAAe;IAEf,MAAM,KAAK,GAAI,OAA+C,CAAC,KAAK,IAAI,OAAO,CAAC;IAChF,MAAM,OAAO,GAAI,KAAK,CAAC,OAAkB,IAAI,SAAS,CAAC;IAEvD,+BAA+B;IAC/B,IAAI,IAAI,GAA4B,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;IAC3B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3D,CAAC;SAAM,IAAI,OAAO,YAAY,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;IAExD,MAAM,IAAI,GAAG,QAAmC,CAAC;IACjD,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACzE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,qEAAqE;AAErE,SAAS,qBAAqB,CAAC,QAAmB;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,GAA8B,CAAC;QACzC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,KAAgC,CAAC;gBAC3C,IAAI,CAAC,CAAC,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA6B,EAAE,OAAe;IACzE,uBAAuB;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAiC,CAAC;IACxD,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,GAA8B,CAAC;YACzC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YAC1B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,MAAM,CAAC,GAAG,KAAgC,CAAC;oBAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI;wBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,eAAe;IACf,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,SAAmB,CAAC;IAEpD,aAAa;IACb,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,MAAgB,CAAC;IAE9C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,qEAAqE;AAErE,SAAS,qBAAqB,CAC5B,QAAiC,EACjC,OAAe,EACf,UAAkB,EAClB,SAAiB;IAEjB,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAA6C,CAAC;IACtE,MAAM,OAAO,GAAG,MAAM,EAAE,OAA8C,CAAC;IACvE,MAAM,OAAO,GAAG,OAAO,EAAE,OAAqD,CAAC;IAE/E,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,IAAI;gBAAE,YAAY,IAAI,KAAK,CAAC,IAAc,CAAC;QACvD,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAgC,CAAC;IAC7D,IAAI,UAAU,KAAK,kBAAkB;QAAE,UAAU,GAAG,IAAI,CAAC;IAEzD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAA4C,CAAC;IACpE,MAAM,WAAW,GAAG,KAAK,EAAE,WAAiC,CAAC;IAC7D,MAAM,YAAY,GAAG,KAAK,EAAE,YAAkC,CAAC;IAE/D,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC;QACnC,UAAU,EAAE,UAAU;QACtB,YAAY,EAAE,eAAe,CAAC,YAAY,IAAI,EAAE,CAAC;QACjD,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,WAAW,IAAI,SAAS;QACrC,YAAY,EAAE,YAAY,IAAI,SAAS;QACvC,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,SAAS;QACnB,iBAAiB,EAAE,SAAS;QAC5B,gBAAgB,EAAE,CAAC;QACnB,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,EAAE;KACnB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAiC,EACjC,OAAe,EACf,UAAkB,EAClB,SAAiB;IAEjB,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,IAAI,YAAY,GAAkB,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,IAAI,IAAI,GAA4B,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC9B,IAAI,OAAO,YAAY,UAAU,EAAE,CAAC;YAClC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,KAAK,MAAM,KAAK,IAAI,OAAyC,EAAE,CAAC;oBAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI;wBAAE,YAAY,IAAI,KAAK,CAAC,IAAc,CAAC;gBAChF,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACvC,YAAY,GAAG,OAAO,CAAC;YACzB,CAAC;QACH,CAAC;QACD,eAAe;aACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAyC,CAAC;YAC/D,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU;gBAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,UAAoB,CAAC;QAC7E,CAAC;QACD,aAAa;aACR,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACzB,YAAY,GAAG,IAAI,CAAC,UAAoB,CAAC;QAC3C,CAAC;QAED,QAAQ;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAA4C,CAAC;QAChE,IAAI,KAAK,EAAE,CAAC;YACV,WAAW,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI,CAAkB,CAAC;YACjF,YAAY,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,IAAI,IAAI,CAAkB,CAAC;QACtF,CAAC;QAED,UAAU;QACV,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,CAAW,CAAC;QACzE,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAAE,UAAU,GAAG,IAAI,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC;QACnC,UAAU,EAAE,UAAU;QACtB,YAAY,EAAE,eAAe,CAAC,YAAY,IAAI,EAAE,CAAC;QACjD,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,WAAW,IAAI,SAAS;QACrC,YAAY,EAAE,YAAY,IAAI,SAAS;QACvC,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,SAAS;QACnB,iBAAiB,EAAE,SAAS;QAC5B,gBAAgB,EAAE,CAAC;QACnB,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,EAAE;KACnB,CAAC;AACJ,CAAC"}
package/dist/witness.d.ts CHANGED
@@ -16,6 +16,8 @@
16
16
  *
17
17
  * // Graceful shutdown
18
18
  * await witness.flush();
19
+ *
20
+ * Copyright (c) 2026 Tenable Nova LLC. Apache 2.0. Patent pending.
19
21
  */
20
22
  import { type VercelOnFinishOptions } from "./adapters/vercel-ai.js";
21
23
  import type { WitnessReceipt, InferenceRecord } from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,KAAK,EAAiC,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,EAAE,cAAc;IAwBnC;;;;;;;;;OASG;IACH,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;IAoB9B;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAoBxC;;;;;;;;;OASG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI;IAI1E,yCAAyC;IACnC,KAAK,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIxC,qDAAqD;IAC/C,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIvC,kCAAkC;IAClC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,2CAA2C;IAC3C,IAAI,QAAQ,IAAI,cAAc,EAAE,CAE/B;CACF"}
1
+ {"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,KAAK,EAAiC,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,EAAE,cAAc;IAwBnC;;;;;;;;;OASG;IACH,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;IAyB9B;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAoBxC;;;;;;;;;OASG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI;IAI1E,yCAAyC;IACnC,KAAK,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIxC,qDAAqD;IAC/C,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIvC,kCAAkC;IAClC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,2CAA2C;IAC3C,IAAI,QAAQ,IAAI,cAAc,EAAE,CAE/B;CACF"}
package/dist/witness.js CHANGED
@@ -16,11 +16,14 @@
16
16
  *
17
17
  * // Graceful shutdown
18
18
  * await witness.flush();
19
+ *
20
+ * Copyright (c) 2026 Tenable Nova LLC. Apache 2.0. Patent pending.
19
21
  */
20
22
  import { extractPayloads } from "./clearing.js";
21
23
  import { WitnessBuffer } from "./buffer.js";
22
24
  import { wrapOpenAI } from "./adapters/openai.js";
23
25
  import { wrapAnthropic } from "./adapters/anthropic.js";
26
+ import { wrapBedrock } from "./adapters/bedrock.js";
24
27
  import { createVercelOnFinish } from "./adapters/vercel-ai.js";
25
28
  export class Witness {
26
29
  config;
@@ -72,7 +75,11 @@ export class Witness {
72
75
  if (name === "Anthropic" || (obj?.messages && !obj?.chat)) {
73
76
  return wrapAnthropic(client, this);
74
77
  }
75
- throw new TypeError(`Unsupported client: ${name || "unknown"}. Supported: OpenAI, Anthropic.`);
78
+ // AWS Bedrock: has client.send and client.config
79
+ if (name === "BedrockRuntimeClient" || (obj?.send && obj?.config)) {
80
+ return wrapBedrock(client, this);
81
+ }
82
+ throw new TypeError(`Unsupported client: ${name || "unknown"}. Supported: OpenAI, Anthropic, BedrockRuntimeClient.`);
76
83
  }
77
84
  /**
78
85
  * Record a witnessed inference. Extracts factors, applies clearing,
@@ -1 +1 @@
1
- {"version":3,"file":"witness.js","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"witness.js","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tenova/swt3-ai",
3
- "version": "0.1.0",
4
- "description": "SWT3 AI Witness SDK cryptographic attestation for AI inference",
3
+ "version": "0.2.0",
4
+ "description": "SWT3 AI Witness SDK: cryptographic attestation for AI inference",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "type": "module",
@@ -32,7 +32,7 @@
32
32
  "openai",
33
33
  "anthropic"
34
34
  ],
35
- "author": "TeNova <engineering@tenova.io>",
35
+ "author": "TeNova <engineering@tenovaai.com>",
36
36
  "license": "Apache-2.0",
37
37
  "repository": {
38
38
  "type": "git",
@@ -47,9 +47,9 @@
47
47
  }
48
48
  },
49
49
  "devDependencies": {
50
- "typescript": "^5.5.0",
51
- "vitest": "^2.0.0",
50
+ "openai": "^4.70.0",
52
51
  "tsx": "^4.0.0",
53
- "openai": "^4.70.0"
52
+ "typescript": "^5.5.0",
53
+ "vitest": "^4.1.2"
54
54
  }
55
55
  }