@tenova/swt3-ai 0.5.1 → 0.5.3
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/LICENSE +191 -0
- package/README.md +227 -10
- package/dist/buffer.d.ts +7 -1
- package/dist/buffer.d.ts.map +1 -1
- package/dist/buffer.js +38 -3
- package/dist/buffer.js.map +1 -1
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +202 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +18 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +346 -42
- package/dist/config.js.map +1 -1
- package/dist/demo.d.ts +1 -1
- package/dist/demo.d.ts.map +1 -1
- package/dist/demo.js +88 -4
- package/dist/demo.js.map +1 -1
- package/dist/doctor.d.ts +20 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +357 -0
- package/dist/doctor.js.map +1 -0
- package/dist/environment.d.ts +34 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +99 -0
- package/dist/environment.js.map +1 -0
- package/dist/exporters/chain-monitor.d.ts +55 -0
- package/dist/exporters/chain-monitor.d.ts.map +1 -0
- package/dist/exporters/chain-monitor.js +172 -0
- package/dist/exporters/chain-monitor.js.map +1 -0
- package/dist/hardware.d.ts +96 -0
- package/dist/hardware.d.ts.map +1 -0
- package/dist/hardware.js +265 -0
- package/dist/hardware.js.map +1 -0
- package/dist/index.d.ts +19 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/merkle.d.ts +107 -0
- package/dist/merkle.d.ts.map +1 -0
- package/dist/merkle.js +226 -0
- package/dist/merkle.js.map +1 -0
- package/dist/schema.d.ts +18 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +255 -0
- package/dist/schema.js.map +1 -0
- package/dist/trust.d.ts +100 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +222 -0
- package/dist/trust.js.map +1 -0
- package/dist/types.d.ts +167 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +42 -1
- package/dist/types.js.map +1 -1
- package/dist/wal.d.ts +69 -0
- package/dist/wal.d.ts.map +1 -0
- package/dist/wal.js +223 -0
- package/dist/wal.js.map +1 -0
- package/dist/witness.d.ts +293 -1
- package/dist/witness.d.ts.map +1 -1
- package/dist/witness.js +1234 -5
- package/dist/witness.js.map +1 -1
- package/package.json +7 -7
- package/templates/cost-conscious.yaml +35 -0
- package/templates/eu-ai-act-high-risk.yaml +56 -0
- package/templates/granite-sovereign.yaml +55 -0
- package/templates/minimal.yaml +38 -0
- package/templates/mythos-defense.yaml +65 -0
- package/templates/nist-ai-rmf.yaml +47 -0
- package/templates/owasp-agentic-top10.yaml +50 -0
package/dist/wal.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 AI Witness SDK -- Write-Ahead Log (WAL).
|
|
3
|
+
*
|
|
4
|
+
* Crash-resilient buffer persistence. Payloads are written to a JSONL
|
|
5
|
+
* file before network transmission. If the process crashes, unsent
|
|
6
|
+
* entries survive on disk and replay on next startup.
|
|
7
|
+
*
|
|
8
|
+
* Format:
|
|
9
|
+
* Each line: JSON object with { seq, fingerprint, payload }
|
|
10
|
+
* Checkpoint file: single number (last successfully flushed seq)
|
|
11
|
+
*
|
|
12
|
+
* Replay protection:
|
|
13
|
+
* A bounded set of recently-seen anchor_fingerprint values prevents
|
|
14
|
+
* duplicate witness anchors from being submitted. The set is populated
|
|
15
|
+
* from the WAL on startup and updated on each enqueue.
|
|
16
|
+
*
|
|
17
|
+
* Patent pending. All rights reserved.
|
|
18
|
+
*/
|
|
19
|
+
import type { WitnessPayload } from "./types.js";
|
|
20
|
+
export interface WalOptions {
|
|
21
|
+
/** Directory for WAL files. Default: $TMPDIR/swt3-wal */
|
|
22
|
+
walDir?: string;
|
|
23
|
+
/** Max fingerprints in replay protection set. Default: 50000 */
|
|
24
|
+
replayWindow?: number;
|
|
25
|
+
/** Enable replay protection (dedup). Default: true when WAL enabled */
|
|
26
|
+
replayProtection?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare class WriteAheadLog {
|
|
29
|
+
private walPath;
|
|
30
|
+
private checkpointPath;
|
|
31
|
+
private seq;
|
|
32
|
+
private checkpoint;
|
|
33
|
+
private replaySet;
|
|
34
|
+
private replayWindow;
|
|
35
|
+
private replayEnabled;
|
|
36
|
+
constructor(tenantId: string, options?: WalOptions);
|
|
37
|
+
/**
|
|
38
|
+
* Write a payload to the WAL before sending. Returns the sequence number.
|
|
39
|
+
* Returns -1 if the fingerprint is a duplicate (replay protection).
|
|
40
|
+
*/
|
|
41
|
+
append(payload: WitnessPayload): number;
|
|
42
|
+
/**
|
|
43
|
+
* Mark entries up to this sequence as successfully flushed.
|
|
44
|
+
* Updates the checkpoint file atomically.
|
|
45
|
+
*/
|
|
46
|
+
markFlushed(upToSeq: number): void;
|
|
47
|
+
/**
|
|
48
|
+
* Recover unflushed entries from the WAL. Called on startup.
|
|
49
|
+
* Returns payloads that were written but never confirmed as flushed.
|
|
50
|
+
*/
|
|
51
|
+
recover(): WitnessPayload[];
|
|
52
|
+
/**
|
|
53
|
+
* Check if a fingerprint has already been seen (replay protection).
|
|
54
|
+
*/
|
|
55
|
+
isDuplicate(fingerprint: string): boolean;
|
|
56
|
+
/** Current sequence number. */
|
|
57
|
+
get currentSeq(): number;
|
|
58
|
+
/** Last flushed checkpoint. */
|
|
59
|
+
get currentCheckpoint(): number;
|
|
60
|
+
/** Number of fingerprints in the replay set. */
|
|
61
|
+
get replaySetSize(): number;
|
|
62
|
+
/** Remove WAL and checkpoint files (for testing or cleanup). */
|
|
63
|
+
destroy(): void;
|
|
64
|
+
private _scanWal;
|
|
65
|
+
private _readEntries;
|
|
66
|
+
private _addToReplaySet;
|
|
67
|
+
private _maybeRotate;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=wal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wal.d.ts","sourceRoot":"","sources":["../src/wal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAiBjD,MAAM,WAAW,UAAU;IACzB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAU;gBAEnB,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe;IAwBtD;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IAyBvC;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAalC;;;OAGG;IACH,OAAO,IAAI,cAAc,EAAE;IAe3B;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAKzC,+BAA+B;IAC/B,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,+BAA+B;IAC/B,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,gDAAgD;IAChD,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,gEAAgE;IAChE,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,YAAY;CAuBrB"}
|
package/dist/wal.js
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 AI Witness SDK -- Write-Ahead Log (WAL).
|
|
3
|
+
*
|
|
4
|
+
* Crash-resilient buffer persistence. Payloads are written to a JSONL
|
|
5
|
+
* file before network transmission. If the process crashes, unsent
|
|
6
|
+
* entries survive on disk and replay on next startup.
|
|
7
|
+
*
|
|
8
|
+
* Format:
|
|
9
|
+
* Each line: JSON object with { seq, fingerprint, payload }
|
|
10
|
+
* Checkpoint file: single number (last successfully flushed seq)
|
|
11
|
+
*
|
|
12
|
+
* Replay protection:
|
|
13
|
+
* A bounded set of recently-seen anchor_fingerprint values prevents
|
|
14
|
+
* duplicate witness anchors from being submitted. The set is populated
|
|
15
|
+
* from the WAL on startup and updated on each enqueue.
|
|
16
|
+
*
|
|
17
|
+
* Patent pending. All rights reserved.
|
|
18
|
+
*/
|
|
19
|
+
import { mkdirSync, appendFileSync, readFileSync, writeFileSync, existsSync, renameSync, unlinkSync, statSync } from "node:fs";
|
|
20
|
+
import { join } from "node:path";
|
|
21
|
+
import { tmpdir } from "node:os";
|
|
22
|
+
/** Default WAL directory under OS temp. */
|
|
23
|
+
const DEFAULT_WAL_DIR = join(tmpdir(), "swt3-wal");
|
|
24
|
+
/** Maximum fingerprints tracked for replay protection. */
|
|
25
|
+
const DEFAULT_REPLAY_WINDOW = 50_000;
|
|
26
|
+
/** WAL file rotation threshold (5 MB). */
|
|
27
|
+
const WAL_ROTATION_BYTES = 5 * 1024 * 1024;
|
|
28
|
+
export class WriteAheadLog {
|
|
29
|
+
walPath;
|
|
30
|
+
checkpointPath;
|
|
31
|
+
seq = 0;
|
|
32
|
+
checkpoint = 0;
|
|
33
|
+
replaySet;
|
|
34
|
+
replayWindow;
|
|
35
|
+
replayEnabled;
|
|
36
|
+
constructor(tenantId, options = {}) {
|
|
37
|
+
const dir = options.walDir ?? DEFAULT_WAL_DIR;
|
|
38
|
+
this.replayWindow = options.replayWindow ?? DEFAULT_REPLAY_WINDOW;
|
|
39
|
+
this.replayEnabled = options.replayProtection ?? true;
|
|
40
|
+
this.replaySet = new Set();
|
|
41
|
+
// Tenant-scoped WAL file (multiple SDK instances on same machine)
|
|
42
|
+
const safe = tenantId.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
43
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
44
|
+
this.walPath = join(dir, `${safe}.wal`);
|
|
45
|
+
this.checkpointPath = join(dir, `${safe}.ckpt`);
|
|
46
|
+
// Load checkpoint
|
|
47
|
+
if (existsSync(this.checkpointPath)) {
|
|
48
|
+
const raw = readFileSync(this.checkpointPath, "utf-8").trim();
|
|
49
|
+
this.checkpoint = parseInt(raw, 10) || 0;
|
|
50
|
+
}
|
|
51
|
+
// Scan existing WAL to find max seq and populate replay set
|
|
52
|
+
if (existsSync(this.walPath)) {
|
|
53
|
+
this._scanWal();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Write a payload to the WAL before sending. Returns the sequence number.
|
|
58
|
+
* Returns -1 if the fingerprint is a duplicate (replay protection).
|
|
59
|
+
*/
|
|
60
|
+
append(payload) {
|
|
61
|
+
const fp = payload.anchor_fingerprint;
|
|
62
|
+
// Replay protection: reject duplicates
|
|
63
|
+
if (this.replayEnabled && fp && this.replaySet.has(fp)) {
|
|
64
|
+
return -1;
|
|
65
|
+
}
|
|
66
|
+
this.seq++;
|
|
67
|
+
const entry = {
|
|
68
|
+
seq: this.seq,
|
|
69
|
+
fingerprint: fp || "",
|
|
70
|
+
payload: payloadToRecord(payload),
|
|
71
|
+
};
|
|
72
|
+
appendFileSync(this.walPath, JSON.stringify(entry) + "\n", "utf-8");
|
|
73
|
+
// Track fingerprint
|
|
74
|
+
if (this.replayEnabled && fp) {
|
|
75
|
+
this._addToReplaySet(fp);
|
|
76
|
+
}
|
|
77
|
+
return this.seq;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Mark entries up to this sequence as successfully flushed.
|
|
81
|
+
* Updates the checkpoint file atomically.
|
|
82
|
+
*/
|
|
83
|
+
markFlushed(upToSeq) {
|
|
84
|
+
if (upToSeq <= this.checkpoint)
|
|
85
|
+
return;
|
|
86
|
+
this.checkpoint = upToSeq;
|
|
87
|
+
// Atomic write: write to temp then rename
|
|
88
|
+
const tmp = this.checkpointPath + ".tmp";
|
|
89
|
+
writeFileSync(tmp, String(this.checkpoint), "utf-8");
|
|
90
|
+
renameSync(tmp, this.checkpointPath);
|
|
91
|
+
// Rotate WAL if it's large and fully flushed
|
|
92
|
+
this._maybeRotate();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Recover unflushed entries from the WAL. Called on startup.
|
|
96
|
+
* Returns payloads that were written but never confirmed as flushed.
|
|
97
|
+
*/
|
|
98
|
+
recover() {
|
|
99
|
+
if (!existsSync(this.walPath))
|
|
100
|
+
return [];
|
|
101
|
+
const entries = this._readEntries();
|
|
102
|
+
const unflushed = entries.filter((e) => e.seq > this.checkpoint);
|
|
103
|
+
if (unflushed.length > 0) {
|
|
104
|
+
console.info(`[swt3-ai] WAL recovery: ${unflushed.length} unflushed entries found (checkpoint: ${this.checkpoint}, max seq: ${this.seq})`);
|
|
105
|
+
}
|
|
106
|
+
return unflushed.map((e) => e.payload);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Check if a fingerprint has already been seen (replay protection).
|
|
110
|
+
*/
|
|
111
|
+
isDuplicate(fingerprint) {
|
|
112
|
+
if (!this.replayEnabled || !fingerprint)
|
|
113
|
+
return false;
|
|
114
|
+
return this.replaySet.has(fingerprint);
|
|
115
|
+
}
|
|
116
|
+
/** Current sequence number. */
|
|
117
|
+
get currentSeq() {
|
|
118
|
+
return this.seq;
|
|
119
|
+
}
|
|
120
|
+
/** Last flushed checkpoint. */
|
|
121
|
+
get currentCheckpoint() {
|
|
122
|
+
return this.checkpoint;
|
|
123
|
+
}
|
|
124
|
+
/** Number of fingerprints in the replay set. */
|
|
125
|
+
get replaySetSize() {
|
|
126
|
+
return this.replaySet.size;
|
|
127
|
+
}
|
|
128
|
+
/** Remove WAL and checkpoint files (for testing or cleanup). */
|
|
129
|
+
destroy() {
|
|
130
|
+
try {
|
|
131
|
+
unlinkSync(this.walPath);
|
|
132
|
+
}
|
|
133
|
+
catch { /* noop */ }
|
|
134
|
+
try {
|
|
135
|
+
unlinkSync(this.checkpointPath);
|
|
136
|
+
}
|
|
137
|
+
catch { /* noop */ }
|
|
138
|
+
try {
|
|
139
|
+
unlinkSync(this.walPath + ".tmp");
|
|
140
|
+
}
|
|
141
|
+
catch { /* noop */ }
|
|
142
|
+
try {
|
|
143
|
+
unlinkSync(this.checkpointPath + ".tmp");
|
|
144
|
+
}
|
|
145
|
+
catch { /* noop */ }
|
|
146
|
+
}
|
|
147
|
+
// ── Internal ──
|
|
148
|
+
_scanWal() {
|
|
149
|
+
const entries = this._readEntries();
|
|
150
|
+
for (const entry of entries) {
|
|
151
|
+
if (entry.seq > this.seq)
|
|
152
|
+
this.seq = entry.seq;
|
|
153
|
+
if (this.replayEnabled && entry.fingerprint) {
|
|
154
|
+
this._addToReplaySet(entry.fingerprint);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
_readEntries() {
|
|
159
|
+
if (!existsSync(this.walPath))
|
|
160
|
+
return [];
|
|
161
|
+
const raw = readFileSync(this.walPath, "utf-8");
|
|
162
|
+
const entries = [];
|
|
163
|
+
for (const line of raw.split("\n")) {
|
|
164
|
+
if (!line.trim())
|
|
165
|
+
continue;
|
|
166
|
+
try {
|
|
167
|
+
entries.push(JSON.parse(line));
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// Corrupted line (partial write from crash) -- skip
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return entries;
|
|
174
|
+
}
|
|
175
|
+
_addToReplaySet(fp) {
|
|
176
|
+
this.replaySet.add(fp);
|
|
177
|
+
// Evict oldest entries if over window (convert to array, drop first N)
|
|
178
|
+
if (this.replaySet.size > this.replayWindow) {
|
|
179
|
+
const overflow = this.replaySet.size - this.replayWindow;
|
|
180
|
+
const iter = this.replaySet.values();
|
|
181
|
+
for (let i = 0; i < overflow; i++) {
|
|
182
|
+
const oldest = iter.next().value;
|
|
183
|
+
if (oldest !== undefined)
|
|
184
|
+
this.replaySet.delete(oldest);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
_maybeRotate() {
|
|
189
|
+
if (!existsSync(this.walPath))
|
|
190
|
+
return;
|
|
191
|
+
try {
|
|
192
|
+
const stat = statSync(this.walPath);
|
|
193
|
+
if (stat.size < WAL_ROTATION_BYTES)
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
// Read entries, keep only unflushed
|
|
200
|
+
const entries = this._readEntries();
|
|
201
|
+
const unflushed = entries.filter((e) => e.seq > this.checkpoint);
|
|
202
|
+
if (unflushed.length === 0) {
|
|
203
|
+
// All flushed -- truncate
|
|
204
|
+
writeFileSync(this.walPath, "", "utf-8");
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// Rewrite with only unflushed entries
|
|
208
|
+
const tmp = this.walPath + ".tmp";
|
|
209
|
+
writeFileSync(tmp, unflushed.map((e) => JSON.stringify(e)).join("\n") + "\n", "utf-8");
|
|
210
|
+
renameSync(tmp, this.walPath);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/** Convert WitnessPayload to a plain record for JSON serialization. */
|
|
215
|
+
function payloadToRecord(p) {
|
|
216
|
+
const r = {};
|
|
217
|
+
for (const [k, v] of Object.entries(p)) {
|
|
218
|
+
if (v !== undefined && v !== null)
|
|
219
|
+
r[k] = v;
|
|
220
|
+
}
|
|
221
|
+
return r;
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=wal.js.map
|
package/dist/wal.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wal.js","sourceRoot":"","sources":["../src/wal.ts"],"names":[],"mappings":"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"}
|
package/dist/witness.d.ts
CHANGED
|
@@ -19,8 +19,48 @@
|
|
|
19
19
|
*
|
|
20
20
|
* Copyright (c) 2026 Tenable Nova LLC. Apache 2.0. Patent pending.
|
|
21
21
|
*/
|
|
22
|
+
import type { TPMSnapshot } from "./hardware.js";
|
|
23
|
+
import type { EnvironmentSnapshot } from "./environment.js";
|
|
24
|
+
import { TrustRegistry, type TrustCredential, type TrustResult } from "./trust.js";
|
|
22
25
|
import { type VercelOnFinishOptions } from "./adapters/vercel-ai.js";
|
|
23
|
-
import type { WitnessPayload, WitnessReceipt, InferenceRecord } from "./types.js";
|
|
26
|
+
import type { WitnessPayload, WitnessReceipt, InferenceRecord, RagContextOptions, ModelWeightInfo, AdapterInfo, SkillInfo, MemorySource } from "./types.js";
|
|
27
|
+
import type { DensityPolicyConfig, McpPolicyConfig, MerkleConfig, ChainPolicyViolation } from "./types.js";
|
|
28
|
+
import { MerkleAccumulator } from "./merkle.js";
|
|
29
|
+
export declare class PolicyViolationError extends Error {
|
|
30
|
+
violation: ChainPolicyViolation;
|
|
31
|
+
constructor(violation: ChainPolicyViolation);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Chain density enforcement engine.
|
|
35
|
+
*
|
|
36
|
+
* Evaluates tool calls against rate limits, depth limits, allow/blocklists,
|
|
37
|
+
* and custom rules. All checks are in-memory, zero network calls.
|
|
38
|
+
* Instantiated from McpPolicyConfig by Witness.fromConfig().
|
|
39
|
+
*/
|
|
40
|
+
export declare class ChainEnforcer {
|
|
41
|
+
private velocityWindow;
|
|
42
|
+
private velocityLimit;
|
|
43
|
+
private velocityWindowMs;
|
|
44
|
+
private chainDepth;
|
|
45
|
+
private maxChainDepth;
|
|
46
|
+
private allowPatterns;
|
|
47
|
+
private blockPatterns;
|
|
48
|
+
private failSecure;
|
|
49
|
+
private customRules;
|
|
50
|
+
private lastToolName;
|
|
51
|
+
private tokenCount;
|
|
52
|
+
private maxTokensPerSession;
|
|
53
|
+
private _violations;
|
|
54
|
+
constructor(policy: McpPolicyConfig);
|
|
55
|
+
check(toolName: string): ChainPolicyViolation | null;
|
|
56
|
+
resetDepth(): void;
|
|
57
|
+
recordTokens(count: number): void;
|
|
58
|
+
resetTokens(): void;
|
|
59
|
+
get currentTokenCount(): number;
|
|
60
|
+
get violations(): readonly ChainPolicyViolation[];
|
|
61
|
+
clearViolations(): void;
|
|
62
|
+
private violation;
|
|
63
|
+
}
|
|
24
64
|
export interface WitnessOptions {
|
|
25
65
|
endpoint: string;
|
|
26
66
|
apiKey: string;
|
|
@@ -45,7 +85,10 @@ export interface WitnessOptions {
|
|
|
45
85
|
legalBasis?: string;
|
|
46
86
|
purposeClass?: string;
|
|
47
87
|
onFlush?: (payloads: WitnessPayload[], receipts: WitnessReceipt[]) => void;
|
|
88
|
+
tokenBudget?: number;
|
|
48
89
|
gatewayMode?: boolean;
|
|
90
|
+
walPath?: string;
|
|
91
|
+
replayWindow?: number;
|
|
49
92
|
}
|
|
50
93
|
/**
|
|
51
94
|
* Raised when strict (gatekeeper) mode blocks an inference due to
|
|
@@ -77,6 +120,28 @@ export declare class Witness {
|
|
|
77
120
|
* Requires: `npm install yaml`
|
|
78
121
|
*/
|
|
79
122
|
static fromConfig(path?: string, overrides?: Partial<WitnessOptions>): Witness;
|
|
123
|
+
private _configHash?;
|
|
124
|
+
private _hardwareConfig?;
|
|
125
|
+
private _densityPolicy?;
|
|
126
|
+
private _mcpPolicy?;
|
|
127
|
+
private _merkleConfig?;
|
|
128
|
+
private _merkleAccumulator?;
|
|
129
|
+
private _chainEnforcer?;
|
|
130
|
+
get configHash(): string | undefined;
|
|
131
|
+
/** Density policy from YAML config (null if not configured). */
|
|
132
|
+
get densityPolicy(): DensityPolicyConfig | undefined;
|
|
133
|
+
/** MCP tool witnessing policy from YAML config (null if not configured). */
|
|
134
|
+
get mcpPolicy(): McpPolicyConfig | undefined;
|
|
135
|
+
/** Merkle accumulator config from YAML config (null if not configured). */
|
|
136
|
+
get merkleConfig(): MerkleConfig | undefined;
|
|
137
|
+
/** SDK-side Merkle accumulator (created when merkle.enabled is true). */
|
|
138
|
+
get merkleAccumulator(): MerkleAccumulator | undefined;
|
|
139
|
+
/** Chain density enforcer (created when chain density fields are configured). */
|
|
140
|
+
get chainEnforcer(): ChainEnforcer | undefined;
|
|
141
|
+
/** Record token usage against the chain enforcer's session budget. */
|
|
142
|
+
recordSessionTokens(count: number): void;
|
|
143
|
+
private _recordChainViolation;
|
|
144
|
+
private _configureTrustMesh;
|
|
80
145
|
constructor(options: WitnessOptions);
|
|
81
146
|
/**
|
|
82
147
|
* Wrap an AI client with transparent witnessing.
|
|
@@ -164,6 +229,86 @@ export declare class Witness {
|
|
|
164
229
|
witnessInputValidation(passed: boolean, options?: {
|
|
165
230
|
sanitized?: boolean;
|
|
166
231
|
}): void;
|
|
232
|
+
/**
|
|
233
|
+
* Witness a RAG retrieval step (AI-RAG.1 + optional AI-RAG.2).
|
|
234
|
+
*
|
|
235
|
+
* Records what context chunks were retrieved and from which corpus.
|
|
236
|
+
* Chunk text is NEVER transmitted -- only SHA-256 hashes.
|
|
237
|
+
*
|
|
238
|
+
* Automatically emits AI-RAG.2 (Context Relevance) when
|
|
239
|
+
* similarityThreshold is set and chunks have similarityScore.
|
|
240
|
+
*
|
|
241
|
+
* @param options.chunks - Raw strings (auto-hashed) or RagChunk objects.
|
|
242
|
+
* @param options.corpusId - Identifier for the retrieval corpus/index.
|
|
243
|
+
* @param options.similarityThreshold - When set and chunks have scores,
|
|
244
|
+
* AI-RAG.2 is emitted alongside AI-RAG.1.
|
|
245
|
+
* @returns Array of WitnessPayload objects (1-2 payloads).
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* witness.witnessRagContext({
|
|
249
|
+
* chunks: ["chunk text 1", "chunk text 2"],
|
|
250
|
+
* corpusId: "legal-docs-v3",
|
|
251
|
+
* });
|
|
252
|
+
*/
|
|
253
|
+
witnessRagContext(options: RagContextOptions): WitnessPayload[];
|
|
254
|
+
/**
|
|
255
|
+
* Hash a model weight file and return a ModelWeightInfo.
|
|
256
|
+
*
|
|
257
|
+
* Call ONCE at startup, not per-inference. File I/O is synchronous.
|
|
258
|
+
*
|
|
259
|
+
* @example
|
|
260
|
+
* const info = Witness.hashModelFile("/models/llama-3.1-70b.safetensors");
|
|
261
|
+
* witness.witnessModelWeights(info);
|
|
262
|
+
*/
|
|
263
|
+
static hashModelFile(filePath: string, format?: string): ModelWeightInfo;
|
|
264
|
+
/**
|
|
265
|
+
* Witness model weight file integrity (AI-MDL.5).
|
|
266
|
+
*
|
|
267
|
+
* @param weights - ModelWeightInfo (from hashModelFile() or manual),
|
|
268
|
+
* or file path string (blocks for large files -- prefer hashModelFile()).
|
|
269
|
+
* @param options.expectedHash - If provided and matches, PASS. If mismatches, FAIL.
|
|
270
|
+
*/
|
|
271
|
+
witnessModelWeights(weights: ModelWeightInfo | string, options?: {
|
|
272
|
+
expectedHash?: string;
|
|
273
|
+
}): WitnessPayload;
|
|
274
|
+
/**
|
|
275
|
+
* Witness active LoRA/QLoRA/PEFT adapter stack (AI-MDL.6).
|
|
276
|
+
*/
|
|
277
|
+
witnessAdapterStack(adapters: AdapterInfo[], baseModelId?: string): WitnessPayload;
|
|
278
|
+
/**
|
|
279
|
+
* Witness model quantization method (AI-MDL.7).
|
|
280
|
+
*
|
|
281
|
+
* @param method - fp32, fp16, bf16, int8, int4, gptq, awq, gguf.
|
|
282
|
+
*/
|
|
283
|
+
witnessQuantization(method: string, options?: {
|
|
284
|
+
bits?: number;
|
|
285
|
+
groupSize?: number;
|
|
286
|
+
}): WitnessPayload;
|
|
287
|
+
/**
|
|
288
|
+
* Witness active skill/tool/plugin manifest (AI-SKILL.1).
|
|
289
|
+
*
|
|
290
|
+
* @param skills - Skill name strings (auto-hashed) or SkillInfo objects.
|
|
291
|
+
* @param options.expectedManifestHash - Expected hash of the full manifest.
|
|
292
|
+
*
|
|
293
|
+
* @example
|
|
294
|
+
* witness.witnessSkillManifest(["code_exec", "web_search", "file_read"]);
|
|
295
|
+
*/
|
|
296
|
+
witnessSkillManifest(skills: (string | SkillInfo)[], options?: {
|
|
297
|
+
expectedManifestHash?: string;
|
|
298
|
+
}): WitnessPayload;
|
|
299
|
+
/**
|
|
300
|
+
* Witness persistent memory sources influencing a decision (AI-SKILL.2).
|
|
301
|
+
*/
|
|
302
|
+
witnessMemoryContext(sources: MemorySource[]): WitnessPayload;
|
|
303
|
+
/**
|
|
304
|
+
* Witness RLHF/DPO reward model binding (AI-SKILL.3).
|
|
305
|
+
*/
|
|
306
|
+
witnessRewardModel(modelId: string, options?: {
|
|
307
|
+
modelHash?: string;
|
|
308
|
+
method?: string;
|
|
309
|
+
}): WitnessPayload;
|
|
310
|
+
/** Apply operational metadata (agent_id, signing, CJT fields) to a payload. */
|
|
311
|
+
private _applyOperationalMetadata;
|
|
167
312
|
/**
|
|
168
313
|
* Revoke a previously-issued witness anchor (AI-REV.1).
|
|
169
314
|
*
|
|
@@ -176,6 +321,153 @@ export declare class Witness {
|
|
|
176
321
|
* error_correction, or unspecified.
|
|
177
322
|
* @returns The fingerprint of the revocation anchor itself.
|
|
178
323
|
*/
|
|
324
|
+
/**
|
|
325
|
+
* Witness accelerator hardware inventory (AI-HW.1).
|
|
326
|
+
*
|
|
327
|
+
* Records what GPU/accelerator hardware is present. Call ONCE at
|
|
328
|
+
* service startup, not per-inference. If no GPUs are detectable,
|
|
329
|
+
* returns a payload with factor_a=0, factor_b=0 (graceful no-op).
|
|
330
|
+
*
|
|
331
|
+
* @param options.snapshot - Pre-computed HardwareSnapshot (from queryHardware()).
|
|
332
|
+
* If omitted, auto-detects via nvidia-smi.
|
|
333
|
+
* @param options.expectedTopology - Expected topology (e.g., "NVL72").
|
|
334
|
+
* If provided and doesn't match detected topology, factor_b=0.
|
|
335
|
+
*/
|
|
336
|
+
witnessHardware(options?: {
|
|
337
|
+
snapshot?: import("./hardware.js").HardwareSnapshot;
|
|
338
|
+
expectedTopology?: string;
|
|
339
|
+
}): WitnessPayload;
|
|
340
|
+
/**
|
|
341
|
+
* Witness TPM 2.0 platform attestation (AI-HW.3).
|
|
342
|
+
*
|
|
343
|
+
* Reads PCR registers 0-7 via tpm2-tools and mints an anchor proving
|
|
344
|
+
* host firmware integrity. All raw PCR digests are SHA-256 hashed
|
|
345
|
+
* before leaving the module.
|
|
346
|
+
*
|
|
347
|
+
* @param options.snapshot - Pre-computed TPMSnapshot (from queryTPM()).
|
|
348
|
+
*/
|
|
349
|
+
witnessTPMAttestation(options?: {
|
|
350
|
+
snapshot?: TPMSnapshot;
|
|
351
|
+
}): WitnessPayload;
|
|
352
|
+
/**
|
|
353
|
+
* Witness thermal integrity of the compute environment (AI-ENV.1).
|
|
354
|
+
*
|
|
355
|
+
* Call at service startup or on a periodic schedule, not per-inference.
|
|
356
|
+
* Auto-detects Linux thermal zones. Pass manual values for XFRA/Span nodes.
|
|
357
|
+
*
|
|
358
|
+
* @param options.temperatureCelsius - Measured temperature (auto-detected if omitted)
|
|
359
|
+
* @param options.thresholdCelsius - Safe maximum (default 85)
|
|
360
|
+
* @param options.snapshot - Pre-computed EnvironmentSnapshot
|
|
361
|
+
* @param options.nodeType - Node type: datacenter, edge, residential, mobile
|
|
362
|
+
*/
|
|
363
|
+
witnessEnvironment(options?: {
|
|
364
|
+
temperatureCelsius?: number;
|
|
365
|
+
thresholdCelsius?: number;
|
|
366
|
+
snapshot?: EnvironmentSnapshot;
|
|
367
|
+
nodeType?: string;
|
|
368
|
+
}): WitnessPayload;
|
|
369
|
+
/**
|
|
370
|
+
* Witness power integrity of the compute environment (AI-ENV.2).
|
|
371
|
+
*
|
|
372
|
+
* Call at service startup or on a periodic schedule, not per-inference.
|
|
373
|
+
* Pass manual values from Span panel API, IPMI, or other power monitoring.
|
|
374
|
+
*
|
|
375
|
+
* @param options.powerWatts - Current power draw in watts
|
|
376
|
+
* @param options.capacityWatts - Total available capacity in watts
|
|
377
|
+
* @param options.throttled - Whether power throttling is active
|
|
378
|
+
* @param options.snapshot - Pre-computed EnvironmentSnapshot
|
|
379
|
+
* @param options.nodeType - Node type: datacenter, edge, residential, mobile
|
|
380
|
+
*/
|
|
381
|
+
witnessEnergyDraw(options?: {
|
|
382
|
+
powerWatts?: number;
|
|
383
|
+
capacityWatts?: number;
|
|
384
|
+
throttled?: boolean;
|
|
385
|
+
snapshot?: EnvironmentSnapshot;
|
|
386
|
+
nodeType?: string;
|
|
387
|
+
}): WitnessPayload;
|
|
388
|
+
/**
|
|
389
|
+
* Witness a multi-agent chain handoff (AI-CHAIN.1).
|
|
390
|
+
*/
|
|
391
|
+
witnessChainHandoff(depth: number, targetAgent: string, options?: {
|
|
392
|
+
accepted?: boolean;
|
|
393
|
+
}): WitnessPayload;
|
|
394
|
+
/**
|
|
395
|
+
* Witness a policy violation (AI-VIO.1).
|
|
396
|
+
*/
|
|
397
|
+
witnessViolation(severity: number, description: string, options?: {
|
|
398
|
+
autoDetected?: boolean;
|
|
399
|
+
policyCategory?: string;
|
|
400
|
+
}): WitnessPayload;
|
|
401
|
+
/**
|
|
402
|
+
* Witness an agent charter or system prompt hash (AI-CHR.1).
|
|
403
|
+
*/
|
|
404
|
+
witnessCharter(options: {
|
|
405
|
+
charterText?: string;
|
|
406
|
+
charterHash?: string;
|
|
407
|
+
expectedHash?: string;
|
|
408
|
+
}): WitnessPayload;
|
|
409
|
+
/**
|
|
410
|
+
* Witness a model registry check (AI-MDL.8).
|
|
411
|
+
*/
|
|
412
|
+
witnessModelRegistry(modelId: string, registryId: string, options?: {
|
|
413
|
+
found?: boolean;
|
|
414
|
+
status?: string;
|
|
415
|
+
}): WitnessPayload;
|
|
416
|
+
/**
|
|
417
|
+
* Witness reviewer identity binding (AI-HITL.3).
|
|
418
|
+
*/
|
|
419
|
+
witnessReviewerIdentity(required: number, actual: number, options?: {
|
|
420
|
+
method?: string;
|
|
421
|
+
reviewerIdHash?: string;
|
|
422
|
+
}): WitnessPayload;
|
|
423
|
+
/**
|
|
424
|
+
* Witness safe state attestation (AI-SAFE.1).
|
|
425
|
+
*/
|
|
426
|
+
witnessSafeState(options?: {
|
|
427
|
+
mechanismExists?: boolean;
|
|
428
|
+
safeStateConfirmed?: boolean;
|
|
429
|
+
mechanismType?: string;
|
|
430
|
+
}): WitnessPayload;
|
|
431
|
+
/**
|
|
432
|
+
* Witness training dataset summary statistics (AI-DATA.3).
|
|
433
|
+
*/
|
|
434
|
+
witnessTrainingStats(rowCount: number, featureCount: number, options?: {
|
|
435
|
+
classBalanceRatio?: number;
|
|
436
|
+
distributionHash?: string;
|
|
437
|
+
classLabels?: string[];
|
|
438
|
+
summary?: string;
|
|
439
|
+
}): WitnessPayload;
|
|
440
|
+
/**
|
|
441
|
+
* Witness a training data PII lifecycle event (AI-DATA.4).
|
|
442
|
+
*/
|
|
443
|
+
witnessTrainingPiiLifecycle(recordsAffected: number, options?: {
|
|
444
|
+
completed?: boolean;
|
|
445
|
+
eventType?: string;
|
|
446
|
+
datasetId?: string;
|
|
447
|
+
scope?: string;
|
|
448
|
+
}): WitnessPayload;
|
|
449
|
+
/**
|
|
450
|
+
* Witness a bias assessment (AI-FAIR.3).
|
|
451
|
+
* Records that a bias assessment was conducted, how many protected
|
|
452
|
+
* attributes were tested, and whether all fairness thresholds were met.
|
|
453
|
+
*
|
|
454
|
+
* @param protectedAttributeCount - Number of demographic dimensions tested
|
|
455
|
+
* @param allThresholdsMet - true if all fairness thresholds passed
|
|
456
|
+
* @param options.maxDisparityPct - Worst-case disparity percentage (0-100)
|
|
457
|
+
* @param options.methodology - Assessment methodology name
|
|
458
|
+
* @param options.protectedAttributes - List of protected attributes tested
|
|
459
|
+
*/
|
|
460
|
+
witnessBiasAssessment(protectedAttributeCount: number, allThresholdsMet: boolean, options?: {
|
|
461
|
+
maxDisparityPct?: number;
|
|
462
|
+
methodology?: string;
|
|
463
|
+
protectedAttributes?: string[];
|
|
464
|
+
}): WitnessPayload;
|
|
465
|
+
private _trustRegistry?;
|
|
466
|
+
private _witnessedProcedures;
|
|
467
|
+
get trustRegistry(): TrustRegistry;
|
|
468
|
+
set trustRegistry(registry: TrustRegistry);
|
|
469
|
+
presentCredential(): TrustCredential;
|
|
470
|
+
verifyTrust(credential: TrustCredential): TrustResult;
|
|
179
471
|
revoke(fingerprint: string, reason?: string): string;
|
|
180
472
|
/**
|
|
181
473
|
* Query the Compliance Manifest API for this tenant's anchors.
|
package/dist/witness.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAeH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,KAAK,eAAe,EAAE,KAAK,WAAW,EACvC,MAAM,YAAY,CAAC;AACpB,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,KAAK,EACK,cAAc,EAAE,cAAc,EAAE,eAAe,EACpD,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EACnF,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAmC,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAa,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAkBhD,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAS,EAAE,oBAAoB,CAAC;gBACpB,SAAS,EAAE,oBAAoB;CAK5C;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,WAAW,CAA8B;gBAErC,MAAM,EAAE,eAAe;IAmBnC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;IAyEpD,UAAU,IAAI,IAAI;IAKlB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,WAAW,IAAI,IAAI;IAInB,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,UAAU,IAAI,SAAS,oBAAoB,EAAE,CAEhD;IAED,eAAe,IAAI,IAAI;IAIvB,OAAO,CAAC,SAAS;CAQlB;AAED,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;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAEpB,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,EAAO;CAS1E;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,YAAY,CAAU;IAE9B,kEAAkE;IAClE,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO;IAyD9E,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,cAAc,CAAC,CAAsB;IAC7C,OAAO,CAAC,UAAU,CAAC,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAC,CAAe;IACrC,OAAO,CAAC,kBAAkB,CAAC,CAAoB;IAC/C,OAAO,CAAC,cAAc,CAAC,CAAgB;IAEvC,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED,gEAAgE;IAChE,IAAI,aAAa,IAAI,mBAAmB,GAAG,SAAS,CAEnD;IAED,4EAA4E;IAC5E,IAAI,SAAS,IAAI,eAAe,GAAG,SAAS,CAE3C;IAED,2EAA2E;IAC3E,IAAI,YAAY,IAAI,YAAY,GAAG,SAAS,CAE3C;IAED,yEAAyE;IACzE,IAAI,iBAAiB,IAAI,iBAAiB,GAAG,SAAS,CAErD;IAED,iFAAiF;IACjF,IAAI,aAAa,IAAI,aAAa,GAAG,SAAS,CAE7C;IAED,sEAAsE;IACtE,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxC,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,mBAAmB;gBAoBf,OAAO,EAAE,cAAc;IAiEnC;;;;;;;;;OASG;IACH,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;IA6B9B,qEAAqE;IACrE,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAkCvD;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC;IA4ExE;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC1C,EAAE,EAAE,CAAC,EACL,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC;IAiEJ;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CACjB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GACpD,IAAI;IA+CP;;;;;;;;;;;OAWG;IACH,sBAAsB,CACpB,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAChC,IAAI;IA0CP;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,EAAE;IAkG/D;;;;;;;;OAQG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAgBxE;;;;;;OAMG;IACH,mBAAmB,CACjB,OAAO,EAAE,eAAe,GAAG,MAAM,EACjC,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAClC,cAAc;IA8BjB;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,cAAc;IA2BlF;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc;IA0BpG;;;;;;;;OAQG;IACH,oBAAoB,CAClB,MAAM,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAC9B,OAAO,CAAC,EAAE;QAAE,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1C,cAAc;IAuCjB;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,cAAc;IA8B7D;;OAEG;IACH,kBAAkB,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,cAAc;IAwBjB,+EAA+E;IAC/E,OAAO,CAAC,yBAAyB;IAejC;;;;;;;;;;;OAWG;IACH;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,OAAO,CAAC,EAAE;QACxB,QAAQ,CAAC,EAAE,OAAO,eAAe,EAAE,gBAAgB,CAAC;QACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,cAAc;IAyDlB;;;;;;;;OAQG;IACH,qBAAqB,CAAC,OAAO,CAAC,EAAE;QAC9B,QAAQ,CAAC,EAAE,WAAW,CAAC;KACxB,GAAG,cAAc;IAuDlB;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,OAAO,CAAC,EAAE;QAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;QAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,cAAc;IAuClB;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,OAAO,CAAC,EAAE;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;QAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,cAAc;IA6ClB;;OAEG;IACH,mBAAmB,CACjB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,cAAc;IAyBjB;;OAEG;IACH,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5D,cAAc;IA0BjB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,cAAc;IA2BlB;;OAEG;IACH,oBAAoB,CAClB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7C,cAAc;IAwBjB;;OAEG;IACH,uBAAuB,CACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACrD,cAAc;IAyBjB;;OAEG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE;QACzB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,cAAc;IA4BlB;;OAEG;IACH,oBAAoB,CAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;QACR,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GACA,cAAc;IA6BjB;;OAEG;IACH,2BAA2B,CACzB,eAAe,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GACA,cAAc;IAgCjB;;;;;;;;;;OAUG;IACH,qBAAqB,CACnB,uBAAuB,EAAE,MAAM,EAC/B,gBAAgB,EAAE,OAAO,EACzB,OAAO,CAAC,EAAE;QACR,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;KAChC,GACA,cAAc;IAgCjB,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,OAAO,CAAC,oBAAoB,CAAqB;IAEjD,IAAI,aAAa,IAAI,aAAa,CAGjC;IAED,IAAI,aAAa,CAAC,QAAQ,EAAE,aAAa,EAExC;IAED,iBAAiB,IAAI,eAAe;IAoBpC,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,WAAW;IA8DrD,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,MAAsB,GAAG,MAAM;IAiCnE;;;;;OAKG;IACG,QAAQ,CAAC,OAAO,GAAE;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA2BzC;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI;IAkDlE;;;;;;;;;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"}
|