@tenova/swt3-ai 0.2.0 → 0.2.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 CHANGED
@@ -224,6 +224,8 @@ npm install @anthropic-ai/sdk # for Anthropic adapter
224
224
  | `timeout` | `10000` | HTTP timeout (ms) |
225
225
  | `maxRetries` | `3` | Retries before dead-letter |
226
226
  | `guardrailNames` | `[]` | Active guardrail names |
227
+ | `factorHandoff` | - | `"file"` to enable local factor export |
228
+ | `factorHandoffPath` | - | Directory for factor handoff files |
227
229
 
228
230
  ### `witness.wrap(client)`
229
231
 
@@ -241,6 +243,32 @@ Force-flush all buffered payloads. Returns receipts.
241
243
 
242
244
  Stop the witness and flush remaining payloads.
243
245
 
246
+ ## Factor Handoff (Clearing Level 2+)
247
+
248
+ At Clearing Level 2 or 3, some or all verifiable data is stripped before it reaches the witness endpoint. The Factor Handoff writes your factors to a local directory **before** clearing proceeds. If the write fails, the payload is not transmitted.
249
+
250
+ ```typescript
251
+ const witness = new Witness({
252
+ endpoint: "https://sovereign.tenova.io",
253
+ apiKey: "axm_live_...",
254
+ tenantId: "YOUR_ENCLAVE",
255
+ clearingLevel: 3,
256
+ factorHandoff: "file",
257
+ factorHandoffPath: "/secure/vault/factors/",
258
+ });
259
+ ```
260
+
261
+ Each anchor gets its own JSON file containing the full uncleared factors and metadata for independent re-verification.
262
+
263
+ For the full protocol specification, see the [Factor Handoff Protocol](https://sovereign.tenova.io/docs/factor-handoff-protocol.html).
264
+
265
+ ## Documentation
266
+
267
+ - [SDK Developer Docs](https://sovereign.tenova.io/docs/) - Quickstart, providers, clearing levels, configuration
268
+ - [Factor Handoff Protocol](https://sovereign.tenova.io/docs/factor-handoff-protocol.html) - How factors are securely transferred to your custody
269
+ - [Clearing Protocol Terms](https://sovereign.tenova.io/terms/clearing-addendum) - Shared responsibility model and liability
270
+ - [CMMC Compliance Overlay](https://sovereign.tenova.io/guides/cmmc-overlay.html) - Control mappings for defense industrial base
271
+
244
272
  ---
245
273
 
246
274
  *SWT3: Sovereign Witness Traceability. We don't run your models. We witness them.*
@@ -0,0 +1,17 @@
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
@@ -0,0 +1 @@
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;AAoClE;;;;;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"}
@@ -0,0 +1,82 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACtF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,eAAe,GAAG,OAAO,CAAC;AAkChC;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA0B,EAC1B,SAA0B,EAC1B,QAAgB,EAChB,WAAmB;IAEnB,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,kBAAkB,OAAO,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;QAElC,IAAI,CAAC;YACH,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;YAExE,6DAA6D;YAC7D,IAAI,CAAC;gBACH,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,8DAA8D;YAChE,CAAC;YAED,gBAAgB;YAChB,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,gCAAgC;YAChC,IAAI,CAAC;gBACH,UAAU,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAuB,EACvB,SAA0B,EAC1B,QAAgB;IAEhB,OAAO;QACL,eAAe,EAAE,eAAe;QAChC,YAAY,EAAE,kBAAkB,OAAO,CAAC,cAAc,EAAE;QACxD,SAAS,EAAE,QAAQ;QACnB,aAAa,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;QAClE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;QAC1D,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,OAAO,EAAE;YACP,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B;QACD,QAAQ,EAAE;YACR,WAAW,EAAE,SAAS,CAAC,OAAO;YAC9B,aAAa,EAAE,SAAS,CAAC,SAAS;YAClC,cAAc,EAAE,SAAS,CAAC,UAAU;YACpC,gBAAgB,EAAE,SAAS,CAAC,YAAY;YACxC,aAAa,EAAE,SAAS,CAAC,SAAS;YAClC,eAAe,EAAE,SAAS,CAAC,WAAW;YACtC,gBAAgB,EAAE,SAAS,CAAC,YAAY;YACxC,WAAW,EAAE,SAAS,CAAC,QAAQ;YAC/B,qBAAqB,EAAE,SAAS,CAAC,iBAAiB;YAClD,kBAAkB,EAAE,SAAS,CAAC,cAAc,IAAI,EAAE;YAClD,oBAAoB,EAAE,SAAS,CAAC,gBAAgB;YAChD,sBAAsB,EAAE,SAAS,CAAC,kBAAkB;YACpD,mBAAmB,EAAE,SAAS,CAAC,eAAe;SAC/C;KACF,CAAC;AACJ,CAAC"}
package/dist/types.d.ts CHANGED
@@ -14,6 +14,8 @@ export interface WitnessConfig {
14
14
  guardrailsRequired: number;
15
15
  guardrailNames: string[];
16
16
  procedures?: string[];
17
+ factorHandoff?: "file";
18
+ factorHandoffPath?: string;
17
19
  }
18
20
  export interface WitnessPayload {
19
21
  procedure_id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,mDAAmD;AACnD,eAAO,MAAM,aAAa,aAQxB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,mDAAmD;AACnD,eAAO,MAAM,aAAa,aAQxB,CAAC"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4EH,mDAAmD;AACnD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IACnC,UAAU,EAAE,UAAU,EAAE,UAAU;IAClC,UAAU,EAAE,UAAU,EAAE,UAAU;IAClC,UAAU,EAAE,UAAU,EAAE,UAAU;IAClC,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,WAAW;CACzB,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8EH,mDAAmD;AACnD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IACnC,UAAU,EAAE,UAAU,EAAE,UAAU;IAClC,UAAU,EAAE,UAAU,EAAE,UAAU;IAClC,UAAU,EAAE,UAAU,EAAE,UAAU;IAClC,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,WAAW;CACzB,CAAC,CAAC"}
package/dist/witness.d.ts CHANGED
@@ -34,6 +34,8 @@ export interface WitnessOptions {
34
34
  guardrailsRequired?: number;
35
35
  guardrailNames?: string[];
36
36
  procedures?: string[];
37
+ factorHandoff?: "file";
38
+ factorHandoffPath?: string;
37
39
  }
38
40
  export declare class Witness {
39
41
  private config;
@@ -53,6 +55,10 @@ export declare class Witness {
53
55
  /**
54
56
  * Record a witnessed inference. Extracts factors, applies clearing,
55
57
  * and enqueues payloads for background flush.
58
+ *
59
+ * If factorHandoff is configured, factors are written to the handoff
60
+ * destination BEFORE clearing proceeds. If the handoff fails, the
61
+ * payload is NOT transmitted.
56
62
  */
57
63
  record(inference: InferenceRecord): void;
58
64
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,KAAK,EAAiC,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,EAAE,cAAc;IAwBnC;;;;;;;;;OASG;IACH,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;IAyB9B;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAoBxC;;;;;;;;;OASG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI;IAI1E,yCAAyC;IACnC,KAAK,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIxC,qDAAqD;IAC/C,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIvC,kCAAkC;IAClC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,2CAA2C;IAC3C,IAAI,QAAQ,IAAI,cAAc,EAAE,CAE/B;CACF"}
1
+ {"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AASH,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,KAAK,EAAiC,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,EAAE,cAAc;IAgCnC;;;;;;;;;OASG;IACH,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;IAyB9B;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IA2BxC;;;;;;;;;OASG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI;IAI1E,yCAAyC;IACnC,KAAK,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIxC,qDAAqD;IAC/C,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIvC,kCAAkC;IAClC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,2CAA2C;IAC3C,IAAI,QAAQ,IAAI,cAAc,EAAE,CAE/B;CACF"}
package/dist/witness.js CHANGED
@@ -21,6 +21,7 @@
21
21
  */
22
22
  import { extractPayloads } from "./clearing.js";
23
23
  import { WitnessBuffer } from "./buffer.js";
24
+ import { writeHandoffFiles } from "./handoff.js";
24
25
  import { wrapOpenAI } from "./adapters/openai.js";
25
26
  import { wrapAnthropic } from "./adapters/anthropic.js";
26
27
  import { wrapBedrock } from "./adapters/bedrock.js";
@@ -37,6 +38,12 @@ export class Witness {
37
38
  throw new Error("apiKey must start with 'axm_'");
38
39
  if (!options.tenantId)
39
40
  throw new Error("tenantId is required");
41
+ if (options.factorHandoff && options.factorHandoff !== "file") {
42
+ throw new Error("factorHandoff must be 'file' (other methods planned for v0.4.0)");
43
+ }
44
+ if (options.factorHandoff === "file" && !options.factorHandoffPath) {
45
+ throw new Error("factorHandoffPath is required when factorHandoff is 'file'");
46
+ }
40
47
  this.config = {
41
48
  endpoint: options.endpoint.replace(/\/+$/, ""),
42
49
  apiKey: options.apiKey,
@@ -50,6 +57,8 @@ export class Witness {
50
57
  guardrailsRequired: options.guardrailsRequired ?? 0,
51
58
  guardrailNames: options.guardrailNames ?? [],
52
59
  procedures: options.procedures,
60
+ factorHandoff: options.factorHandoff,
61
+ factorHandoffPath: options.factorHandoffPath,
53
62
  };
54
63
  this.buffer = new WitnessBuffer(this.config);
55
64
  }
@@ -84,6 +93,10 @@ export class Witness {
84
93
  /**
85
94
  * Record a witnessed inference. Extracts factors, applies clearing,
86
95
  * and enqueues payloads for background flush.
96
+ *
97
+ * If factorHandoff is configured, factors are written to the handoff
98
+ * destination BEFORE clearing proceeds. If the handoff fails, the
99
+ * payload is NOT transmitted.
87
100
  */
88
101
  record(inference) {
89
102
  // Merge guardrail config
@@ -93,6 +106,12 @@ export class Witness {
93
106
  inference.guardrailsRequired = this.config.guardrailsRequired;
94
107
  }
95
108
  const payloads = extractPayloads(inference, this.config.tenantId, this.config.clearingLevel, this.config.latencyThresholdMs, this.config.guardrailsRequired, this.config.procedures);
109
+ // Factor handoff: write full (uncleared) data to custody destination
110
+ // BEFORE enqueuing the cleared payload for transmission.
111
+ // If this fails, we do NOT proceed.
112
+ if (this.config.factorHandoff === "file" && this.config.factorHandoffPath) {
113
+ writeHandoffFiles(payloads, inference, this.config.tenantId, this.config.factorHandoffPath);
114
+ }
96
115
  this.buffer.enqueueMany(payloads);
97
116
  }
98
117
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"witness.js","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"witness.js","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tenova/swt3-ai",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "SWT3 AI Witness SDK: cryptographic attestation for AI inference",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",