@tenova/swt3-ai 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +118 -24
- package/dist/adapters/ollama.d.ts +13 -0
- package/dist/adapters/ollama.d.ts.map +1 -0
- package/dist/adapters/ollama.js +25 -0
- package/dist/adapters/ollama.js.map +1 -0
- package/dist/adapters/openai.d.ts +1 -1
- package/dist/adapters/openai.d.ts.map +1 -1
- package/dist/adapters/openai.js +17 -17
- package/dist/adapters/openai.js.map +1 -1
- package/dist/adapters/vllm.d.ts +13 -0
- package/dist/adapters/vllm.d.ts.map +1 -0
- package/dist/adapters/vllm.js +15 -0
- package/dist/adapters/vllm.js.map +1 -0
- package/dist/buffer.d.ts.map +1 -1
- package/dist/buffer.js +3 -1
- package/dist/buffer.js.map +1 -1
- package/dist/clearing.d.ts +3 -3
- package/dist/clearing.d.ts.map +1 -1
- package/dist/clearing.js +15 -10
- package/dist/clearing.js.map +1 -1
- package/dist/config.d.ts +27 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +178 -0
- package/dist/config.js.map +1 -0
- package/dist/demo.js +2 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/witness.d.ts +34 -2
- package/dist/witness.d.ts.map +1 -1
- package/dist/witness.js +93 -16
- package/dist/witness.js.map +1 -1
- package/package.json +40 -5
package/README.md
CHANGED
|
@@ -159,6 +159,115 @@ This happens automatically. No configuration needed. The system prompt hash is e
|
|
|
159
159
|
|
|
160
160
|
The hash is included at clearing levels 0 and 1, stripped at levels 2 and 3.
|
|
161
161
|
|
|
162
|
+
## RAG Context Witnessing
|
|
163
|
+
|
|
164
|
+
New in v0.4.3. Witness what context chunks your RAG pipeline retrieves, from which corpus, and how relevant they are. Chunk text is never transmitted -- only SHA-256 hashes.
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
// Zero-friction: pass raw strings, SDK handles hashing
|
|
168
|
+
witness.witnessRagContext({
|
|
169
|
+
chunks: ["chunk text 1", "chunk text 2", "chunk text 3"],
|
|
170
|
+
corpusId: "legal-docs-v3",
|
|
171
|
+
});
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
This mints an AI-RAG.1 (Context Retrieval Provenance) anchor. Add similarity scores to also get AI-RAG.2 (Context Relevance):
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
import type { RagChunk } from "@tenova/swt3-ai";
|
|
178
|
+
|
|
179
|
+
witness.witnessRagContext({
|
|
180
|
+
chunks: [
|
|
181
|
+
{ contentHash: "abc123...", sourceId: "doc-7/p3", similarityScore: 0.92 },
|
|
182
|
+
{ contentHash: "def456...", sourceId: "doc-2/p1", similarityScore: 0.78 },
|
|
183
|
+
{ contentHash: "789abc...", sourceId: "doc-4/p2", similarityScore: 0.61 },
|
|
184
|
+
],
|
|
185
|
+
corpusId: "legal-docs-v3",
|
|
186
|
+
embeddingModel: "text-embedding-3-small",
|
|
187
|
+
similarityThreshold: 0.75, // triggers AI-RAG.2
|
|
188
|
+
});
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
One call. Two procedures. Complete retrieval attestation.
|
|
192
|
+
|
|
193
|
+
Maps to: EU AI Act Art. 12(2)(a) (reference database logging), Art. 10(2) (data quality), NIST AI RMF MAP 3.5 (data provenance).
|
|
194
|
+
|
|
195
|
+
## Model Weight Integrity
|
|
196
|
+
|
|
197
|
+
Witness the actual model weights, not just the model name string:
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
// File path: SDK hashes automatically
|
|
201
|
+
witness.witnessModelWeights("/models/llama-3.1-70b.safetensors");
|
|
202
|
+
|
|
203
|
+
// Pre-computed hash with verification
|
|
204
|
+
witness.witnessModelWeights(
|
|
205
|
+
{ fileHash: "abc123...", format: "safetensors" },
|
|
206
|
+
{ expectedHash: "abc123..." }, // PASS if match, FAIL if mismatch
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
// Adapter stack + quantization
|
|
210
|
+
witness.witnessAdapterStack(
|
|
211
|
+
[{ name: "lora-legal", adapterHash: "aaa111" }],
|
|
212
|
+
"llama-3.1-70b",
|
|
213
|
+
);
|
|
214
|
+
witness.witnessQuantization("gptq", { bits: 4, groupSize: 128 });
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Maps to: EU AI Act Art. 15(4) (resilience against modification), Art. 12(2)(b) (version logging).
|
|
218
|
+
|
|
219
|
+
## Skill Manifest Attestation
|
|
220
|
+
|
|
221
|
+
Witness which skills, tools, and plugins are loaded in your agent:
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
// Zero-friction: just names
|
|
225
|
+
witness.witnessSkillManifest(["code_exec", "web_search", "file_read"]);
|
|
226
|
+
|
|
227
|
+
// Memory context
|
|
228
|
+
witness.witnessMemoryContext([
|
|
229
|
+
{ sourceType: "vector_store", sourceId: "pinecone-prod" },
|
|
230
|
+
{ sourceType: "conversation", sourceId: "session-123" },
|
|
231
|
+
]);
|
|
232
|
+
|
|
233
|
+
// Reward model binding
|
|
234
|
+
witness.witnessRewardModel("rm-v3-legal", { method: "dpo" });
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Maps to: EU AI Act Art. 12(2)(b) (capability tracking), NIST AI RMF GOVERN 1.7 (capability documentation).
|
|
238
|
+
|
|
239
|
+
## Multi-Agent Chains, Violations, and Safety (v0.5.0)
|
|
240
|
+
|
|
241
|
+
New in v0.5.0. Convenience methods for 8 additional procedures covering multi-agent orchestration, policy enforcement, human oversight, and training data governance:
|
|
242
|
+
|
|
243
|
+
```typescript
|
|
244
|
+
// Multi-agent chain handoff (AI-CHAIN.1)
|
|
245
|
+
witness.witnessChainHandoff(3, "step-2-reviewer");
|
|
246
|
+
|
|
247
|
+
// Policy violation reporting (AI-VIO.1)
|
|
248
|
+
witness.witnessViolation(3, "PII in output", { autoDetected: true, policyCategory: "data" });
|
|
249
|
+
|
|
250
|
+
// Agent charter attestation (AI-CHR.1)
|
|
251
|
+
witness.witnessCharter({ charterText: "You are a fraud detection assistant..." });
|
|
252
|
+
|
|
253
|
+
// Model registry check (AI-MDL.8)
|
|
254
|
+
witness.witnessModelRegistry("gpt-4o-2025-04-16", "eu-approved-models-v3");
|
|
255
|
+
|
|
256
|
+
// Reviewer identity binding for four-eyes rule (AI-HITL.3)
|
|
257
|
+
witness.witnessReviewerIdentity(2, 2, { method: "cryptographic" });
|
|
258
|
+
|
|
259
|
+
// Safe state attestation (AI-SAFE.1)
|
|
260
|
+
witness.witnessSafeState({ mechanismExists: true, safeStateConfirmed: true });
|
|
261
|
+
|
|
262
|
+
// Training data statistics (AI-DATA.3)
|
|
263
|
+
witness.witnessTrainingStats(50000, 128, { classBalanceRatio: 0.85 });
|
|
264
|
+
|
|
265
|
+
// Training data PII lifecycle (AI-DATA.4)
|
|
266
|
+
witness.witnessTrainingPiiLifecycle(10000, { eventType: "pseudonymization", datasetId: "training-v3" });
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Maps to: EU AI Act Art. 10(3), Art. 10(5), Art. 12(2)(a), Art. 12(3)(d), Art. 13, Art. 14(4)(e), Art. 14(5), Art. 51. NIST AI RMF MANAGE 3.2, MANAGE 4.1, GOVERN 1.2.
|
|
270
|
+
|
|
162
271
|
## Agent Identity
|
|
163
272
|
|
|
164
273
|
Bind a unique identity to every anchor your agent produces:
|
|
@@ -173,11 +282,15 @@ const witness = new Witness({
|
|
|
173
282
|
});
|
|
174
283
|
```
|
|
175
284
|
|
|
176
|
-
The `agentId` survives all clearing levels. The `signingKey` produces
|
|
285
|
+
The `agentId` survives all clearing levels. The `signingKey` produces an HMAC-SHA256 signature on every anchor, proving which agent instance created it. When a signing key is registered server-side, the server validates the signature on ingestion and rejects tampered payloads. This enables:
|
|
286
|
+
- **Payload authenticity** -- server verifies the SDK that minted the anchor held the registered secret
|
|
287
|
+
- **Tamper detection** -- any modification after signing causes rejection (422)
|
|
177
288
|
- Per-agent compliance passports
|
|
178
289
|
- Fleet-wide governance dashboards
|
|
179
290
|
- Agent-scoped evidence packages for auditors
|
|
180
291
|
|
|
292
|
+
Receipts include `signature_verified: true` when the server confirms the signature.
|
|
293
|
+
|
|
181
294
|
## Gatekeeper Mode (Pre-Call Enforcement)
|
|
182
295
|
|
|
183
296
|
New in v0.3.4. Require guardrails to be active *before* the model is called, not just observed after:
|
|
@@ -265,7 +378,7 @@ Each inference produces anchors for these checks. Every check maps to a regulati
|
|
|
265
378
|
|
|
266
379
|
### EU AI Act Article Mapping
|
|
267
380
|
|
|
268
|
-
All
|
|
381
|
+
All 42 SWT3 AI witnessing procedures map to specific EU AI Act obligations:
|
|
269
382
|
|
|
270
383
|
| Procedure | EU AI Act Article | Obligation | Demo | Production |
|
|
271
384
|
|-----------|-------------------|------------|------|------------|
|
|
@@ -282,7 +395,7 @@ All 36 SWT3 AI witnessing procedures map to specific EU AI Act obligations:
|
|
|
282
395
|
| AI-EXPL.1 | Art. 13(1) | Transparency & Explainability | -| ✓ |
|
|
283
396
|
| AI-EXPL.2 | Art. 13(3b) | Confidence Calibration | -| ✓ |
|
|
284
397
|
|
|
285
|
-
The demo demonstrates
|
|
398
|
+
The demo demonstrates 5 procedures using simulated data. All 42 are available in production with real inference data. 36 cross-language test vectors ensure fingerprint parity across Python, TypeScript, Rust, C#, and Ruby. [See live conformity →](https://sovereign.tenova.io/audit/axm_audit_demo_eu_ai_act_public)
|
|
286
399
|
|
|
287
400
|
## How Verdicts Work
|
|
288
401
|
|
|
@@ -441,7 +554,7 @@ const witness = new Witness({
|
|
|
441
554
|
| `maxRetries` | 3 | Retries before dead-letter |
|
|
442
555
|
| `guardrailNames` | [] | Active guardrail names |
|
|
443
556
|
| `agentId` | - | Agent identity (survives all clearing levels) |
|
|
444
|
-
| `signingKey` | - | HMAC-SHA256 key for payload signing |
|
|
557
|
+
| `signingKey` | - | HMAC-SHA256 key for payload signing (register server-side for validation) |
|
|
445
558
|
| `cycleId` | - | Multi-agent chain link (survives all clearing levels) |
|
|
446
559
|
| `policyVersion` | - | Policy config identifier (hashed in payloads) |
|
|
447
560
|
| `strict` | false | Gatekeeper mode: block inference if guardrails insufficient |
|
|
@@ -521,26 +634,6 @@ This SDK produces identical fingerprints to the Python SDK (`swt3-ai`). A unifie
|
|
|
521
634
|
| API routes / Edge | TypeScript | @tenova/swt3-ai |
|
|
522
635
|
| Frontend (Next.js) | TypeScript | @tenova/swt3-ai + Vercel AI SDK |
|
|
523
636
|
|
|
524
|
-
## MCP Server (Agentic AI)
|
|
525
|
-
|
|
526
|
-
AI agents can discover SWT3 compliance tools automatically via the Model Context Protocol. No developer integration required. The agent finds the tools and uses them on its own.
|
|
527
|
-
|
|
528
|
-
```bash
|
|
529
|
-
npm install @tenova/swt3-mcp
|
|
530
|
-
```
|
|
531
|
-
|
|
532
|
-
Add to your MCP config:
|
|
533
|
-
|
|
534
|
-
```json
|
|
535
|
-
{ "mcpServers": { "swt3": { "command": "npx", "args": ["@tenova/swt3-mcp"] } } }
|
|
536
|
-
```
|
|
537
|
-
|
|
538
|
-
Zero configuration required. Works immediately in demo mode. Add `SWT3_API_KEY` to connect to a production ledger. Compatible with Claude, GPT, and any MCP-compatible agent.
|
|
539
|
-
|
|
540
|
-
**Tools provided:** `witness_inference`, `verify_anchor`, `list_anchors`, `posture`, `signup`, `health`
|
|
541
|
-
|
|
542
|
-
This is the first compliance protocol with native MCP support. Agents discover witnessing through standard tool enumeration, making compliance an infrastructure capability rather than a developer burden.
|
|
543
|
-
|
|
544
637
|
## Privacy
|
|
545
638
|
|
|
546
639
|
Your prompts and responses **never leave your infrastructure**. The SDK computes SHA-256 hashes locally and transmits only irreversible hashes and numeric factors. At Clearing Level 3, even the model name is hashed. The witness endpoint is a blind registrar: it stores cryptographic proofs, not your data.
|
|
@@ -555,6 +648,7 @@ Your prompts and responses **never leave your infrastructure**. The SDK computes
|
|
|
555
648
|
- [Design Rationale](https://sovereign.tenova.io/guides/swt3-design-rationale.html) -- why every protocol decision was made
|
|
556
649
|
- [UCT Registry](https://sovereign.tenova.io/registry) -- 162 procedures, full factor definitions
|
|
557
650
|
- [Anchor Verifier](https://sovereign.tenova.io/verify) -- verify any anchor, zero server calls
|
|
651
|
+
- [EU AI Act Regulatory Architecture](https://sovereign.tenova.io/guides/futurium-submission.html) -- VI+CJT+ALF+LAVR framework mapping for conformity assessment bodies
|
|
558
652
|
|
|
559
653
|
---
|
|
560
654
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 AI Witness SDK -- Ollama Adapter.
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper around the OpenAI adapter that tags records with
|
|
5
|
+
* provider="ollama". Ollama uses an OpenAI-compatible API at
|
|
6
|
+
* http://localhost:11434/v1.
|
|
7
|
+
*
|
|
8
|
+
* Auto-detected by witness.wrap() when base_url contains ":11434".
|
|
9
|
+
*/
|
|
10
|
+
import type { Witness } from "../witness.js";
|
|
11
|
+
export declare function wrapOllama(client: unknown, witness: Witness): unknown;
|
|
12
|
+
export declare function isOllamaClient(client: unknown): boolean;
|
|
13
|
+
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/adapters/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAErE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAGvD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 AI Witness SDK -- Ollama Adapter.
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper around the OpenAI adapter that tags records with
|
|
5
|
+
* provider="ollama". Ollama uses an OpenAI-compatible API at
|
|
6
|
+
* http://localhost:11434/v1.
|
|
7
|
+
*
|
|
8
|
+
* Auto-detected by witness.wrap() when base_url contains ":11434".
|
|
9
|
+
*/
|
|
10
|
+
import { wrapOpenAI } from "./openai.js";
|
|
11
|
+
export function wrapOllama(client, witness) {
|
|
12
|
+
return wrapOpenAI(client, witness, "ollama");
|
|
13
|
+
}
|
|
14
|
+
export function isOllamaClient(client) {
|
|
15
|
+
const baseURL = getBaseURL(client);
|
|
16
|
+
return baseURL.includes(":11434");
|
|
17
|
+
}
|
|
18
|
+
function getBaseURL(client) {
|
|
19
|
+
if (client === null || client === undefined)
|
|
20
|
+
return "";
|
|
21
|
+
const obj = client;
|
|
22
|
+
const url = obj.baseURL ?? obj.base_url ?? "";
|
|
23
|
+
return String(url);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/adapters/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,UAAU,UAAU,CAAC,MAAe,EAAE,OAAgB;IAC1D,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,UAAU,CAAC,MAAe;IACjC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACvD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC9C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC"}
|
|
@@ -15,5 +15,5 @@ import type { Witness } from "../witness.js";
|
|
|
15
15
|
/**
|
|
16
16
|
* Wrap an OpenAI client with an ES6 Proxy for transparent witnessing.
|
|
17
17
|
*/
|
|
18
|
-
export declare function wrapOpenAI(client: unknown, witness: Witness): unknown;
|
|
18
|
+
export declare function wrapOpenAI(client: unknown, witness: Witness, provider?: string): unknown;
|
|
19
19
|
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAU7C;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAU7C;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,SAAW,GAAG,OAAO,CAE1F"}
|
package/dist/adapters/openai.js
CHANGED
|
@@ -22,10 +22,10 @@ const INTERCEPT_PATHS = {
|
|
|
22
22
|
/**
|
|
23
23
|
* Wrap an OpenAI client with an ES6 Proxy for transparent witnessing.
|
|
24
24
|
*/
|
|
25
|
-
export function wrapOpenAI(client, witness) {
|
|
26
|
-
return createProxy(client, witness, "");
|
|
25
|
+
export function wrapOpenAI(client, witness, provider = "openai") {
|
|
26
|
+
return createProxy(client, witness, "", provider);
|
|
27
27
|
}
|
|
28
|
-
function createProxy(target, witness, path) {
|
|
28
|
+
function createProxy(target, witness, path, provider) {
|
|
29
29
|
return new Proxy(target, {
|
|
30
30
|
get(obj, prop) {
|
|
31
31
|
if (typeof prop === "symbol")
|
|
@@ -35,19 +35,19 @@ function createProxy(target, witness, path) {
|
|
|
35
35
|
// Check if this property is an interceptable method
|
|
36
36
|
if (path in INTERCEPT_PATHS && INTERCEPT_PATHS[path].has(prop)) {
|
|
37
37
|
// This IS the method to intercept
|
|
38
|
-
return createInterceptor(realValue, witness);
|
|
38
|
+
return createInterceptor(realValue, witness, provider);
|
|
39
39
|
}
|
|
40
40
|
// Check if this path could lead to interceptable methods
|
|
41
41
|
const hasChildren = Object.keys(INTERCEPT_PATHS).some((p) => p === currentPath || p.startsWith(currentPath + "."));
|
|
42
42
|
if (hasChildren && typeof realValue === "object" && realValue !== null) {
|
|
43
|
-
return createProxy(realValue, witness, currentPath);
|
|
43
|
+
return createProxy(realValue, witness, currentPath, provider);
|
|
44
44
|
}
|
|
45
45
|
// Pass through
|
|
46
46
|
return realValue;
|
|
47
47
|
},
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
|
-
function createInterceptor(realMethod, witness) {
|
|
50
|
+
function createInterceptor(realMethod, witness, provider) {
|
|
51
51
|
return function interceptedCreate(...args) {
|
|
52
52
|
const kwargs = (args[0] ?? {});
|
|
53
53
|
const messages = kwargs.messages;
|
|
@@ -70,12 +70,12 @@ function createInterceptor(realMethod, witness) {
|
|
|
70
70
|
const result = realMethod.call(this, ...args);
|
|
71
71
|
if (isStreaming) {
|
|
72
72
|
// Streaming: wrap the async iterable to accumulate chunks
|
|
73
|
-
return handleStreaming(result, witness, model, promptHash, start, systemPromptHash, authorizationId);
|
|
73
|
+
return handleStreaming(result, witness, model, promptHash, start, systemPromptHash, authorizationId, provider);
|
|
74
74
|
}
|
|
75
75
|
// Non-streaming: result is a Promise<ChatCompletion>
|
|
76
76
|
return result.then((response) => {
|
|
77
77
|
const elapsedMs = Math.round(performance.now() - start);
|
|
78
|
-
const record = extractRecord(response, model, promptHash, elapsedMs, systemPromptHash);
|
|
78
|
+
const record = extractRecord(response, model, promptHash, elapsedMs, systemPromptHash, provider);
|
|
79
79
|
witness.record(record, authorizationId);
|
|
80
80
|
return response; // Return UNTOUCHED
|
|
81
81
|
});
|
|
@@ -91,7 +91,7 @@ function createInterceptor(realMethod, witness) {
|
|
|
91
91
|
// We wrap the async iterator to accumulate content chunks, then
|
|
92
92
|
// witness after the stream completes. The developer's stream
|
|
93
93
|
// behavior is completely unchanged.
|
|
94
|
-
async function* streamAccumulator(stream, witness, model, promptHash, startTime, systemPromptHash, authorizationId) {
|
|
94
|
+
async function* streamAccumulator(stream, witness, model, promptHash, startTime, systemPromptHash, authorizationId, provider = "openai") {
|
|
95
95
|
const textParts = [];
|
|
96
96
|
let actualModel = model;
|
|
97
97
|
let systemFingerprint;
|
|
@@ -148,28 +148,28 @@ async function* streamAccumulator(stream, witness, model, promptHash, startTime,
|
|
|
148
148
|
guardrailsRequired: 0,
|
|
149
149
|
guardrailPassed: true,
|
|
150
150
|
hasRefusal,
|
|
151
|
-
provider
|
|
151
|
+
provider,
|
|
152
152
|
systemFingerprint,
|
|
153
153
|
systemPromptHash,
|
|
154
154
|
guardrailNames: [],
|
|
155
155
|
};
|
|
156
156
|
witness.record(record, authorizationId);
|
|
157
157
|
}
|
|
158
|
-
function handleStreaming(streamResult, witness, model, promptHash, startTime, systemPromptHash, authorizationId) {
|
|
158
|
+
function handleStreaming(streamResult, witness, model, promptHash, startTime, systemPromptHash, authorizationId, provider = "openai") {
|
|
159
159
|
// The stream result is a Promise that resolves to the stream object
|
|
160
160
|
// (OpenAI SDK returns Promise<Stream<ChatCompletionChunk>>)
|
|
161
161
|
if (streamResult && typeof streamResult.then === "function") {
|
|
162
162
|
return streamResult.then((stream) => {
|
|
163
|
-
return wrapStream(stream, witness, model, promptHash, startTime, systemPromptHash, authorizationId);
|
|
163
|
+
return wrapStream(stream, witness, model, promptHash, startTime, systemPromptHash, authorizationId, provider);
|
|
164
164
|
});
|
|
165
165
|
}
|
|
166
166
|
// Direct stream object (shouldn't happen but handle gracefully)
|
|
167
|
-
return wrapStream(streamResult, witness, model, promptHash, startTime, systemPromptHash, authorizationId);
|
|
167
|
+
return wrapStream(streamResult, witness, model, promptHash, startTime, systemPromptHash, authorizationId, provider);
|
|
168
168
|
}
|
|
169
|
-
function wrapStream(stream, witness, model, promptHash, startTime, systemPromptHash, authorizationId) {
|
|
169
|
+
function wrapStream(stream, witness, model, promptHash, startTime, systemPromptHash, authorizationId, provider = "openai") {
|
|
170
170
|
const s = stream;
|
|
171
171
|
// Create the accumulating async generator
|
|
172
|
-
const gen = streamAccumulator(s, witness, model, promptHash, startTime, systemPromptHash, authorizationId);
|
|
172
|
+
const gen = streamAccumulator(s, witness, model, promptHash, startTime, systemPromptHash, authorizationId, provider);
|
|
173
173
|
// Return a proxy that preserves all stream methods but overrides the iterator
|
|
174
174
|
return new Proxy(s, {
|
|
175
175
|
get(target, prop) {
|
|
@@ -241,7 +241,7 @@ function extractPromptText(messages) {
|
|
|
241
241
|
}
|
|
242
242
|
return parts.join("\n");
|
|
243
243
|
}
|
|
244
|
-
function extractRecord(response, model, promptHash, elapsedMs, systemPromptHash) {
|
|
244
|
+
function extractRecord(response, model, promptHash, elapsedMs, systemPromptHash, provider = "openai") {
|
|
245
245
|
const r = response;
|
|
246
246
|
let responseText = "";
|
|
247
247
|
let hasRefusal = false;
|
|
@@ -280,7 +280,7 @@ function extractRecord(response, model, promptHash, elapsedMs, systemPromptHash)
|
|
|
280
280
|
guardrailsRequired: 0,
|
|
281
281
|
guardrailPassed: true,
|
|
282
282
|
hasRefusal,
|
|
283
|
-
provider
|
|
283
|
+
provider,
|
|
284
284
|
systemFingerprint,
|
|
285
285
|
systemPromptHash,
|
|
286
286
|
guardrailNames: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD;;;GAGG;AACH,MAAM,eAAe,GAAgC;IACnD,kBAAkB,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;CACxC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAe,EAAE,OAAgB;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 AI Witness SDK -- vLLM Adapter.
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper around the OpenAI adapter that tags records with
|
|
5
|
+
* provider="vllm". vLLM uses an OpenAI-compatible API at
|
|
6
|
+
* http://localhost:8000/v1.
|
|
7
|
+
*
|
|
8
|
+
* NOT auto-detected by witness.wrap() (port 8000 too generic).
|
|
9
|
+
* Use wrap_vllm() or vllmClient() explicitly.
|
|
10
|
+
*/
|
|
11
|
+
import type { Witness } from "../witness.js";
|
|
12
|
+
export declare function wrapVllm(client: unknown, witness: Witness): unknown;
|
|
13
|
+
//# sourceMappingURL=vllm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vllm.d.ts","sourceRoot":"","sources":["../../src/adapters/vllm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAEnE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 AI Witness SDK -- vLLM Adapter.
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper around the OpenAI adapter that tags records with
|
|
5
|
+
* provider="vllm". vLLM uses an OpenAI-compatible API at
|
|
6
|
+
* http://localhost:8000/v1.
|
|
7
|
+
*
|
|
8
|
+
* NOT auto-detected by witness.wrap() (port 8000 too generic).
|
|
9
|
+
* Use wrap_vllm() or vllmClient() explicitly.
|
|
10
|
+
*/
|
|
11
|
+
import { wrapOpenAI } from "./openai.js";
|
|
12
|
+
export function wrapVllm(client, witness) {
|
|
13
|
+
return wrapOpenAI(client, witness, "vllm");
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=vllm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vllm.js","sourceRoot":"","sources":["../../src/adapters/vllm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,UAAU,QAAQ,CAAC,MAAe,EAAE,OAAgB;IACxD,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/buffer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../src/buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAI/F,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC,CAAmE;gBAEvE,MAAM,EAAE,aAAa,EAAE,cAAc,SAA2B;IAO5E,0CAA0C;IAC1C,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAQtC,6BAA6B;IAC7B,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IAI7C,yCAAyC;IACnC,KAAK,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIxC,oDAAoD;IAC9C,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAgBvC,yDAAyD;IACzD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,oDAAoD;IACpD,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,2CAA2C;IAC3C,IAAI,QAAQ,IAAI,cAAc,EAAE,CAE/B;IAED,OAAO,CAAC,UAAU;YAYJ,aAAa;YAWb,SAAS;
|
|
1
|
+
{"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../src/buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAI/F,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC,CAAmE;gBAEvE,MAAM,EAAE,aAAa,EAAE,cAAc,SAA2B;IAO5E,0CAA0C;IAC1C,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAQtC,6BAA6B;IAC7B,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IAI7C,yCAAyC;IACnC,KAAK,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIxC,oDAAoD;IAC9C,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAgBvC,yDAAyD;IACzD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,oDAAoD;IACpD,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,2CAA2C;IAC3C,IAAI,QAAQ,IAAI,cAAc,EAAE,CAE/B;IAED,OAAO,CAAC,UAAU;YAYJ,aAAa;YAWb,SAAS;CAmGxB"}
|
package/dist/buffer.js
CHANGED
|
@@ -117,7 +117,9 @@ export class WitnessBuffer {
|
|
|
117
117
|
if (resp.status >= 400 && resp.status < 500) {
|
|
118
118
|
// Client error — don't retry, don't dead-letter
|
|
119
119
|
const text = await resp.text();
|
|
120
|
-
|
|
120
|
+
// Scrub any key material that might appear in error response body
|
|
121
|
+
const safe = text.replace(/(?:Bearer|Authorization|api[_-]?key|signing[_-]?key)[^\s,;"]*/gi, "[REDACTED]");
|
|
122
|
+
console.error(`[swt3-ai] Batch flush failed (${resp.status}): ${safe.slice(0, 200)}`);
|
|
121
123
|
return [];
|
|
122
124
|
}
|
|
123
125
|
const result = (await resp.json());
|
package/dist/buffer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../src/buffer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../src/buffer.ts"],"names":[],"mappings":"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"}
|
package/dist/clearing.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ import type { InferenceRecord, WitnessPayload } from "./types.js";
|
|
|
16
16
|
* Applies clearing level to each payload via object destructuring (Level 2+
|
|
17
17
|
* fields are simply never assigned, guaranteeing they don't exist on the wire).
|
|
18
18
|
*/
|
|
19
|
-
export declare function extractPayloads(record: InferenceRecord, tenantId: string, clearingLevel: 0 | 1 | 2 | 3, latencyThresholdMs?: number, guardrailsRequired?: number, procedures?: string[], agentId?: string, signingKey?: string, cycleId?: string, policyVersionHash?: string, jurisdiction?: string, legalBasis?: string, purposeClass?: string, authorizationId?: string): WitnessPayload[];
|
|
19
|
+
export declare function extractPayloads(record: InferenceRecord, tenantId: string, clearingLevel: 0 | 1 | 2 | 3, latencyThresholdMs?: number, guardrailsRequired?: number, procedures?: string[], agentId?: string, signingKey?: string, signingKeyId?: string, signingKeyVersion?: number, cycleId?: string, policyVersionHash?: string, jurisdiction?: string, legalBasis?: string, purposeClass?: string, authorizationId?: string): WitnessPayload[];
|
|
20
20
|
/**
|
|
21
21
|
* Mint an AI-GRD.3 (Gatekeeper Gate) payload.
|
|
22
22
|
*
|
|
@@ -25,7 +25,7 @@ export declare function extractPayloads(record: InferenceRecord, tenantId: strin
|
|
|
25
25
|
* factor_c = 1 if gate passed, 0 if blocked
|
|
26
26
|
* Verdict: PASS if b >= a AND c == 1
|
|
27
27
|
*/
|
|
28
|
-
export declare function extractGatekeeperPayload(tenantId: string, required: number, active: number, gatePassed: boolean, clearingLevel: 0 | 1 | 2 | 3, agentId?: string, signingKey?: string, cycleId?: string, policyVersionHash?: string, jurisdiction?: string, legalBasis?: string, purposeClass?: string): WitnessPayload;
|
|
28
|
+
export declare function extractGatekeeperPayload(tenantId: string, required: number, active: number, gatePassed: boolean, clearingLevel: 0 | 1 | 2 | 3, agentId?: string, signingKey?: string, signingKeyId?: string, signingKeyVersion?: number, cycleId?: string, policyVersionHash?: string, jurisdiction?: string, legalBasis?: string, purposeClass?: string): WitnessPayload;
|
|
29
29
|
/** Revocation reason code mapping. */
|
|
30
30
|
export declare const REVOCATION_REASONS: Record<string, number>;
|
|
31
31
|
/**
|
|
@@ -35,5 +35,5 @@ export declare const REVOCATION_REASONS: Record<string, number>;
|
|
|
35
35
|
* factor_b = 1 (target declared valid by caller)
|
|
36
36
|
* factor_c = reason code (integer from REVOCATION_REASONS)
|
|
37
37
|
*/
|
|
38
|
-
export declare function extractRevocationPayload(tenantId: string, targetFingerprint: string, reason: string, clearingLevel: 0 | 1 | 2 | 3, agentId?: string, signingKey?: string, cycleId?: string, policyVersionHash?: string, jurisdiction?: string, legalBasis?: string, purposeClass?: string): WitnessPayload;
|
|
38
|
+
export declare function extractRevocationPayload(tenantId: string, targetFingerprint: string, reason: string, clearingLevel: 0 | 1 | 2 | 3, agentId?: string, signingKey?: string, signingKeyId?: string, signingKeyVersion?: number, cycleId?: string, policyVersionHash?: string, jurisdiction?: string, legalBasis?: string, purposeClass?: string): WitnessPayload;
|
|
39
39
|
//# sourceMappingURL=clearing.d.ts.map
|
package/dist/clearing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clearing.d.ts","sourceRoot":"","sources":["../src/clearing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAC5B,kBAAkB,GAAE,MAAc,EAClC,kBAAkB,GAAE,MAAU,EAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,YAAY,CAAC,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,MAAM,GACvB,cAAc,EAAE,CA8MlB;
|
|
1
|
+
{"version":3,"file":"clearing.d.ts","sourceRoot":"","sources":["../src/clearing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAC5B,kBAAkB,GAAE,MAAc,EAClC,kBAAkB,GAAE,MAAU,EAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EACrB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,YAAY,CAAC,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,MAAM,GACvB,cAAc,EAAE,CA8MlB;AA0FD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,EACnB,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAC5B,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EACrB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,YAAY,CAAC,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACpB,cAAc,CAqBhB;AAED,sCAAsC;AACtC,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQrD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAC5B,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EACrB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,YAAY,CAAC,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACpB,cAAc,CAwBhB"}
|
package/dist/clearing.js
CHANGED
|
@@ -17,7 +17,7 @@ import { signPayload } from "./signing.js";
|
|
|
17
17
|
* Applies clearing level to each payload via object destructuring (Level 2+
|
|
18
18
|
* fields are simply never assigned, guaranteeing they don't exist on the wire).
|
|
19
19
|
*/
|
|
20
|
-
export function extractPayloads(record, tenantId, clearingLevel, latencyThresholdMs = 30000, guardrailsRequired = 0, procedures, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId) {
|
|
20
|
+
export function extractPayloads(record, tenantId, clearingLevel, latencyThresholdMs = 30000, guardrailsRequired = 0, procedures, agentId, signingKey, signingKeyId, signingKeyVersion, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId) {
|
|
21
21
|
const [ts, epoch] = timestampMs();
|
|
22
22
|
const payloads = [];
|
|
23
23
|
// Access control records produce only AI-ACC.1 (skip inference procedures)
|
|
@@ -63,7 +63,7 @@ export function extractPayloads(record, tenantId, clearingLevel, latencyThreshol
|
|
|
63
63
|
ctx.cycle_id = cycleId;
|
|
64
64
|
payload.ai_context = ctx;
|
|
65
65
|
}
|
|
66
|
-
applyOperationalMetadata(payload, fp, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId);
|
|
66
|
+
applyOperationalMetadata(payload, fp, agentId, signingKey, signingKeyId, signingKeyVersion, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId);
|
|
67
67
|
payloads.push(payload);
|
|
68
68
|
}
|
|
69
69
|
return payloads;
|
|
@@ -105,7 +105,7 @@ export function extractPayloads(record, tenantId, clearingLevel, latencyThreshol
|
|
|
105
105
|
ctx.cycle_id = cycleId;
|
|
106
106
|
payload.ai_context = ctx;
|
|
107
107
|
}
|
|
108
|
-
applyOperationalMetadata(payload, fp, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId);
|
|
108
|
+
applyOperationalMetadata(payload, fp, agentId, signingKey, signingKeyId, signingKeyVersion, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId);
|
|
109
109
|
payloads.push(payload);
|
|
110
110
|
}
|
|
111
111
|
return payloads;
|
|
@@ -190,13 +190,13 @@ export function extractPayloads(record, tenantId, clearingLevel, latencyThreshol
|
|
|
190
190
|
// absent from JSON.stringify output, not just null.
|
|
191
191
|
applyClearingLevel(payload, record, clearingLevel);
|
|
192
192
|
// Operational metadata survives all clearing levels
|
|
193
|
-
applyOperationalMetadata(payload, fp, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId);
|
|
193
|
+
applyOperationalMetadata(payload, fp, agentId, signingKey, signingKeyId, signingKeyVersion, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId);
|
|
194
194
|
payloads.push(payload);
|
|
195
195
|
}
|
|
196
196
|
return payloads;
|
|
197
197
|
}
|
|
198
198
|
/** Apply operational metadata that survives all clearing levels. */
|
|
199
|
-
function applyOperationalMetadata(payload, fingerprint, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId) {
|
|
199
|
+
function applyOperationalMetadata(payload, fingerprint, agentId, signingKey, signingKeyId, signingKeyVersion, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass, authorizationId) {
|
|
200
200
|
if (agentId)
|
|
201
201
|
payload.agent_id = agentId;
|
|
202
202
|
if (cycleId)
|
|
@@ -211,8 +211,13 @@ function applyOperationalMetadata(payload, fingerprint, agentId, signingKey, cyc
|
|
|
211
211
|
payload.purpose_class = purposeClass;
|
|
212
212
|
if (authorizationId)
|
|
213
213
|
payload.authorization_id = authorizationId;
|
|
214
|
-
if (signingKey)
|
|
214
|
+
if (signingKey) {
|
|
215
215
|
payload.payload_signature = signPayload(signingKey, fingerprint, agentId);
|
|
216
|
+
if (signingKeyId)
|
|
217
|
+
payload.signing_key_id = signingKeyId;
|
|
218
|
+
if (signingKeyVersion !== undefined)
|
|
219
|
+
payload.signing_key_version = signingKeyVersion;
|
|
220
|
+
}
|
|
216
221
|
}
|
|
217
222
|
/**
|
|
218
223
|
* Apply clearing level to a payload using explicit field assignment.
|
|
@@ -277,7 +282,7 @@ function applyClearingLevel(payload, record, level) {
|
|
|
277
282
|
* factor_c = 1 if gate passed, 0 if blocked
|
|
278
283
|
* Verdict: PASS if b >= a AND c == 1
|
|
279
284
|
*/
|
|
280
|
-
export function extractGatekeeperPayload(tenantId, required, active, gatePassed, clearingLevel, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass) {
|
|
285
|
+
export function extractGatekeeperPayload(tenantId, required, active, gatePassed, clearingLevel, agentId, signingKey, signingKeyId, signingKeyVersion, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass) {
|
|
281
286
|
const [ts, epoch] = timestampMs();
|
|
282
287
|
const fa = required;
|
|
283
288
|
const fb = active;
|
|
@@ -293,7 +298,7 @@ export function extractGatekeeperPayload(tenantId, required, active, gatePassed,
|
|
|
293
298
|
anchor_epoch: epoch,
|
|
294
299
|
fingerprint_timestamp_ms: ts,
|
|
295
300
|
};
|
|
296
|
-
applyOperationalMetadata(payload, fp, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass);
|
|
301
|
+
applyOperationalMetadata(payload, fp, agentId, signingKey, signingKeyId, signingKeyVersion, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass);
|
|
297
302
|
return payload;
|
|
298
303
|
}
|
|
299
304
|
/** Revocation reason code mapping. */
|
|
@@ -313,7 +318,7 @@ export const REVOCATION_REASONS = {
|
|
|
313
318
|
* factor_b = 1 (target declared valid by caller)
|
|
314
319
|
* factor_c = reason code (integer from REVOCATION_REASONS)
|
|
315
320
|
*/
|
|
316
|
-
export function extractRevocationPayload(tenantId, targetFingerprint, reason, clearingLevel, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass) {
|
|
321
|
+
export function extractRevocationPayload(tenantId, targetFingerprint, reason, clearingLevel, agentId, signingKey, signingKeyId, signingKeyVersion, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass) {
|
|
317
322
|
const [ts, epoch] = timestampMs();
|
|
318
323
|
const reasonCode = REVOCATION_REASONS[reason] ?? 0;
|
|
319
324
|
const fa = 1;
|
|
@@ -332,7 +337,7 @@ export function extractRevocationPayload(tenantId, targetFingerprint, reason, cl
|
|
|
332
337
|
revocation_target: targetFingerprint,
|
|
333
338
|
revocation_reason: reason,
|
|
334
339
|
};
|
|
335
|
-
applyOperationalMetadata(payload, fp, agentId, signingKey, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass);
|
|
340
|
+
applyOperationalMetadata(payload, fp, agentId, signingKey, signingKeyId, signingKeyVersion, cycleId, policyVersionHash, jurisdiction, legalBasis, purposeClass);
|
|
336
341
|
return payload;
|
|
337
342
|
}
|
|
338
343
|
//# sourceMappingURL=clearing.js.map
|