@tenova/swt3-ai 0.3.4 → 0.4.1

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 (58) hide show
  1. package/README.md +150 -18
  2. package/dist/adapters/anthropic.d.ts +32 -0
  3. package/dist/adapters/anthropic.d.ts.map +1 -0
  4. package/dist/adapters/anthropic.js +301 -0
  5. package/dist/adapters/anthropic.js.map +1 -0
  6. package/dist/adapters/bedrock.d.ts +33 -0
  7. package/dist/adapters/bedrock.d.ts.map +1 -0
  8. package/dist/adapters/bedrock.js +269 -0
  9. package/dist/adapters/bedrock.js.map +1 -0
  10. package/dist/adapters/openai.d.ts +19 -0
  11. package/dist/adapters/openai.d.ts.map +1 -0
  12. package/dist/adapters/openai.js +289 -0
  13. package/dist/adapters/openai.js.map +1 -0
  14. package/dist/adapters/vercel-ai.d.ts +64 -0
  15. package/dist/adapters/vercel-ai.d.ts.map +1 -0
  16. package/dist/adapters/vercel-ai.js +68 -0
  17. package/dist/adapters/vercel-ai.js.map +1 -0
  18. package/dist/buffer.d.ts +43 -0
  19. package/dist/buffer.d.ts.map +1 -0
  20. package/dist/buffer.js +172 -0
  21. package/dist/buffer.js.map +1 -0
  22. package/dist/clearing.d.ts +39 -0
  23. package/dist/clearing.d.ts.map +1 -0
  24. package/dist/clearing.js +338 -0
  25. package/dist/clearing.js.map +1 -0
  26. package/dist/demo.d.ts +11 -0
  27. package/dist/demo.d.ts.map +1 -0
  28. package/dist/demo.js +238 -0
  29. package/dist/demo.js.map +1 -0
  30. package/dist/exporters/otel.d.ts +36 -0
  31. package/dist/exporters/otel.d.ts.map +1 -0
  32. package/dist/exporters/otel.js +94 -0
  33. package/dist/exporters/otel.js.map +1 -0
  34. package/dist/fingerprint.d.ts +29 -0
  35. package/dist/fingerprint.d.ts.map +1 -0
  36. package/dist/fingerprint.js +57 -0
  37. package/dist/fingerprint.js.map +1 -0
  38. package/dist/handoff.d.ts +17 -0
  39. package/dist/handoff.d.ts.map +1 -0
  40. package/dist/handoff.js +82 -0
  41. package/dist/handoff.js.map +1 -0
  42. package/dist/index.d.ts +22 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +20 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/signing.d.ts +20 -0
  47. package/dist/signing.d.ts.map +1 -0
  48. package/dist/signing.js +28 -0
  49. package/dist/signing.js.map +1 -0
  50. package/dist/types.d.ts +108 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +20 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/witness.d.ts +193 -0
  55. package/dist/witness.d.ts.map +1 -0
  56. package/dist/witness.js +487 -0
  57. package/dist/witness.js.map +1 -0
  58. package/package.json +10 -2
