@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.
- package/README.md +150 -18
- package/dist/adapters/anthropic.d.ts +32 -0
- package/dist/adapters/anthropic.d.ts.map +1 -0
- package/dist/adapters/anthropic.js +301 -0
- package/dist/adapters/anthropic.js.map +1 -0
- package/dist/adapters/bedrock.d.ts +33 -0
- package/dist/adapters/bedrock.d.ts.map +1 -0
- package/dist/adapters/bedrock.js +269 -0
- package/dist/adapters/bedrock.js.map +1 -0
- package/dist/adapters/openai.d.ts +19 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +289 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/adapters/vercel-ai.d.ts +64 -0
- package/dist/adapters/vercel-ai.d.ts.map +1 -0
- package/dist/adapters/vercel-ai.js +68 -0
- package/dist/adapters/vercel-ai.js.map +1 -0
- package/dist/buffer.d.ts +43 -0
- package/dist/buffer.d.ts.map +1 -0
- package/dist/buffer.js +172 -0
- package/dist/buffer.js.map +1 -0
- package/dist/clearing.d.ts +39 -0
- package/dist/clearing.d.ts.map +1 -0
- package/dist/clearing.js +338 -0
- package/dist/clearing.js.map +1 -0
- package/dist/demo.d.ts +11 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +238 -0
- package/dist/demo.js.map +1 -0
- package/dist/exporters/otel.d.ts +36 -0
- package/dist/exporters/otel.d.ts.map +1 -0
- package/dist/exporters/otel.js +94 -0
- package/dist/exporters/otel.js.map +1 -0
- package/dist/fingerprint.d.ts +29 -0
- package/dist/fingerprint.d.ts.map +1 -0
- package/dist/fingerprint.js +57 -0
- package/dist/fingerprint.js.map +1 -0
- package/dist/handoff.d.ts +17 -0
- package/dist/handoff.d.ts.map +1 -0
- package/dist/handoff.js +82 -0
- package/dist/handoff.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/signing.d.ts +20 -0
- package/dist/signing.d.ts.map +1 -0
- package/dist/signing.js +28 -0
- package/dist/signing.js.map +1 -0
- package/dist/types.d.ts +108 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/types.js.map +1 -0
- package/dist/witness.d.ts +193 -0
- package/dist/witness.d.ts.map +1 -0
- package/dist/witness.js +487 -0
- package/dist/witness.js.map +1 -0
- package/package.json +10 -2
package/dist/clearing.js
ADDED
|
@@ -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
|
package/dist/demo.js.map
ADDED
|
@@ -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
|