@tenova/swt3-ai 0.3.2 → 0.3.4

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 (54) hide show
  1. package/README.md +21 -0
  2. package/package.json +1 -1
  3. package/dist/adapters/anthropic.d.ts +0 -32
  4. package/dist/adapters/anthropic.d.ts.map +0 -1
  5. package/dist/adapters/anthropic.js +0 -291
  6. package/dist/adapters/anthropic.js.map +0 -1
  7. package/dist/adapters/bedrock.d.ts +0 -33
  8. package/dist/adapters/bedrock.d.ts.map +0 -1
  9. package/dist/adapters/bedrock.js +0 -259
  10. package/dist/adapters/bedrock.js.map +0 -1
  11. package/dist/adapters/openai.d.ts +0 -19
  12. package/dist/adapters/openai.d.ts.map +0 -1
  13. package/dist/adapters/openai.js +0 -284
  14. package/dist/adapters/openai.js.map +0 -1
  15. package/dist/adapters/vercel-ai.d.ts +0 -64
  16. package/dist/adapters/vercel-ai.d.ts.map +0 -1
  17. package/dist/adapters/vercel-ai.js +0 -68
  18. package/dist/adapters/vercel-ai.js.map +0 -1
  19. package/dist/buffer.d.ts +0 -42
  20. package/dist/buffer.d.ts.map +0 -1
  21. package/dist/buffer.js +0 -161
  22. package/dist/buffer.js.map +0 -1
  23. package/dist/clearing.d.ts +0 -20
  24. package/dist/clearing.d.ts.map +0 -1
  25. package/dist/clearing.js +0 -268
  26. package/dist/clearing.js.map +0 -1
  27. package/dist/demo.d.ts +0 -11
  28. package/dist/demo.d.ts.map +0 -1
  29. package/dist/demo.js +0 -237
  30. package/dist/demo.js.map +0 -1
  31. package/dist/fingerprint.d.ts +0 -29
  32. package/dist/fingerprint.d.ts.map +0 -1
  33. package/dist/fingerprint.js +0 -57
  34. package/dist/fingerprint.js.map +0 -1
  35. package/dist/handoff.d.ts +0 -17
  36. package/dist/handoff.d.ts.map +0 -1
  37. package/dist/handoff.js +0 -82
  38. package/dist/handoff.js.map +0 -1
  39. package/dist/index.d.ts +0 -22
  40. package/dist/index.d.ts.map +0 -1
  41. package/dist/index.js +0 -20
  42. package/dist/index.js.map +0 -1
  43. package/dist/signing.d.ts +0 -20
  44. package/dist/signing.d.ts.map +0 -1
  45. package/dist/signing.js +0 -28
  46. package/dist/signing.js.map +0 -1
  47. package/dist/types.d.ts +0 -96
  48. package/dist/types.d.ts.map +0 -1
  49. package/dist/types.js +0 -17
  50. package/dist/types.js.map +0 -1
  51. package/dist/witness.d.ts +0 -114
  52. package/dist/witness.d.ts.map +0 -1
  53. package/dist/witness.js +0 -291
  54. package/dist/witness.js.map +0 -1