@@ -0,0 +1,338 @@
1
+ /**
2
+ * SWT3 AI Witness SDK — Clearing Engine (Levels 0-3).
3
+ *
4
+ * The "Sovereign Wire" protocol: controls what leaves the developer's
5
+ * infrastructure. Raw prompts/responses NEVER appear in payloads.
6
+ * Clearing operates on the wire payload, not the developer's response.
7
+ *
8
+ * Level 0 — Analytics: All metadata
9
+ * Level 1 — Standard: Hashes + model_id + ai_context
10
+ * Level 2 — Sensitive: Hashes + model_id only. ai_context DELETED.
11
+ * Level 3 — Classified: Factors only. model_id hashed. Everything else DELETED.
12
+ */
13
+ import { mintFingerprint, sha256Truncated, timestampMs } from "./fingerprint.js";
14
+ import { signPayload } from "./signing.js";
15
+ /**
16
+ * Extract witness payloads from an inference record.
17
+ * Applies clearing level to each payload via object destructuring (Level 2+
18
+ * fields are simply never assigned, guaranteeing they don't exist on the wire).
19
+ */
20
+ export function extractPayloads(record, tenantId, clearingLevel, latencyThresholdMs = 30000, guardrailsRequired = 0, procedures, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId) {
21
+ const [ts, epoch] = timestampMs();
22
+ const payloads = [];
23
+ // Access control records produce only AI-ACC.1 (skip inference procedures)
24
+ if (record.accessTarget) {
25
+ let accFactors = [
26
+ {
27
+ procedureId: "AI-ACC.1",
28
+ factorA: 1,
29
+ factorB: !record.accessScope || record.accessGranted ? 1 : 0,
30
+ factorC: record.accessGranted ? 1 : 0,
31
+ },
32
+ ];
33
+ if (procedures) {
34
+ const allowed = new Set(procedures);
35
+ accFactors = accFactors.filter((p) => allowed.has(p.procedureId));
36
+ }
37
+ for (const pf of accFactors) {
38
+ const fp = mintFingerprint(tenantId, pf.procedureId, pf.factorA, pf.factorB, pf.factorC, ts);
39
+ const payload = {
40
+ procedure_id: pf.procedureId,
41
+ factor_a: pf.factorA,
42
+ factor_b: pf.factorB,
43
+ factor_c: pf.factorC,
44
+ clearing_level: clearingLevel,
45
+ anchor_fingerprint: fp,
46
+ anchor_epoch: epoch,
47
+ fingerprint_timestamp_ms: ts,
48
+ };
49
+ if (clearingLevel <= 2) {
50
+ payload.ai_latency_ms = record.latencyMs;
51
+ }
52
+ if (clearingLevel <= 1) {
53
+ payload.ai_model_id = record.modelId;
54
+ const ctx = {
55
+ provider: "access",
56
+ access_target: record.accessTarget,
57
+ access_granted: record.accessGranted,
58
+ };
59
+ if (record.accessScope) {
60
+ ctx.access_scope = record.accessScope;
61
+ }
62
+ if (cycleId)
63
+ ctx.cycle_id = cycleId;
64
+ payload.ai_context = ctx;
65
+ }
66
+ applyOperationalMetadata(payload, fp, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId);
67
+ payloads.push(payload);
68
+ }
69
+ return payloads;
70
+ }
71
+ // Tool call records produce only AI-TOOL.1 (skip inference procedures)
72
+ if (record.toolName) {
73
+ let toolFactors = [
74
+ { procedureId: "AI-TOOL.1", factorA: 1, factorB: record.latencyMs, factorC: record.hasRefusal ? 0 : 1 },
75
+ ];
76
+ if (procedures) {
77
+ const allowed = new Set(procedures);
78
+ toolFactors = toolFactors.filter((p) => allowed.has(p.procedureId));
79
+ }
80
+ for (const pf of toolFactors) {
81
+ const fp = mintFingerprint(tenantId, pf.procedureId, pf.factorA, pf.factorB, pf.factorC, ts);
82
+ const payload = {
83
+ procedure_id: pf.procedureId,
84
+ factor_a: pf.factorA,
85
+ factor_b: pf.factorB,
86
+ factor_c: pf.factorC,
87
+ clearing_level: clearingLevel,
88
+ anchor_fingerprint: fp,
89
+ anchor_epoch: epoch,
90
+ fingerprint_timestamp_ms: ts,
91
+ };
92
+ if (clearingLevel <= 2) {
93
+ payload.ai_latency_ms = record.latencyMs;
94
+ }
95
+ if (clearingLevel <= 1) {
96
+ payload.ai_model_id = record.modelId;
97
+ const ctx = {
98
+ provider: "tool",
99
+ tool_name: record.toolName,
100
+ };
101
+ if (record.toolCallId) {
102
+ ctx.tool_call_id = record.toolCallId;
103
+ }
104
+ if (cycleId)
105
+ ctx.cycle_id = cycleId;
106
+ payload.ai_context = ctx;
107
+ }
108
+ applyOperationalMetadata(payload, fp, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId);
109
+ payloads.push(payload);
110
+ }
111
+ return payloads;
112
+ }
113
+ let procFactors = [
114
+ // AI-INF.1: Inference Provenance
115
+ {
116
+ procedureId: "AI-INF.1",
117
+ factorA: 1,
118
+ factorB: record.promptHash && record.responseHash ? 1 : 0,
119
+ factorC: 0,
120
+ },
121
+ // AI-INF.2: Inference Latency
122
+ {
123
+ procedureId: "AI-INF.2",
124
+ factorA: latencyThresholdMs,
125
+ factorB: record.latencyMs,
126
+ factorC: record.latencyMs > latencyThresholdMs ? 1 : 0,
127
+ },
128
+ // AI-MDL.1: Model Weight Integrity
129
+ {
130
+ procedureId: "AI-MDL.1",
131
+ factorA: 1,
132
+ factorB: record.modelHash ? 1 : 0,
133
+ factorC: 0,
134
+ },
135
+ // AI-MDL.2: Model Version Tracking
136
+ {
137
+ procedureId: "AI-MDL.2",
138
+ factorA: 1,
139
+ factorB: record.modelId ? 1 : 0,
140
+ factorC: 0,
141
+ },
142
+ ];
143
+ // AI-GRD.1: Guardrail Enforcement (only if guardrails configured)
144
+ const grdRequired = guardrailsRequired || record.guardrailsRequired;
145
+ if (grdRequired > 0) {
146
+ procFactors.push({
147
+ procedureId: "AI-GRD.1",
148
+ factorA: grdRequired,
149
+ factorB: record.guardrailsActive,
150
+ factorC: record.guardrailPassed ? 1 : 0,
151
+ });
152
+ }
153
+ // AI-GRD.2: Content Safety Filter
154
+ procFactors.push({
155
+ procedureId: "AI-GRD.2",
156
+ factorA: 1,
157
+ factorB: record.hasRefusal ? 0 : 1,
158
+ factorC: record.hasRefusal ? 1 : 0,
159
+ });
160
+ // AI-ID.1: Agent Identity Attestation (only when agentId is configured)
161
+ if (agentId) {
162
+ procFactors.push({
163
+ procedureId: "AI-ID.1",
164
+ factorA: 1,
165
+ factorB: 1,
166
+ factorC: 0,
167
+ });
168
+ }
169
+ // Filter to requested procedures
170
+ if (procedures) {
171
+ const allowed = new Set(procedures);
172
+ procFactors = procFactors.filter((p) => allowed.has(p.procedureId));
173
+ }
174
+ // Build payloads with clearing applied
175
+ for (const pf of procFactors) {
176
+ const fp = mintFingerprint(tenantId, pf.procedureId, pf.factorA, pf.factorB, pf.factorC, ts);
177
+ // Base payload — always present regardless of clearing level
178
+ const payload = {
179
+ procedure_id: pf.procedureId,
180
+ factor_a: pf.factorA,
181
+ factor_b: pf.factorB,
182
+ factor_c: pf.factorC,
183
+ clearing_level: clearingLevel,
184
+ anchor_fingerprint: fp,
185
+ anchor_epoch: epoch,
186
+ fingerprint_timestamp_ms: ts,
187
+ };
188
+ // Apply clearing — use conditional assignment so Level 2+ fields
189
+ // are never set (not even as undefined). This guarantees they are
190
+ // absent from JSON.stringify output, not just null.
191
+ applyClearingLevel(payload, record, clearingLevel);
192
+ // Operational metadata survives all clearing levels
193
+ applyOperationalMetadata(payload, fp, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId);
194
+ payloads.push(payload);
195
+ }
196
+ return payloads;
197
+ }
198
+ /** Apply operational metadata that survives all clearing levels. */
199
+ function applyOperationalMetadata(payload, fingerprint, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId) {
200
+ if (agentId)
201
+ payload.agent_id = agentId;
202
+ if (cycleId)
203
+ payload.cycle_id = cycleId;
204
+ if (policyVersionHash)
205
+ payload.policy_version_hash = policyVersionHash;
206
+ if (jurisdiction)
207
+ payload.jurisdiction = jurisdiction;
208
+ if (legalBasis)
209
+ payload.legal_basis = legalBasis;
210
+ if (purposeClass)
211
+ payload.purpose_class = purposeClass;
212
+ if (authorizationId)
213
+ payload.authorization_id = authorizationId;
214
+ if (signingKey)
215
+ payload.payload_signature = signPayload(signingKey, fingerprint, agentId);
216
+ }
217
+ /**
218
+ * Apply clearing level to a payload using explicit field assignment.
219
+ *
220
+ * Level 0-1: All metadata assigned
221
+ * Level 2: Hashes + model_id only. ai_context NOT assigned (absent from wire).
222
+ * Level 3: model_id hashed. Hashes NOT assigned. No metadata.
223
+ */
224
+ function applyClearingLevel(payload, record, level) {
225
+ if (level <= 2) {
226
+ // Levels 0-2: include hashes and metrics
227
+ payload.ai_prompt_hash = record.promptHash;
228
+ payload.ai_response_hash = record.responseHash;
229
+ payload.ai_latency_ms = record.latencyMs;
230
+ payload.ai_input_tokens = record.inputTokens;
231
+ payload.ai_output_tokens = record.outputTokens;
232
+ }
233
+ if (level <= 1) {
234
+ // Levels 0-1: include full ai_context + system prompt hash
235
+ payload.ai_model_id = record.modelId;
236
+ const ctx = {
237
+ provider: record.provider,
238
+ };
239
+ if (record.guardrailNames.length > 0) {
240
+ ctx.guardrails = record.guardrailNames;
241
+ }
242
+ if (record.systemFingerprint) {
243
+ ctx.system_fingerprint = record.systemFingerprint;
244
+ }
245
+ if (payload.cycle_id) {
246
+ ctx.cycle_id = payload.cycle_id;
247
+ }
248
+ payload.ai_context = ctx;
249
+ if (record.systemPromptHash) {
250
+ payload.ai_system_prompt_hash = record.systemPromptHash;
251
+ }
252
+ }
253
+ else if (level === 2) {
254
+ // Level 2: model_id in cleartext, NO ai_context
255
+ payload.ai_model_id = record.modelId;
256
+ // ai_context is never assigned — absent from JSON
257
+ }
258
+ else {
259
+ // Level 3: model_id HASHED, no hashes, no metadata
260
+ payload.ai_model_id = record.modelId
261
+ ? sha256Truncated(record.modelId)
262
+ : undefined;
263
+ // Delete hash fields that were set above (Level 3 overrides Level 2 path)
264
+ delete payload.ai_prompt_hash;
265
+ delete payload.ai_response_hash;
266
+ delete payload.ai_latency_ms;
267
+ delete payload.ai_input_tokens;
268
+ delete payload.ai_output_tokens;
269
+ // ai_context is never assigned
270
+ }
271
+ }
272
+ /**
273
+ * Mint an AI-GRD.3 (Gatekeeper Gate) payload.
274
+ *
275
+ * factor_a = required guardrail count
276
+ * factor_b = actual guardrail count at call time
277
+ * factor_c = 1 if gate passed, 0 if blocked
278
+ * Verdict: PASS if b >= a AND c == 1
279
+ */
280
+ export function extractGatekeeperPayload(tenantId, required, active, gatePassed, clearingLevel, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass) {
281
+ const [ts, epoch] = timestampMs();
282
+ const fa = required;
283
+ const fb = active;
284
+ const fc = gatePassed ? 1 : 0;
285
+ const fp = mintFingerprint(tenantId, "AI-GRD.3", fa, fb, fc, ts);
286
+ const payload = {
287
+ procedure_id: "AI-GRD.3",
288
+ factor_a: fa,
289
+ factor_b: fb,
290
+ factor_c: fc,
291
+ clearing_level: clearingLevel,
292
+ anchor_fingerprint: fp,
293
+ anchor_epoch: epoch,
294
+ fingerprint_timestamp_ms: ts,
295
+ };
296
+ applyOperationalMetadata(payload, fp, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass);
297
+ return payload;
298
+ }
299
+ /** Revocation reason code mapping. */
300
+ export const REVOCATION_REASONS = {
301
+ unspecified: 0,
302
+ model_recall: 1,
303
+ policy_violation: 2,
304
+ data_contamination: 3,
305
+ consent_withdrawal: 4,
306
+ regulatory_order: 5,
307
+ error_correction: 6,
308
+ };
309
+ /**
310
+ * Mint an AI-REV.1 (Anchor Revocation) payload.
311
+ *
312
+ * factor_a = 1 (revocation event occurred)
313
+ * factor_b = 1 (target declared valid by caller)
314
+ * factor_c = reason code (integer from REVOCATION_REASONS)
315
+ */
316
+ export function extractRevocationPayload(tenantId, targetFingerprint, reason, clearingLevel, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass) {
317
+ const [ts, epoch] = timestampMs();
318
+ const reasonCode = REVOCATION_REASONS[reason] ?? 0;
319
+ const fa = 1;
320
+ const fb = 1;
321
+ const fc = reasonCode;
322
+ const fp = mintFingerprint(tenantId, "AI-REV.1", fa, fb, fc, ts);
323
+ const payload = {
324
+ procedure_id: "AI-REV.1",
325
+ factor_a: fa,
326
+ factor_b: fb,
327
+ factor_c: fc,
328
+ clearing_level: clearingLevel,
329
+ anchor_fingerprint: fp,
330
+ anchor_epoch: epoch,
331
+ fingerprint_timestamp_ms: ts,
332
+ revocation_target: targetFingerprint,
333
+ revocation_reason: reason,
334
+ };
335
+ applyOperationalMetadata(payload, fp, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass);
336
+ return payload;
337
+ }
338
+ //# sourceMappingURL=clearing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearing.js","sourceRoot":"","sources":["../src/clearing.ts"],"names":[],"mappings":"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"}
package/dist/demo.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SWT3 AI Witness SDK — Zero-Friction Demo
4
+ *
5
+ * Run with: npx @tenova/swt3-ai demo
6
+ * or: npx tsx node_modules/@tenova/swt3-ai/src/demo.ts
7
+ *
8
+ * No API keys. No account. No network calls.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
package/dist/demo.js ADDED
@@ -0,0 +1,238 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SWT3 AI Witness SDK — Zero-Friction Demo
4
+ *
5
+ * Run with: npx @tenova/swt3-ai demo
6
+ * or: npx tsx node_modules/@tenova/swt3-ai/src/demo.ts
7
+ *
8
+ * No API keys. No account. No network calls.
9
+ */
10
+ import { createHash } from "node:crypto";
11
+ import { writeFileSync } from "node:fs";
12
+ const isColor = process.stdout.isTTY;
13
+ const B = isColor ? "\x1b[1m" : "";
14
+ const D = isColor ? "\x1b[2m" : "";
15
+ const G = isColor ? "\x1b[32m" : "";
16
+ const A = isColor ? "\x1b[33m" : "";
17
+ const C = isColor ? "\x1b[36m" : "";
18
+ const W = isColor ? "\x1b[37m" : "";
19
+ const RD = isColor ? "\x1b[31m" : "";
20
+ const R = isColor ? "\x1b[0m" : "";
21
+ function sha256(data, len = 64) {
22
+ return createHash("sha256").update(data).digest("hex").slice(0, len);
23
+ }
24
+ function mintFingerprint(tenant, proc, fa, fb, fc, tsMs) {
25
+ const n = (v) => (v === Math.floor(v) ? String(v) : String(v));
26
+ const input = `WITNESS:${tenant}:${proc}:${n(fa)}:${n(fb)}:${n(fc)}:${tsMs}`;
27
+ return createHash("sha256").update(input).digest("hex").slice(0, 12);
28
+ }
29
+ function sleep(ms) {
30
+ return new Promise((r) => setTimeout(r, ms));
31
+ }
32
+ async function main() {
33
+ console.log();
34
+ console.log(`${B}SWT3 AI Witness SDK — Live Demo${R}`);
35
+ console.log(`${D}No API keys. No account. No network calls.${R}`);
36
+ console.log(`${D}${"─".repeat(56)}${R}`);
37
+ console.log();
38
+ const tenant = "DEMO_TENANT";
39
+ const provider = "LOCAL";
40
+ const modelId = "gpt-4o-2024-08-06";
41
+ const prompt = "What are the compliance requirements for the EU AI Act?";
42
+ const responseText = "The EU AI Act requires high-risk AI systems to maintain technical documentation, implement risk management systems, and ensure human oversight...";
43
+ console.log(`${C}1. Simulating AI inference...${R}`);
44
+ console.log(` Model: ${W}${modelId}${R}`);
45
+ console.log(` Prompt: ${D}${prompt.slice(0, 50)}...${R}`);
46
+ await sleep(300);
47
+ const promptHash = sha256(prompt, 16);
48
+ const responseHash = sha256(responseText, 16);
49
+ const modelHash = sha256(modelId, 12);
50
+ console.log();
51
+ console.log(`${C}2. Hashing locally (raw text never leaves your infrastructure)...${R}`);
52
+ console.log(` Prompt hash: ${G}${promptHash}${R}`);
53
+ console.log(` Response hash: ${G}${responseHash}${R}`);
54
+ console.log(` Model hash: ${G}${modelHash}${R}`);
55
+ await sleep(300);
56
+ const latencyMs = 847;
57
+ const tokenCount = 142;
58
+ const guardrailsActive = 3;
59
+ console.log();
60
+ console.log(`${C}3. Extracting compliance factors...${R}`);
61
+ console.log(` factor_a (latency): ${W}${latencyMs} ms${R}`);
62
+ console.log(` factor_b (tokens): ${W}${tokenCount}${R}`);
63
+ console.log(` factor_c (guardrails): ${W}${guardrailsActive} active${R}`);
64
+ await sleep(300);
65
+ console.log();
66
+ console.log(`${C}4. Applying Clearing Level 1 (Standard)...${R}`);
67
+ console.log(` ${G}✓${R} Hashes retained`);
68
+ console.log(` ${G}✓${R} Factors retained`);
69
+ console.log(` ${G}✓${R} Raw prompt purged from wire`);
70
+ console.log(` ${G}✓${R} Raw response purged from wire`);
71
+ await sleep(300);
72
+ const tsMs = Date.now();
73
+ const epoch = Math.floor(tsMs / 1000);
74
+ const procedures = [
75
+ ["AI-INF.1", 1, 1, 1, "PASS", "Inference traced"],
76
+ ["AI-MDL.1", 1, 1, 0, "PASS", "Model version recorded"],
77
+ ["AI-GRD.1", 1, 1, guardrailsActive, "PASS", "Guardrails active"],
78
+ ];
79
+ console.log();
80
+ console.log(`${C}5. Minting SWT3 Witness Anchors...${R}`);
81
+ console.log();
82
+ const anchors = [];
83
+ for (const [procId, fa, fb, fc, verdict, desc] of procedures) {
84
+ const fp = mintFingerprint(tenant, procId, fa, fb, fc, tsMs);
85
+ const anchor = `SWT3-E-${provider}-AI-${procId}-${verdict}-${epoch}-${fp}`;
86
+ anchors.push(anchor);
87
+ const color = verdict === "PASS" ? G : A;
88
+ console.log(` ${color}■ ${verdict}${R} ${W}${procId}${R} ${D}${desc}${R}`);
89
+ console.log(` ${D}${anchor}${R}`);
90
+ console.log();
91
+ }
92
+ console.log(`${C}6. Verifying anchor integrity...${R}`);
93
+ const fpCheck = mintFingerprint(tenant, "AI-INF.1", 1, 1, 1, tsMs);
94
+ console.log(` Recomputed: ${G}${fpCheck}${R}`);
95
+ console.log(` Match: ${G}✓ Anchor is independently verifiable${R}`);
96
+ console.log();
97
+ // ── Regulatory Translation Layer ──
98
+ console.log();
99
+ console.log(` ${G}[SWT3] 3 Evidence Anchors Verified.${R}`);
100
+ console.log(` ${D}${"─".repeat(50)}${R}`);
101
+ console.log(` ${B}REGULATORY COVERAGE SUMMARY (NIST AI RMF / EU AI ACT)${R}`);
102
+ console.log();
103
+ // Demonstrated obligations — mapped to EU AI Act articles
104
+ const coverageMap = [
105
+ ["AI-INF.1", "Art. 12(1)", "Automatic Logging of Use Periods", "DEMONSTRATED"],
106
+ ["AI-MDL.1", "Art. 9(4a)", "Model Risk Identification", "DEMONSTRATED"],
107
+ ["AI-GRD.1", "Art. 9(2a)", "Risk Mitigation Measures", "DEMONSTRATED"],
108
+ ];
109
+ for (const [proc, article, desc, verdict] of coverageMap) {
110
+ console.log(` ${G}✓${R} ${W}${proc}${R} → ${article}: ${desc} ${G}[${verdict}]${R}`);
111
+ }
112
+ console.log(` ${D}${"─".repeat(50)}${R}`);
113
+ // Mapped obligations that need production data
114
+ const uncovered = [
115
+ ["AI-INF.2", "Art. 15(3)", "Performance Consistency"],
116
+ ["AI-INF.3", "Art. 12(1)", "Volume & Usage Logging"],
117
+ ["AI-MDL.2", "Art. 12(2b)", "Version & Lineage Tracking"],
118
+ ["AI-MDL.3", "Art. 72(1)", "Post-Market Drift Monitoring"],
119
+ ["AI-MDL.4", "Art. 15(4)", "Feedback Loop Isolation"],
120
+ ["AI-GRD.2", "Art. 9(4b)", "Content Safety Filtering"],
121
+ ["AI-GRD.3", "Art. 10(2f)", "PII & Data Protection"],
122
+ ["AI-EXPL.1", "Art. 13(1)", "Transparency & Explainability"],
123
+ ["AI-EXPL.2", "Art. 13(3b)", "Confidence Calibration"],
124
+ ];
125
+ console.log(` ${C}${uncovered.length} additional obligations mapped (need production data):${R}`);
126
+ for (const [proc, article, desc] of uncovered) {
127
+ console.log(` ${D} ${proc} → ${article}: ${desc}${R}`);
128
+ }
129
+ console.log(` ${D}${"─".repeat(50)}${R}`);
130
+ console.log();
131
+ // EU AI Act countdown
132
+ const deadline = new Date("2027-12-02T00:00:00Z");
133
+ const daysLeft = Math.ceil((deadline.getTime() - Date.now()) / 86400000);
134
+ if (daysLeft > 0) {
135
+ const dc = daysLeft < 60 ? RD : daysLeft < 120 ? A : C;
136
+ console.log(` ${dc}EU AI Act high-risk enforcement in ${daysLeft} days (Dec 2, 2027)${R}`);
137
+ console.log();
138
+ }
139
+ console.log(` ${D}Preview a live auditor view (no account required):${R}`);
140
+ console.log(` ${C}https://sovereign.tenova.io/audit/axm_audit_demo_eu_ai_act_public${R}`);
141
+ console.log();
142
+ console.log(` ${D}Full conformity requires all 12 procedures. Connect to close the gap:${R}`);
143
+ console.log(` ${C}https://sovereign.tenova.io/signup?ref=sdk_demo${R}`);
144
+ console.log();
145
+ console.log(` ${D}SDK docs: ${C}https://sovereign.tenova.io/docs/${R}`);
146
+ console.log(` ${D}Book a pilot: ${C}https://calendly.com/tenova-axiom/30min${R}`);
147
+ console.log(` ${D}GitHub: ${C}https://github.com/tenova-labs/swt3-ai${R}`);
148
+ console.log();
149
+ // ── Write HTML coverage report (best-effort) ──
150
+ try {
151
+ const html = generateHtmlReport(coverageMap, uncovered, anchors, daysLeft);
152
+ writeFileSync("swt3-coverage-report.html", html, "utf-8");
153
+ console.log(` ${G}[SWT3] Coverage report saved \u2192 swt3-coverage-report.html${R}`);
154
+ console.log();
155
+ }
156
+ catch { /* best-effort — never fail the demo */ }
157
+ }
158
+ function generateHtmlReport(coverageMap, uncoveredList, anchorList, daysLeft) {
159
+ const ts = new Date().toISOString().replace("T", " ").slice(0, 19);
160
+ const coveredRows = coverageMap.map(([p, a, d, v]) => `<tr><td style="font-family:monospace">${p}</td><td>${a}</td><td>${d}</td><td style="color:#4ADE80;font-weight:700">[${v}]</td></tr>`).join("\n");
161
+ const uncoveredRows = uncoveredList.map(([p, a, d]) => `<tr><td style="font-family:monospace">${p}</td><td>${a}</td><td>${d}</td><td style="color:#9CA3AF;font-weight:600">[NEEDS PRODUCTION]</td></tr>`).join("\n");
162
+ const anchorText = anchorList.join("\n");
163
+ const countdown = daysLeft > 0
164
+ ? `EU AI Act high-risk enforcement in ${daysLeft} days (December 2, 2027)`
165
+ : "EU AI Act high-risk enforcement has begun.";
166
+ return `<!DOCTYPE html>
167
+ <html lang="en">
168
+ <head>
169
+ <meta charset="UTF-8">
170
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
171
+ <title>SWT3 AI Witness \u2014 Coverage Report</title>
172
+ <style>
173
+ *{margin:0;padding:0;box-sizing:border-box}
174
+ body{background:#070504;color:#E0D9D1;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;padding:2.5rem;line-height:1.6}
175
+ .c{max-width:800px;margin:0 auto}
176
+ h1{color:#E8A87C;font-size:1.5rem;margin-bottom:.25rem}
177
+ h2{color:#E8A87C;font-size:1.1rem;margin:1.5rem 0 .75rem}
178
+ .meta{color:#6B7280;font-size:.8rem;margin-bottom:1.5rem}
179
+ .score{font-size:2.5rem;font-weight:800;margin:1rem 0}
180
+ .score .pass{color:#4ADE80}
181
+ .score .total{color:#6B7280}
182
+ table{width:100%;border-collapse:collapse;margin:.75rem 0;font-size:.9rem}
183
+ th{text-align:left;padding:.5rem .75rem;color:#E8A87C;border-bottom:1px solid #222;font-size:.75rem;text-transform:uppercase;letter-spacing:.1em}
184
+ td{padding:.5rem .75rem;border-bottom:1px solid #151312}
185
+ pre{background:#111;padding:1rem;border-radius:8px;overflow-x:auto;font-size:.8rem;color:#9CA3AF;margin:.75rem 0;border:1px solid #222}
186
+ .countdown{font-size:1rem;font-weight:600;color:#FBBF24;margin:1.5rem 0}
187
+ .cta{display:inline-block;margin-top:1.25rem;padding:.75rem 2rem;background:#E8A87C;color:#070504;font-weight:700;text-decoration:none;border-radius:6px;font-size:.9rem;letter-spacing:.03em}
188
+ .cta:hover{opacity:.9}
189
+ .cta-secondary{display:inline-block;margin-top:1.25rem;margin-right:.75rem;padding:.75rem 2rem;background:transparent;color:#E8A87C;border:1px solid #E8A87C;font-weight:600;text-decoration:none;border-radius:6px;font-size:.9rem;letter-spacing:.03em}
190
+ .cta-secondary:hover{background:rgba(232,168,124,.1)}
191
+ .footer{color:#6B7280;font-size:.75rem;margin-top:2.5rem;padding-top:1.5rem;border-top:1px solid #222}
192
+ .warn{color:#FBBF24}
193
+ .sep{border:none;border-top:1px solid #222;margin:1.5rem 0}
194
+ </style>
195
+ </head>
196
+ <body>
197
+ <div class="c">
198
+ <h1>SWT3 AI Witness \u2014 Coverage Report</h1>
199
+ <p class="meta">Generated ${ts} UTC | SWT3 Protocol v0.3.3 | Demo Environment</p>
200
+
201
+ <div class="score"><span class="pass">12</span><span class="total"> / 12 obligations mapped</span></div>
202
+ <p style="color:#9CA3AF;font-size:.95rem;margin-top:-.5rem">3 demonstrated locally \u00b7 9 need production data</p>
203
+
204
+ <h2>Demonstrated Locally</h2>
205
+ <table>
206
+ <tr><th>Procedure</th><th>EU AI Act</th><th>Obligation</th><th>Status</th></tr>
207
+ ${coveredRows}
208
+ </table>
209
+
210
+ <h2>Mapped \u2014 Needs Production Data (${uncoveredList.length})</h2>
211
+ <table>
212
+ <tr><th>Procedure</th><th>EU AI Act</th><th>Obligation</th><th>Status</th></tr>
213
+ ${uncoveredRows}
214
+ </table>
215
+
216
+ <hr class="sep">
217
+
218
+ <p class="countdown">${countdown}</p>
219
+
220
+ <h2>Anchor Evidence (Demo)</h2>
221
+ <pre>${anchorText}</pre>
222
+
223
+ <p>Full conformity requires all 12 procedures across inference, model governance, guardrails, and explainability domains.</p>
224
+ <a class="cta-secondary" href="https://sovereign.tenova.io/audit/axm_audit_demo_eu_ai_act_public">See Live Auditor View \u2192</a>
225
+ <a class="cta" href="https://sovereign.tenova.io/signup?ref=sdk_demo">Close the Gap \u2014 Free Account</a>
226
+ <p style="margin-top:.75rem;font-size:.8rem;color:#9CA3AF">Preview a real tenant's EU AI Act posture (no account required) \u2014 then create your own.</p>
227
+
228
+ <div class="footer">
229
+ <p>SWT3 Protocol \u2014 Patent Pending \u2014 Apache 2.0</p>
230
+ <p>TeNova: Defining the AI Accountability Standard.</p>
231
+ <p style="margin-top:.5rem">This report was generated locally by the SWT3 AI Witness SDK demo. No data was transmitted.</p>
232
+ </div>
233
+ </div>
234
+ </body>
235
+ </html>`;
236
+ }
237
+ main();
238
+ //# sourceMappingURL=demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * SWT3 AI Witness SDK -- OpenTelemetry Exporter.
3
+ *
4
+ * Exports SWT3 witness anchors as OpenTelemetry spans, allowing them to
5
+ * flow into existing observability pipelines (Datadog, Grafana, Jaeger,
6
+ * Honeycomb, etc.).
7
+ *
8
+ * Usage:
9
+ * import { Witness } from "@tenova/swt3-ai";
10
+ * import { OTelExporter } from "@tenova/swt3-ai/exporters/otel";
11
+ *
12
+ * const exporter = new OTelExporter({ tracerName: "swt3-witness" });
13
+ * const witness = new Witness({ ..., onFlush: exporter.export.bind(exporter) });
14
+ *
15
+ * Requires: npm install @opentelemetry/api
16
+ *
17
+ * Copyright (c) 2026 Tenable Nova LLC. Apache 2.0. Patent pending.
18
+ */
19
+ import type { WitnessPayload, WitnessReceipt } from "../types.js";
20
+ export interface OTelExporterOptions {
21
+ tracerName?: string;
22
+ serviceName?: string;
23
+ }
24
+ export declare class OTelExporter {
25
+ private tracer;
26
+ private traceModule;
27
+ constructor(options?: OTelExporterOptions);
28
+ /**
29
+ * Callback for Witness onFlush. Creates one span per anchor.
30
+ *
31
+ * Pass as: onFlush: exporter.export.bind(exporter)
32
+ */
33
+ export(payloads: WitnessPayload[], receipts: WitnessReceipt[]): void;
34
+ private spanAttributes;
35
+ }
36
+ //# sourceMappingURL=otel.d.ts.map