package/dist/demo.js DELETED
@@ -1,237 +0,0 @@
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
- // Covered obligations — mapped to EU AI Act articles
104
- const coverageMap = [
105
- ["AI-INF.1", "Art. 12(1)", "Automatic Logging of Use Periods", "PASS"],
106
- ["AI-MDL.1", "Art. 9(4a)", "Model Risk Identification", "PASS"],
107
- ["AI-GRD.1", "Art. 9(2a)", "Risk Mitigation Measures", "PASS"],
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
- // Uncovered obligations
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(` ${A}⚠ ${uncovered.length}/12 obligations uncovered:${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("2026-08-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 enforcement in ${daysLeft} days (Aug 2, 2026)${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;color:#FBBF24">${p}</td><td>${a}</td><td>${d}</td></tr>`).join("\n");
162
- const anchorText = anchorList.join("\n");
163
- const countdown = daysLeft > 0
164
- ? `EU AI Act enforcement in ${daysLeft} days (August 2, 2026)`
165
- : "EU AI Act 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.2.9 | Demo Environment</p>
200
-
201
- <div class="score"><span class="pass">3</span><span class="total"> / 12 obligations covered</span></div>
202
-
203
- <h2>Covered \u2014 EU AI Act Article Mapping</h2>
204
- <table>
205
- <tr><th>Procedure</th><th>EU AI Act</th><th>Obligation</th><th>Status</th></tr>
206
- ${coveredRows}
207
- </table>
208
-
209
- <h2 class="warn">Uncovered Obligations (${uncoveredList.length})</h2>
210
- <table>
211
- <tr><th>Procedure</th><th>EU AI Act</th><th>Obligation</th></tr>
212
- ${uncoveredRows}
213
- </table>
214
-
215
- <hr class="sep">
216
-
217
- <p class="countdown">${countdown}</p>
218
-
219
- <h2>Anchor Evidence (Demo)</h2>
220
- <pre>${anchorText}</pre>
221
-
222
- <p>Full conformity requires all 12 procedures across inference, model governance, guardrails, and explainability domains.</p>
223
- <a class="cta-secondary" href="https://sovereign.tenova.io/audit/axm_audit_demo_eu_ai_act_public">See Live Auditor View \u2192</a>
224
- <a class="cta" href="https://sovereign.tenova.io/signup?ref=sdk_demo">Close the Gap \u2014 Free Account</a>
225
- <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>
226
-
227
- <div class="footer">
228
- <p>SWT3 Protocol \u2014 Patent Pending \u2014 Apache 2.0</p>
229
- <p>TeNova: Defining the AI Accountability Standard.</p>
230
- <p style="margin-top:.5rem">This report was generated locally by the SWT3 AI Witness SDK demo. No data was transmitted.</p>
231
- </div>
232
- </div>
233
- </body>
234
- </html>`;
235
- }
236
- main();
237
- //# sourceMappingURL=demo.js.map
package/dist/demo.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- /**
2
- * SWT3 AI Witness SDK — Fingerprint minting and SHA-256 utilities.
3
- *
4
- * The fingerprint formula MUST match the Python SDK and the ingestion endpoint:
5
- * SHA256("WITNESS:{tenant}:{proc}:{fa}:{fb}:{fc}:{ts_ms}").hex().slice(0, 12)
6
- *
7
- * Uses Node.js crypto module for server-side compatibility.
8
- */
9
- /**
10
- * SHA-256 hash a string, return first `length` hex characters.
11
- */
12
- export declare function sha256Hex(data: string, length?: number): string;
13
- /**
14
- * SHA-256 hash a string, return first 16 hex chars (prompt/response hashing).
15
- */
16
- export declare function sha256Truncated(data: string, length?: number): string;
17
- /**
18
- * Mint an SWT3 anchor fingerprint.
19
- *
20
- * This MUST match the endpoint's `validateFingerprint()` and the Python SDK's
21
- * `mint_fingerprint()`:
22
- * SHA256("WITNESS:{tenant}:{proc}:{fa}:{fb}:{fc}:{ts_ms}").hex().slice(0, 12)
23
- */
24
- export declare function mintFingerprint(tenantId: string, procedureId: string, factorA: number, factorB: number, factorC: number, timestampMs: number): string;
25
- /**
26
- * Return [millisecond timestamp, epoch seconds] for anchor minting.
27
- */
28
- export declare function timestampMs(): [number, number];
29
- //# sourceMappingURL=fingerprint.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAEnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAEzE;AAiBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,MAAM,CAMR;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAI9C"}
@@ -1,57 +0,0 @@
1
- /**
2
- * SWT3 AI Witness SDK — Fingerprint minting and SHA-256 utilities.
3
- *
4
- * The fingerprint formula MUST match the Python SDK and the ingestion endpoint:
5
- * SHA256("WITNESS:{tenant}:{proc}:{fa}:{fb}:{fc}:{ts_ms}").hex().slice(0, 12)
6
- *
7
- * Uses Node.js crypto module for server-side compatibility.
8
- */
9
- import { createHash } from "crypto";
10
- /**
11
- * SHA-256 hash a string, return first `length` hex characters.
12
- */
13
- export function sha256Hex(data, length = 64) {
14
- return createHash("sha256").update(data, "utf-8").digest("hex").slice(0, length);
15
- }
16
- /**
17
- * SHA-256 hash a string, return first 16 hex chars (prompt/response hashing).
18
- */
19
- export function sha256Truncated(data, length = 16) {
20
- return sha256Hex(data, length);
21
- }
22
- /**
23
- * Format a numeric factor for the fingerprint formula.
24
- *
25
- * CRITICAL: Must match Python's behavior exactly.
26
- * Integer-valued floats → "1" (no decimal), true floats → "1.5"
27
- * JavaScript JSON.stringify(1) → "1", JSON.stringify(1.5) → "1.5"
28
- * so we can use String() which matches.
29
- */
30
- function numStr(v) {
31
- if (Number.isInteger(v)) {
32
- return String(v);
33
- }
34
- return String(v);
35
- }
36
- /**
37
- * Mint an SWT3 anchor fingerprint.
38
- *
39
- * This MUST match the endpoint's `validateFingerprint()` and the Python SDK's
40
- * `mint_fingerprint()`:
41
- * SHA256("WITNESS:{tenant}:{proc}:{fa}:{fb}:{fc}:{ts_ms}").hex().slice(0, 12)
42
- */
43
- export function mintFingerprint(tenantId, procedureId, factorA, factorB, factorC, timestampMs) {
44
- const fpInput = `WITNESS:${tenantId}:${procedureId}` +
45
- `:${numStr(factorA)}:${numStr(factorB)}:${numStr(factorC)}` +
46
- `:${timestampMs}`;
47
- return createHash("sha256").update(fpInput, "utf-8").digest("hex").slice(0, 12);
48
- }
49
- /**
50
- * Return [millisecond timestamp, epoch seconds] for anchor minting.
51
- */
52
- export function timestampMs() {
53
- const ts = Date.now();
54
- const epoch = Math.floor(ts / 1000);
55
- return [ts, epoch];
56
- }
57
- //# sourceMappingURL=fingerprint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,SAAiB,EAAE;IACzD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACnF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,SAAiB,EAAE;IAC/D,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,WAAmB,EACnB,OAAe,EACf,OAAe,EACf,OAAe,EACf,WAAmB;IAEnB,MAAM,OAAO,GACX,WAAW,QAAQ,IAAI,WAAW,EAAE;QACpC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;QAC3D,IAAI,WAAW,EAAE,CAAC;IACpB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC"}
package/dist/handoff.d.ts DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * SWT3 AI Witness SDK — Factor Handoff (Local File Export).
3
- *
4
- * Writes factor data to local JSON files before the clearing engine strips
5
- * them from the wire payload. If the write fails, clearing does NOT proceed.
6
- *
7
- * Spec: SWT3 Factor Handoff Protocol v1.0.0
8
- */
9
- import type { WitnessPayload, InferenceRecord } from "./types.js";
10
- /**
11
- * Write one JSON file per payload to the handoff directory.
12
- *
13
- * Throws on failure — the caller must NOT proceed with clearing
14
- * if this function throws.
15
- */
16
- export declare function writeHandoffFiles(payloads: WitnessPayload[], inference: InferenceRecord, tenantId: string, handoffPath: string): void;
17
- //# sourceMappingURL=handoff.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAuClE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,cAAc,EAAE,EAC1B,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,IAAI,CA+BN"}
package/dist/handoff.js DELETED
@@ -1,82 +0,0 @@
1
- /**
2
- * SWT3 AI Witness SDK — Factor Handoff (Local File Export).
3
- *
4
- * Writes factor data to local JSON files before the clearing engine strips
5
- * them from the wire payload. If the write fails, clearing does NOT proceed.
6
- *
7
- * Spec: SWT3 Factor Handoff Protocol v1.0.0
8
- */
9
- import { writeFileSync, mkdirSync, renameSync, unlinkSync, chmodSync } from "node:fs";
10
- import { join } from "node:path";
11
- const HANDOFF_VERSION = "1.0.0";
12
- /**
13
- * Write one JSON file per payload to the handoff directory.
14
- *
15
- * Throws on failure — the caller must NOT proceed with clearing
16
- * if this function throws.
17
- */
18
- export function writeHandoffFiles(payloads, inference, tenantId, handoffPath) {
19
- mkdirSync(handoffPath, { recursive: true });
20
- for (const payload of payloads) {
21
- const record = buildHandoffRecord(payload, inference, tenantId);
22
- const filename = `${payload.anchor_fingerprint}.json`;
23
- const filepath = join(handoffPath, filename);
24
- const tmpPath = filepath + ".tmp";
25
- try {
26
- writeFileSync(tmpPath, JSON.stringify(record, null, 2) + "\n", "utf-8");
27
- // Set restrictive permissions (owner read/write only, 0o600)
28
- try {
29
- chmodSync(tmpPath, 0o600);
30
- }
31
- catch {
32
- // chmod may not be supported on all platforms (e.g., Windows)
33
- }
34
- // Atomic rename
35
- renameSync(tmpPath, filepath);
36
- }
37
- catch (err) {
38
- // Clean up temp file on failure
39
- try {
40
- unlinkSync(tmpPath);
41
- }
42
- catch {
43
- // ignore cleanup errors
44
- }
45
- throw err;
46
- }
47
- }
48
- }
49
- function buildHandoffRecord(payload, inference, tenantId) {
50
- return {
51
- handoff_version: HANDOFF_VERSION,
52
- handoff_type: `clearing_level_${payload.clearing_level}`,
53
- tenant_id: tenantId,
54
- timestamp_iso: new Date(payload.anchor_epoch * 1000).toISOString(),
55
- anchor_fingerprint: payload.anchor_fingerprint,
56
- anchor_epoch: payload.anchor_epoch,
57
- fingerprint_timestamp_ms: payload.fingerprint_timestamp_ms,
58
- clearing_level: payload.clearing_level,
59
- factors: {
60
- procedure_id: payload.procedure_id,
61
- factor_a: payload.factor_a,
62
- factor_b: payload.factor_b,
63
- factor_c: payload.factor_c,
64
- },
65
- metadata: {
66
- ai_model_id: inference.modelId,
67
- ai_model_hash: inference.modelHash,
68
- ai_prompt_hash: inference.promptHash,
69
- ai_response_hash: inference.responseHash,
70
- ai_latency_ms: inference.latencyMs,
71
- ai_input_tokens: inference.inputTokens,
72
- ai_output_tokens: inference.outputTokens,
73
- ai_provider: inference.provider,
74
- ai_system_fingerprint: inference.systemFingerprint,
75
- ai_guardrail_names: inference.guardrailNames ?? [],
76
- ai_guardrails_active: inference.guardrailsActive,
77
- ai_guardrails_required: inference.guardrailsRequired,
78
- ai_guardrail_passed: inference.guardrailPassed,
79
- },
80
- };
81
- }
82
- //# sourceMappingURL=handoff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,22 +0,0 @@
1
- /**
2
- * @tenova/swt3-ai — SWT3 AI Witness SDK for TypeScript/Node.js
3
- *
4
- * Usage:
5
- * import { Witness } from "@tenova/swt3-ai";
6
- * import OpenAI from "openai";
7
- *
8
- * const witness = new Witness({
9
- * endpoint: "https://sovereign.tenova.io",
10
- * apiKey: "axm_live_...",
11
- * tenantId: "YOUR_TENANT_ID",
12
- * });
13
- *
14
- * const client = witness.wrap(new OpenAI()) as OpenAI;
15
- */
16
- export { Witness } from "./witness.js";
17
- export type { WitnessOptions } from "./witness.js";
18
- export type { WitnessConfig, WitnessPayload, WitnessReceipt, InferenceRecord, BatchResponse, } from "./types.js";
19
- export { mintFingerprint, sha256Truncated, sha256Hex, timestampMs } from "./fingerprint.js";
20
- export { extractPayloads } from "./clearing.js";
21
- export { signPayload } from "./signing.js";
22
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js DELETED
@@ -1,20 +0,0 @@
1
- /**
2
- * @tenova/swt3-ai — SWT3 AI Witness SDK for TypeScript/Node.js
3
- *
4
- * Usage:
5
- * import { Witness } from "@tenova/swt3-ai";
6
- * import OpenAI from "openai";
7
- *
8
- * const witness = new Witness({
9
- * endpoint: "https://sovereign.tenova.io",
10
- * apiKey: "axm_live_...",
11
- * tenantId: "YOUR_TENANT_ID",
12
- * });
13
- *
14
- * const client = witness.wrap(new OpenAI()) as OpenAI;
15
- */
16
- export { Witness } from "./witness.js";
17
- export { mintFingerprint, sha256Truncated, sha256Hex, timestampMs } from "./fingerprint.js";
18
- export { extractPayloads } from "./clearing.js";
19
- export { signPayload } from "./signing.js";
20
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AASvC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
package/dist/signing.d.ts DELETED
@@ -1,20 +0,0 @@
1
- /**
2
- * SWT3 AI Witness SDK - Payload Signing (HMAC-SHA256).
3
- *
4
- * Signs anchor fingerprints to prove which SDK instance minted them.
5
- * The signature input is deterministic and must match the Python SDK.
6
- */
7
- /**
8
- * Sign an anchor fingerprint with HMAC-SHA256.
9
- *
10
- * @param signingKey - Shared secret between SDK and server.
11
- * @param anchorFingerprint - The 12-char hex fingerprint to sign.
12
- * @param agentId - Optional agent identifier to bind to the signature.
13
- * @returns 64-char hex HMAC-SHA256 digest.
14
- *
15
- * Message format:
16
- * "{fingerprint}:{agentId}" if agentId is provided
17
- * "{fingerprint}" if agentId is undefined
18
- */
19
- export declare function signPayload(signingKey: string, anchorFingerprint: string, agentId?: string): string;
20
- //# sourceMappingURL=signing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../src/signing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EACzB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAOR"}
package/dist/signing.js DELETED
@@ -1,28 +0,0 @@
1
- /**
2
- * SWT3 AI Witness SDK - Payload Signing (HMAC-SHA256).
3
- *
4
- * Signs anchor fingerprints to prove which SDK instance minted them.
5
- * The signature input is deterministic and must match the Python SDK.
6
- */
7
- import { createHmac } from "node:crypto";
8
- /**
9
- * Sign an anchor fingerprint with HMAC-SHA256.
10
- *
11
- * @param signingKey - Shared secret between SDK and server.
12
- * @param anchorFingerprint - The 12-char hex fingerprint to sign.
13
- * @param agentId - Optional agent identifier to bind to the signature.
14
- * @returns 64-char hex HMAC-SHA256 digest.
15
- *
16
- * Message format:
17
- * "{fingerprint}:{agentId}" if agentId is provided
18
- * "{fingerprint}" if agentId is undefined
19
- */
20
- export function signPayload(signingKey, anchorFingerprint, agentId) {
21
- const message = agentId
22
- ? `${anchorFingerprint}:${agentId}`
23
- : anchorFingerprint;
24
- return createHmac("sha256", signingKey)
25
- .update(message, "utf-8")
26
- .digest("hex");
27
- }
28
- //# sourceMappingURL=signing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signing.js","sourceRoot":"","sources":["../src/signing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CACzB,UAAkB,EAClB,iBAAyB,EACzB,OAAgB;IAEhB,MAAM,OAAO,GAAG,OAAO;QACrB,CAAC,CAAC,GAAG,iBAAiB,IAAI,OAAO,EAAE;QACnC,CAAC,CAAC,iBAAiB,CAAC;IACtB,OAAO,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC;SACpC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;SACxB,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC"}