vaspera 2.14.0 → 2.16.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/CHANGELOG.md +62 -0
- package/README.md +15 -2
- package/dist/__tests__/certification/agent-certificate-e2e.test.d.ts +2 -0
- package/dist/__tests__/certification/agent-certificate-e2e.test.d.ts.map +1 -0
- package/dist/__tests__/certification/agent-certificate-e2e.test.js +90 -0
- package/dist/__tests__/certification/agent-certificate-e2e.test.js.map +1 -0
- package/dist/__tests__/certification/agent-certificate-map.test.d.ts +2 -0
- package/dist/__tests__/certification/agent-certificate-map.test.d.ts.map +1 -0
- package/dist/__tests__/certification/agent-certificate-map.test.js +107 -0
- package/dist/__tests__/certification/agent-certificate-map.test.js.map +1 -0
- package/dist/__tests__/certification/agent-certificate.test.d.ts +2 -0
- package/dist/__tests__/certification/agent-certificate.test.d.ts.map +1 -0
- package/dist/__tests__/certification/agent-certificate.test.js +78 -0
- package/dist/__tests__/certification/agent-certificate.test.js.map +1 -0
- package/dist/__tests__/certification/verify-endpoint.test.d.ts +2 -0
- package/dist/__tests__/certification/verify-endpoint.test.d.ts.map +1 -0
- package/dist/__tests__/certification/verify-endpoint.test.js +81 -0
- package/dist/__tests__/certification/verify-endpoint.test.js.map +1 -0
- package/dist/__tests__/compliance/ai-frameworks.test.d.ts +2 -0
- package/dist/__tests__/compliance/ai-frameworks.test.d.ts.map +1 -0
- package/dist/__tests__/compliance/ai-frameworks.test.js +87 -0
- package/dist/__tests__/compliance/ai-frameworks.test.js.map +1 -0
- package/dist/__tests__/eval/llm-analyzer.test.d.ts +2 -0
- package/dist/__tests__/eval/llm-analyzer.test.d.ts.map +1 -0
- package/dist/__tests__/eval/llm-analyzer.test.js +93 -0
- package/dist/__tests__/eval/llm-analyzer.test.js.map +1 -0
- package/dist/__tests__/eval/redteam-harness.test.d.ts +2 -0
- package/dist/__tests__/eval/redteam-harness.test.d.ts.map +1 -0
- package/dist/__tests__/eval/redteam-harness.test.js +136 -0
- package/dist/__tests__/eval/redteam-harness.test.js.map +1 -0
- package/dist/__tests__/evidence/evidence.test.d.ts +2 -0
- package/dist/__tests__/evidence/evidence.test.d.ts.map +1 -0
- package/dist/__tests__/evidence/evidence.test.js +240 -0
- package/dist/__tests__/evidence/evidence.test.js.map +1 -0
- package/dist/__tests__/history/decisions.test.d.ts +2 -0
- package/dist/__tests__/history/decisions.test.d.ts.map +1 -0
- package/dist/__tests__/history/decisions.test.js +54 -0
- package/dist/__tests__/history/decisions.test.js.map +1 -0
- package/dist/__tests__/http-auth.test.d.ts +2 -0
- package/dist/__tests__/http-auth.test.d.ts.map +1 -0
- package/dist/__tests__/http-auth.test.js +55 -0
- package/dist/__tests__/http-auth.test.js.map +1 -0
- package/dist/__tests__/http-policy.test.d.ts +2 -0
- package/dist/__tests__/http-policy.test.d.ts.map +1 -0
- package/dist/__tests__/http-policy.test.js +69 -0
- package/dist/__tests__/http-policy.test.js.map +1 -0
- package/dist/__tests__/http-server-transport.test.d.ts +2 -0
- package/dist/__tests__/http-server-transport.test.d.ts.map +1 -0
- package/dist/__tests__/http-server-transport.test.js +132 -0
- package/dist/__tests__/http-server-transport.test.js.map +1 -0
- package/dist/__tests__/integration/destructive-guards.test.d.ts +2 -0
- package/dist/__tests__/integration/destructive-guards.test.d.ts.map +1 -0
- package/dist/__tests__/integration/destructive-guards.test.js +49 -0
- package/dist/__tests__/integration/destructive-guards.test.js.map +1 -0
- package/dist/__tests__/logger-redaction.test.d.ts +2 -0
- package/dist/__tests__/logger-redaction.test.d.ts.map +1 -0
- package/dist/__tests__/logger-redaction.test.js +74 -0
- package/dist/__tests__/logger-redaction.test.js.map +1 -0
- package/dist/__tests__/manifest-schema.test.d.ts +2 -0
- package/dist/__tests__/manifest-schema.test.d.ts.map +1 -0
- package/dist/__tests__/manifest-schema.test.js +43 -0
- package/dist/__tests__/manifest-schema.test.js.map +1 -0
- package/dist/__tests__/scanners/builtin-rules.test.d.ts +2 -0
- package/dist/__tests__/scanners/builtin-rules.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/builtin-rules.test.js +51 -0
- package/dist/__tests__/scanners/builtin-rules.test.js.map +1 -0
- package/dist/__tests__/scanners/runtime/golden-path-runner.test.js +13 -1
- package/dist/__tests__/scanners/runtime/golden-path-runner.test.js.map +1 -1
- package/dist/__tests__/tool-guard.test.d.ts +2 -0
- package/dist/__tests__/tool-guard.test.d.ts.map +1 -0
- package/dist/__tests__/tool-guard.test.js +97 -0
- package/dist/__tests__/tool-guard.test.js.map +1 -0
- package/dist/__tests__/util/contained-file.test.d.ts +2 -0
- package/dist/__tests__/util/contained-file.test.d.ts.map +1 -0
- package/dist/__tests__/util/contained-file.test.js +78 -0
- package/dist/__tests__/util/contained-file.test.js.map +1 -0
- package/dist/__tests__/util/subprocess.test.d.ts +2 -0
- package/dist/__tests__/util/subprocess.test.d.ts.map +1 -0
- package/dist/__tests__/util/subprocess.test.js +48 -0
- package/dist/__tests__/util/subprocess.test.js.map +1 -0
- package/dist/action/diff-mode.d.ts.map +1 -1
- package/dist/action/diff-mode.js +31 -12
- package/dist/action/diff-mode.js.map +1 -1
- package/dist/certification/agent-certificate-map.d.ts +51 -0
- package/dist/certification/agent-certificate-map.d.ts.map +1 -0
- package/dist/certification/agent-certificate-map.js +265 -0
- package/dist/certification/agent-certificate-map.js.map +1 -0
- package/dist/certification/agent-certificate-sample.d.ts +25 -0
- package/dist/certification/agent-certificate-sample.d.ts.map +1 -0
- package/dist/certification/agent-certificate-sample.js +207 -0
- package/dist/certification/agent-certificate-sample.js.map +1 -0
- package/dist/certification/agent-certificate.d.ts +1981 -0
- package/dist/certification/agent-certificate.d.ts.map +1 -0
- package/dist/certification/agent-certificate.js +309 -0
- package/dist/certification/agent-certificate.js.map +1 -0
- package/dist/certification/autofix.d.ts.map +1 -1
- package/dist/certification/autofix.js +5 -3
- package/dist/certification/autofix.js.map +1 -1
- package/dist/certification/store.d.ts.map +1 -1
- package/dist/certification/store.js +5 -2
- package/dist/certification/store.js.map +1 -1
- package/dist/certification/verify-endpoint.d.ts +48 -0
- package/dist/certification/verify-endpoint.d.ts.map +1 -0
- package/dist/certification/verify-endpoint.js +79 -0
- package/dist/certification/verify-endpoint.js.map +1 -0
- package/dist/compliance/index.d.ts +2 -0
- package/dist/compliance/index.d.ts.map +1 -1
- package/dist/compliance/index.js +4 -0
- package/dist/compliance/index.js.map +1 -1
- package/dist/compliance/iso42001.d.ts +21 -0
- package/dist/compliance/iso42001.d.ts.map +1 -0
- package/dist/compliance/iso42001.js +160 -0
- package/dist/compliance/iso42001.js.map +1 -0
- package/dist/compliance/mapper.d.ts.map +1 -1
- package/dist/compliance/mapper.js +12 -0
- package/dist/compliance/mapper.js.map +1 -1
- package/dist/compliance/nist-ai-rmf.d.ts +20 -0
- package/dist/compliance/nist-ai-rmf.d.ts.map +1 -0
- package/dist/compliance/nist-ai-rmf.js +140 -0
- package/dist/compliance/nist-ai-rmf.js.map +1 -0
- package/dist/config/flags.d.ts +4 -4
- package/dist/eval/fixtures.d.ts.map +1 -1
- package/dist/eval/fixtures.js +161 -119
- package/dist/eval/fixtures.js.map +1 -1
- package/dist/eval/fixtures.test.js +4 -2
- package/dist/eval/fixtures.test.js.map +1 -1
- package/dist/eval/llm-analyzer.d.ts +40 -0
- package/dist/eval/llm-analyzer.d.ts.map +1 -0
- package/dist/eval/llm-analyzer.js +154 -0
- package/dist/eval/llm-analyzer.js.map +1 -0
- package/dist/eval/redteam-harness.d.ts +95 -0
- package/dist/eval/redteam-harness.d.ts.map +1 -0
- package/dist/eval/redteam-harness.js +137 -0
- package/dist/eval/redteam-harness.js.map +1 -0
- package/dist/evidence/collector.d.ts.map +1 -1
- package/dist/evidence/collector.js +21 -1
- package/dist/evidence/collector.js.map +1 -1
- package/dist/evidence/store.d.ts.map +1 -1
- package/dist/evidence/store.js +29 -5
- package/dist/evidence/store.js.map +1 -1
- package/dist/evidence/types.d.ts +16 -9
- package/dist/evidence/types.d.ts.map +1 -1
- package/dist/history/decisions.d.ts +63 -0
- package/dist/history/decisions.d.ts.map +1 -0
- package/dist/history/decisions.js +60 -0
- package/dist/history/decisions.js.map +1 -0
- package/dist/history/index.d.ts +2 -0
- package/dist/history/index.d.ts.map +1 -1
- package/dist/history/index.js +2 -0
- package/dist/history/index.js.map +1 -1
- package/dist/history/types.d.ts +34 -5
- package/dist/history/types.d.ts.map +1 -1
- package/dist/history/types.js +2 -0
- package/dist/history/types.js.map +1 -1
- package/dist/http-auth.d.ts +22 -0
- package/dist/http-auth.d.ts.map +1 -0
- package/dist/http-auth.js +58 -0
- package/dist/http-auth.js.map +1 -0
- package/dist/http-policy.d.ts +30 -0
- package/dist/http-policy.d.ts.map +1 -0
- package/dist/http-policy.js +54 -0
- package/dist/http-policy.js.map +1 -0
- package/dist/http-server.js +195 -12
- package/dist/http-server.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +257 -16
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +56 -2
- package/dist/logger.js.map +1 -1
- package/dist/plugins/types.d.ts +2 -2
- package/dist/scanners/agent/prompt-injection-fuzzer.d.ts.map +1 -1
- package/dist/scanners/agent/prompt-injection-fuzzer.js +26 -0
- package/dist/scanners/agent/prompt-injection-fuzzer.js.map +1 -1
- package/dist/scanners/agent/types.d.ts +10 -10
- package/dist/scanners/bandit.d.ts.map +1 -1
- package/dist/scanners/bandit.js +35 -29
- package/dist/scanners/bandit.js.map +1 -1
- package/dist/scanners/binary-analysis.d.ts.map +1 -1
- package/dist/scanners/binary-analysis.js +24 -49
- package/dist/scanners/binary-analysis.js.map +1 -1
- package/dist/scanners/brakeman.d.ts.map +1 -1
- package/dist/scanners/brakeman.js +19 -33
- package/dist/scanners/brakeman.js.map +1 -1
- package/dist/scanners/builtin-rules.d.ts +24 -0
- package/dist/scanners/builtin-rules.d.ts.map +1 -0
- package/dist/scanners/builtin-rules.js +175 -0
- package/dist/scanners/builtin-rules.js.map +1 -0
- package/dist/scanners/dast.d.ts.map +1 -1
- package/dist/scanners/dast.js +24 -34
- package/dist/scanners/dast.js.map +1 -1
- package/dist/scanners/deploy/types.d.ts +6 -6
- package/dist/scanners/eslint.d.ts.map +1 -1
- package/dist/scanners/eslint.js +15 -24
- package/dist/scanners/eslint.js.map +1 -1
- package/dist/scanners/gosec.d.ts.map +1 -1
- package/dist/scanners/gosec.js +14 -62
- package/dist/scanners/gosec.js.map +1 -1
- package/dist/scanners/index.d.ts.map +1 -1
- package/dist/scanners/index.js +38 -7
- package/dist/scanners/index.js.map +1 -1
- package/dist/scanners/memory-safety.d.ts.map +1 -1
- package/dist/scanners/memory-safety.js +27 -28
- package/dist/scanners/memory-safety.js.map +1 -1
- package/dist/scanners/openapi.d.ts.map +1 -1
- package/dist/scanners/openapi.js +14 -22
- package/dist/scanners/openapi.js.map +1 -1
- package/dist/scanners/race-condition.d.ts.map +1 -1
- package/dist/scanners/race-condition.js +17 -16
- package/dist/scanners/race-condition.js.map +1 -1
- package/dist/scanners/runtime/types.d.ts +4 -4
- package/dist/scanners/rust.d.ts.map +1 -1
- package/dist/scanners/rust.js +38 -37
- package/dist/scanners/rust.js.map +1 -1
- package/dist/scanners/scale/types.d.ts +16 -16
- package/dist/scanners/secrets.d.ts.map +1 -1
- package/dist/scanners/secrets.js +66 -78
- package/dist/scanners/secrets.js.map +1 -1
- package/dist/scanners/semgrep.d.ts +2 -0
- package/dist/scanners/semgrep.d.ts.map +1 -1
- package/dist/scanners/semgrep.js +12 -0
- package/dist/scanners/semgrep.js.map +1 -1
- package/dist/scanners/terraform.d.ts.map +1 -1
- package/dist/scanners/terraform.js +47 -40
- package/dist/scanners/terraform.js.map +1 -1
- package/dist/scanners/trivy.d.ts.map +1 -1
- package/dist/scanners/trivy.js +38 -30
- package/dist/scanners/trivy.js.map +1 -1
- package/dist/telemetry/install-id.d.ts +25 -0
- package/dist/telemetry/install-id.d.ts.map +1 -0
- package/dist/telemetry/install-id.js +49 -0
- package/dist/telemetry/install-id.js.map +1 -0
- package/dist/telemetry/usage.d.ts +19 -2
- package/dist/telemetry/usage.d.ts.map +1 -1
- package/dist/telemetry/usage.js +44 -8
- package/dist/telemetry/usage.js.map +1 -1
- package/dist/tool-guard.d.ts +40 -0
- package/dist/tool-guard.d.ts.map +1 -0
- package/dist/tool-guard.js +55 -0
- package/dist/tool-guard.js.map +1 -0
- package/dist/util/index.d.ts +2 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +2 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/paths.d.ts +20 -3
- package/dist/util/paths.d.ts.map +1 -1
- package/dist/util/paths.js +84 -4
- package/dist/util/paths.js.map +1 -1
- package/dist/util/subprocess.d.ts +51 -0
- package/dist/util/subprocess.d.ts.map +1 -0
- package/dist/util/subprocess.js +77 -0
- package/dist/util/subprocess.js.map +1 -0
- package/package.json +12 -2
- package/dist/eval/fixtures/healthcare/audit-gaps.d.ts +0 -28
- package/dist/eval/fixtures/healthcare/audit-gaps.d.ts.map +0 -1
- package/dist/eval/fixtures/healthcare/audit-gaps.js +0 -90
- package/dist/eval/fixtures/healthcare/audit-gaps.js.map +0 -1
- package/dist/eval/fixtures/healthcare/consent-bypass.d.ts +0 -31
- package/dist/eval/fixtures/healthcare/consent-bypass.d.ts.map +0 -1
- package/dist/eval/fixtures/healthcare/consent-bypass.js +0 -61
- package/dist/eval/fixtures/healthcare/consent-bypass.js.map +0 -1
- package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts +0 -24
- package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts.map +0 -1
- package/dist/eval/fixtures/healthcare/phi-in-logs.js +0 -41
- package/dist/eval/fixtures/healthcare/phi-in-logs.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/evidence/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,mBAAmB,GACnB,aAAa,GACb,MAAM,GACN,kBAAkB,GAClB,qBAAqB,GACrB,sBAAsB,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,IAAI,EAAE,oBAAoB,CAAC;IAE3B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IAEpB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;IAEtB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAElB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IAEjB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAEhB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAElB,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6BAA6B;IAC7B,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IAEF,6CAA6C;IAC7C,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IAEX,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAElB,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IAEpB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IAEvB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,sCAAsC;IACtC,EAAE,CAAC,EAAE,aAAa,CAAC;IAEnB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IAEX,kCAAkC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAElB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,mDAAmD;IACnD,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAElC,mCAAmC;IACnC,WAAW,EAAE,kBAAkB,CAAC;IAEhC,0BAA0B;IAC1B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAE9B,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IAErB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/evidence/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decision provenance.
|
|
3
|
+
*
|
|
4
|
+
* Records AI decisions to the existing tamper-evident hash chain
|
|
5
|
+
* (`history/store`), so every decision is traceable and the chain
|
|
6
|
+
* proves it wasn't altered after the fact. Raw inputs/prompts/outputs
|
|
7
|
+
* are stored as sha256 digests (+ optional short summaries), so the
|
|
8
|
+
* record captures *what was decided* without retaining secrets verbatim.
|
|
9
|
+
*
|
|
10
|
+
* This is the substrate for the certificate's explainability dimension:
|
|
11
|
+
* the regulations (EU AI Act, SR 11-7, NIST AI RMF) ask for traceability
|
|
12
|
+
* and reproducible provenance, not neuron-level interpretability.
|
|
13
|
+
*
|
|
14
|
+
* @module history/decisions
|
|
15
|
+
*/
|
|
16
|
+
import type { DecisionRecordEntry, ActorIdentity } from "./types.js";
|
|
17
|
+
/** Raw decision inputs — large/sensitive fields are digested, not stored. */
|
|
18
|
+
export interface DecisionInput {
|
|
19
|
+
/** Kind of decision (tool_call, classification, generation, refusal, …) */
|
|
20
|
+
decisionType: string;
|
|
21
|
+
/** Model that produced the decision */
|
|
22
|
+
model: string;
|
|
23
|
+
modelVersion?: string;
|
|
24
|
+
/** The input/context that led to the decision (digested) */
|
|
25
|
+
input: string;
|
|
26
|
+
/** The prompt, if applicable (digested) */
|
|
27
|
+
prompt?: string;
|
|
28
|
+
/** The output/decision (digested) */
|
|
29
|
+
output: string;
|
|
30
|
+
/** Tools/functions invoked */
|
|
31
|
+
toolsInvoked?: string[];
|
|
32
|
+
/** Short human-readable summary */
|
|
33
|
+
summary?: string;
|
|
34
|
+
/** Rationale / explanation */
|
|
35
|
+
rationale?: string;
|
|
36
|
+
/** Model confidence 0-100 */
|
|
37
|
+
confidence?: number;
|
|
38
|
+
/** Associated certification, if any */
|
|
39
|
+
certificationId?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface RecordDecisionOptions {
|
|
42
|
+
actor?: ActorIdentity;
|
|
43
|
+
/** Sigstore-sign the entry (requires OIDC; default false). */
|
|
44
|
+
sign?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Record an AI decision to the tamper-evident chain. Returns the appended
|
|
48
|
+
* entry, including its integrity proof (hash + previousHash).
|
|
49
|
+
*/
|
|
50
|
+
export declare function recordDecision(projectPath: string, decision: DecisionInput, options?: RecordDecisionOptions): Promise<DecisionRecordEntry>;
|
|
51
|
+
export interface DecisionProvenance {
|
|
52
|
+
/** Head hash of the audit chain (anchors the certificate). */
|
|
53
|
+
auditTrailHead: string;
|
|
54
|
+
/** Number of decision records captured. */
|
|
55
|
+
decisionRecords: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Read the provenance anchor for a project: the head hash of the
|
|
59
|
+
* tamper-evident chain and the count of decision records. Used to
|
|
60
|
+
* populate a certificate's `provenance` block.
|
|
61
|
+
*/
|
|
62
|
+
export declare function getDecisionProvenance(projectPath: string): Promise<DecisionProvenance>;
|
|
63
|
+
//# sourceMappingURL=decisions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decisions.d.ts","sourceRoot":"","sources":["../../src/history/decisions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMrE,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,mBAAmB,CAAC,CAsB9B;AAED,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAO7B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decision provenance.
|
|
3
|
+
*
|
|
4
|
+
* Records AI decisions to the existing tamper-evident hash chain
|
|
5
|
+
* (`history/store`), so every decision is traceable and the chain
|
|
6
|
+
* proves it wasn't altered after the fact. Raw inputs/prompts/outputs
|
|
7
|
+
* are stored as sha256 digests (+ optional short summaries), so the
|
|
8
|
+
* record captures *what was decided* without retaining secrets verbatim.
|
|
9
|
+
*
|
|
10
|
+
* This is the substrate for the certificate's explainability dimension:
|
|
11
|
+
* the regulations (EU AI Act, SR 11-7, NIST AI RMF) ask for traceability
|
|
12
|
+
* and reproducible provenance, not neuron-level interpretability.
|
|
13
|
+
*
|
|
14
|
+
* @module history/decisions
|
|
15
|
+
*/
|
|
16
|
+
import { createHash } from "crypto";
|
|
17
|
+
import { appendHistoryEntry, getLastEntryHash, queryHistory } from "./store.js";
|
|
18
|
+
function sha256(value) {
|
|
19
|
+
return createHash("sha256").update(value, "utf8").digest("hex");
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Record an AI decision to the tamper-evident chain. Returns the appended
|
|
23
|
+
* entry, including its integrity proof (hash + previousHash).
|
|
24
|
+
*/
|
|
25
|
+
export async function recordDecision(projectPath, decision, options = {}) {
|
|
26
|
+
const entry = {
|
|
27
|
+
type: "decision_record",
|
|
28
|
+
decisionType: decision.decisionType,
|
|
29
|
+
model: decision.model,
|
|
30
|
+
...(decision.modelVersion ? { modelVersion: decision.modelVersion } : {}),
|
|
31
|
+
inputDigest: sha256(decision.input),
|
|
32
|
+
...(decision.prompt !== undefined ? { promptDigest: sha256(decision.prompt) } : {}),
|
|
33
|
+
outputDigest: sha256(decision.output),
|
|
34
|
+
...(decision.toolsInvoked ? { toolsInvoked: decision.toolsInvoked } : {}),
|
|
35
|
+
...(decision.summary ? { summary: decision.summary } : {}),
|
|
36
|
+
...(decision.rationale ? { rationale: decision.rationale } : {}),
|
|
37
|
+
...(decision.confidence !== undefined ? { confidence: decision.confidence } : {}),
|
|
38
|
+
...(decision.certificationId ? { certificationId: decision.certificationId } : {}),
|
|
39
|
+
};
|
|
40
|
+
const appended = await appendHistoryEntry(projectPath, entry, {
|
|
41
|
+
actor: options.actor,
|
|
42
|
+
enableIntegrity: true,
|
|
43
|
+
sign: options.sign,
|
|
44
|
+
});
|
|
45
|
+
return appended;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Read the provenance anchor for a project: the head hash of the
|
|
49
|
+
* tamper-evident chain and the count of decision records. Used to
|
|
50
|
+
* populate a certificate's `provenance` block.
|
|
51
|
+
*/
|
|
52
|
+
export async function getDecisionProvenance(projectPath) {
|
|
53
|
+
const auditTrailHead = await getLastEntryHash(projectPath);
|
|
54
|
+
const result = await queryHistory(projectPath, {
|
|
55
|
+
type: "decision_record",
|
|
56
|
+
limit: 1000,
|
|
57
|
+
});
|
|
58
|
+
return { auditTrailHead, decisionRecords: result.total };
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=decisions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decisions.js","sourceRoot":"","sources":["../../src/history/decisions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGhF,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAiCD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,QAAuB,EACvB,UAAiC,EAAE;IAEnC,MAAM,KAAK,GAAG;QACZ,IAAI,EAAE,iBAA0B;QAChC,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnC,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,KAAK,EAAE;QAC5D,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC;IACH,OAAO,QAA+B,CAAC;AACzC,CAAC;AASD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB;IAEnB,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE;QAC7C,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AAC3D,CAAC"}
|
package/dist/history/index.d.ts
CHANGED
|
@@ -9,5 +9,7 @@ export type { HistoryEntryType, BaseHistoryEntry, CertificationStartedEntry, Cer
|
|
|
9
9
|
export { HistoryQueryOptionsSchema } from "./types.js";
|
|
10
10
|
export { appendHistoryEntry, queryHistory, calculateTrends, getRecentActivity, formatTrendsAsMarkdown, getHistoryStats, calculateEntryHash, getLastEntryHash, } from "./store.js";
|
|
11
11
|
export type { AppendHistoryOptions } from "./store.js";
|
|
12
|
+
export { recordDecision, getDecisionProvenance } from "./decisions.js";
|
|
13
|
+
export type { DecisionInput, RecordDecisionOptions, DecisionProvenance, } from "./decisions.js";
|
|
12
14
|
export { verifyEntry, verifyHistoryIntegrity, formatVerificationResultAsMarkdown, getVerificationSummary, } from "./verify.js";
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/history/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,2BAA2B,EAC3B,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,aAAa,EAEb,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EAEf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,kCAAkC,EAClC,sBAAsB,GACvB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/history/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,2BAA2B,EAC3B,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,aAAa,EAEb,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EAEf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EACV,aAAa,EACb,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,kCAAkC,EAClC,sBAAsB,GACvB,MAAM,aAAa,CAAC"}
|
package/dist/history/index.js
CHANGED
|
@@ -10,6 +10,8 @@ export { HistoryQueryOptionsSchema } from "./types.js";
|
|
|
10
10
|
export { appendHistoryEntry, queryHistory, calculateTrends, getRecentActivity, formatTrendsAsMarkdown, getHistoryStats,
|
|
11
11
|
// Hash chain functions
|
|
12
12
|
calculateEntryHash, getLastEntryHash, } from "./store.js";
|
|
13
|
+
// Decision provenance
|
|
14
|
+
export { recordDecision, getDecisionProvenance } from "./decisions.js";
|
|
13
15
|
// Verification functions
|
|
14
16
|
export { verifyEntry, verifyHistoryIntegrity, formatVerificationResultAsMarkdown, getVerificationSummary, } from "./verify.js";
|
|
15
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/history/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0BH,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,kBAAkB;AAClB,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,eAAe;AACf,uBAAuB;AACvB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAIpB,yBAAyB;AACzB,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,kCAAkC,EAClC,sBAAsB,GACvB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/history/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0BH,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,kBAAkB;AAClB,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,eAAe;AACf,uBAAuB;AACvB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAIpB,sBAAsB;AACtB,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAOvE,yBAAyB;AACzB,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,kCAAkC,EAClC,sBAAsB,GACvB,MAAM,aAAa,CAAC"}
|
package/dist/history/types.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ import type { ComplianceFramework } from "../compliance/types.js";
|
|
|
11
11
|
/**
|
|
12
12
|
* History entry type
|
|
13
13
|
*/
|
|
14
|
-
export type HistoryEntryType = "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "compliance_report" | "model_run";
|
|
14
|
+
export type HistoryEntryType = "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "compliance_report" | "model_run" | "decision_record";
|
|
15
15
|
/**
|
|
16
16
|
* Actor identity for audit trail
|
|
17
17
|
*/
|
|
@@ -134,10 +134,39 @@ export interface ModelRunEntry extends BaseHistoryEntry {
|
|
|
134
134
|
durationMs: number;
|
|
135
135
|
cost?: number;
|
|
136
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Decision record entry — a tamper-evident record of an AI decision for
|
|
139
|
+
* explainability/traceability. Large or sensitive content (prompts,
|
|
140
|
+
* inputs, outputs) is stored as a sha256 digest plus a short summary, so
|
|
141
|
+
* the chain proves *what was decided* without retaining raw secrets.
|
|
142
|
+
*/
|
|
143
|
+
export interface DecisionRecordEntry extends BaseHistoryEntry {
|
|
144
|
+
type: "decision_record";
|
|
145
|
+
/** Kind of decision (e.g. tool_call, classification, generation, refusal) */
|
|
146
|
+
decisionType: string;
|
|
147
|
+
/** Model that produced the decision */
|
|
148
|
+
model: string;
|
|
149
|
+
/** Model version/build, if known */
|
|
150
|
+
modelVersion?: string;
|
|
151
|
+
/** sha256 of the input/context that led to the decision */
|
|
152
|
+
inputDigest: string;
|
|
153
|
+
/** sha256 of the prompt (if applicable) */
|
|
154
|
+
promptDigest?: string;
|
|
155
|
+
/** Tools/functions invoked as part of the decision */
|
|
156
|
+
toolsInvoked?: string[];
|
|
157
|
+
/** sha256 of the output/decision */
|
|
158
|
+
outputDigest: string;
|
|
159
|
+
/** Short human-readable summary of the decision */
|
|
160
|
+
summary?: string;
|
|
161
|
+
/** Rationale / explanation, if captured */
|
|
162
|
+
rationale?: string;
|
|
163
|
+
/** Model confidence 0-100, if available */
|
|
164
|
+
confidence?: number;
|
|
165
|
+
}
|
|
137
166
|
/**
|
|
138
167
|
* Union of all history entry types
|
|
139
168
|
*/
|
|
140
|
-
export type HistoryEntry = CertificationStartedEntry | CertificationCompletedEntry | ScanCompletedEntry | FindingSubmittedEntry | FindingFixedEntry | ComplianceReportEntry | ModelRunEntry;
|
|
169
|
+
export type HistoryEntry = CertificationStartedEntry | CertificationCompletedEntry | ScanCompletedEntry | FindingSubmittedEntry | FindingFixedEntry | ComplianceReportEntry | ModelRunEntry | DecisionRecordEntry;
|
|
141
170
|
/**
|
|
142
171
|
* History query options
|
|
143
172
|
*/
|
|
@@ -206,7 +235,7 @@ export interface TrendAnalysis {
|
|
|
206
235
|
* Zod schemas for validation
|
|
207
236
|
*/
|
|
208
237
|
export declare const HistoryQueryOptionsSchema: z.ZodObject<{
|
|
209
|
-
type: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["certification_started", "certification_completed", "scan_completed", "finding_submitted", "finding_fixed", "compliance_report", "model_run"]>, z.ZodArray<z.ZodEnum<["certification_started", "certification_completed", "scan_completed", "finding_submitted", "finding_fixed", "compliance_report", "model_run"]>, "many">]>>;
|
|
238
|
+
type: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["certification_started", "certification_completed", "scan_completed", "finding_submitted", "finding_fixed", "compliance_report", "model_run", "decision_record"]>, z.ZodArray<z.ZodEnum<["certification_started", "certification_completed", "scan_completed", "finding_submitted", "finding_fixed", "compliance_report", "model_run", "decision_record"]>, "many">]>>;
|
|
210
239
|
projectPath: z.ZodOptional<z.ZodString>;
|
|
211
240
|
certificationId: z.ZodOptional<z.ZodString>;
|
|
212
241
|
startDate: z.ZodOptional<z.ZodString>;
|
|
@@ -220,13 +249,13 @@ export declare const HistoryQueryOptionsSchema: z.ZodObject<{
|
|
|
220
249
|
order: "asc" | "desc";
|
|
221
250
|
projectPath?: string | undefined;
|
|
222
251
|
certificationId?: string | undefined;
|
|
223
|
-
type?: "compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run" | ("compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run")[] | undefined;
|
|
252
|
+
type?: "compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run" | "decision_record" | ("compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run" | "decision_record")[] | undefined;
|
|
224
253
|
startDate?: string | undefined;
|
|
225
254
|
endDate?: string | undefined;
|
|
226
255
|
}, {
|
|
227
256
|
projectPath?: string | undefined;
|
|
228
257
|
certificationId?: string | undefined;
|
|
229
|
-
type?: "compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run" | ("compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run")[] | undefined;
|
|
258
|
+
type?: "compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run" | "decision_record" | ("compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run" | "decision_record")[] | undefined;
|
|
230
259
|
limit?: number | undefined;
|
|
231
260
|
offset?: number | undefined;
|
|
232
261
|
order?: "asc" | "desc" | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/history/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,uBAAuB,GACvB,yBAAyB,GACzB,gBAAgB,GAChB,mBAAmB,GACnB,eAAe,GACf,mBAAmB,GACnB,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/history/types.ts"],"names":[],"mappings":"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"}
|
package/dist/history/types.js
CHANGED
|
@@ -19,6 +19,7 @@ export const HistoryQueryOptionsSchema = z.object({
|
|
|
19
19
|
"finding_fixed",
|
|
20
20
|
"compliance_report",
|
|
21
21
|
"model_run",
|
|
22
|
+
"decision_record",
|
|
22
23
|
]),
|
|
23
24
|
z.array(z.enum([
|
|
24
25
|
"certification_started",
|
|
@@ -28,6 +29,7 @@ export const HistoryQueryOptionsSchema = z.object({
|
|
|
28
29
|
"finding_fixed",
|
|
29
30
|
"compliance_report",
|
|
30
31
|
"model_run",
|
|
32
|
+
"decision_record",
|
|
31
33
|
])),
|
|
32
34
|
]).optional(),
|
|
33
35
|
projectPath: z.string().optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/history/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/history/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqQxB;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC,CAAC,IAAI,CAAC;YACL,uBAAuB;YACvB,yBAAyB;YACzB,gBAAgB;YAChB,mBAAmB;YACnB,eAAe;YACf,mBAAmB;YACnB,WAAW;YACX,iBAAiB;SAClB,CAAC;QACF,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACb,uBAAuB;YACvB,yBAAyB;YACzB,gBAAgB;YAChB,mBAAmB;YACnB,eAAe;YACf,mBAAmB;YACnB,WAAW;YACX,iBAAiB;SAClB,CAAC,CAAC;KACJ,CAAC,CAAC,QAAQ,EAAE;IACb,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACzD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CAC/C,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { IncomingMessage } from "http";
|
|
2
|
+
export declare class HttpAuthConfigError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
export interface HttpAuthConfig {
|
|
6
|
+
/** Shared secret required as `Authorization: Bearer <token>`; null when unauthenticated mode was explicitly enabled. */
|
|
7
|
+
token: string | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolve auth configuration from the environment.
|
|
11
|
+
*
|
|
12
|
+
* - `VASPERA_HTTP_TOKEN` set → bearer auth enforced on the MCP endpoint.
|
|
13
|
+
* - unset + `VASPERA_HTTP_ALLOW_UNAUTHENTICATED=true` → open mode (explicit opt-in).
|
|
14
|
+
* - unset otherwise → refuse to start.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveAuthConfig(env?: NodeJS.ProcessEnv): HttpAuthConfig;
|
|
17
|
+
/**
|
|
18
|
+
* Check a request against the resolved config. Constant-time comparison so
|
|
19
|
+
* the token cannot be recovered byte-by-byte via timing.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isAuthorized(req: IncomingMessage, config: HttpAuthConfig): boolean;
|
|
22
|
+
//# sourceMappingURL=http-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-auth.d.ts","sourceRoot":"","sources":["../src/http-auth.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAE5C,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,cAAc;IAC7B,wHAAwH;IACxH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,cAAc,CAoBtF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAgBlF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP Server Authentication
|
|
3
|
+
*
|
|
4
|
+
* Bearer-token auth for the HTTP transport. The MCP endpoint exposes every
|
|
5
|
+
* registered tool (filesystem scans, autofix, integrations), so it must not
|
|
6
|
+
* be reachable unauthenticated unless the operator explicitly opts in.
|
|
7
|
+
*
|
|
8
|
+
* @module http-auth
|
|
9
|
+
*/
|
|
10
|
+
import { timingSafeEqual } from "crypto";
|
|
11
|
+
export class HttpAuthConfigError extends Error {
|
|
12
|
+
constructor(message) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = "HttpAuthConfigError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve auth configuration from the environment.
|
|
19
|
+
*
|
|
20
|
+
* - `VASPERA_HTTP_TOKEN` set → bearer auth enforced on the MCP endpoint.
|
|
21
|
+
* - unset + `VASPERA_HTTP_ALLOW_UNAUTHENTICATED=true` → open mode (explicit opt-in).
|
|
22
|
+
* - unset otherwise → refuse to start.
|
|
23
|
+
*/
|
|
24
|
+
export function resolveAuthConfig(env = process.env) {
|
|
25
|
+
const token = env.VASPERA_HTTP_TOKEN;
|
|
26
|
+
if (token && token.trim().length > 0) {
|
|
27
|
+
if (token.trim().length < 16) {
|
|
28
|
+
throw new HttpAuthConfigError("VASPERA_HTTP_TOKEN must be at least 16 characters; generate one with: openssl rand -hex 32");
|
|
29
|
+
}
|
|
30
|
+
return { token: token.trim() };
|
|
31
|
+
}
|
|
32
|
+
if (env.VASPERA_HTTP_ALLOW_UNAUTHENTICATED === "true") {
|
|
33
|
+
return { token: null };
|
|
34
|
+
}
|
|
35
|
+
throw new HttpAuthConfigError("Refusing to start: no VASPERA_HTTP_TOKEN is set, and the MCP endpoint exposes all tools. " +
|
|
36
|
+
"Set VASPERA_HTTP_TOKEN (e.g. openssl rand -hex 32), or set " +
|
|
37
|
+
"VASPERA_HTTP_ALLOW_UNAUTHENTICATED=true to explicitly run open (not recommended).");
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check a request against the resolved config. Constant-time comparison so
|
|
41
|
+
* the token cannot be recovered byte-by-byte via timing.
|
|
42
|
+
*/
|
|
43
|
+
export function isAuthorized(req, config) {
|
|
44
|
+
if (config.token === null) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
const header = req.headers.authorization;
|
|
48
|
+
if (!header || !header.startsWith("Bearer ")) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const presented = Buffer.from(header.slice("Bearer ".length));
|
|
52
|
+
const expected = Buffer.from(config.token);
|
|
53
|
+
if (presented.length !== expected.length) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return timingSafeEqual(presented, expected);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=http-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-auth.js","sourceRoot":"","sources":["../src/http-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAGzC,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACpE,MAAM,KAAK,GAAG,GAAG,CAAC,kBAAkB,CAAC;IACrC,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,mBAAmB,CAC3B,4FAA4F,CAC7F,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,GAAG,CAAC,kCAAkC,KAAK,MAAM,EAAE,CAAC;QACtD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,mBAAmB,CAC3B,2FAA2F;QACzF,6DAA6D;QAC7D,mFAAmF,CACtF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAoB,EAAE,MAAsB;IACvE,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IACzC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP tool exposure policy.
|
|
3
|
+
*
|
|
4
|
+
* The stdio transport (local Claude Code) gets every tool; the HTTP
|
|
5
|
+
* transport is a remote attack surface, so by default it may only
|
|
6
|
+
* invoke tools registered with readOnlyHint: true. A leaked bearer
|
|
7
|
+
* token must not be equivalent to file writes or process execution.
|
|
8
|
+
*
|
|
9
|
+
* VASPERA_HTTP_TOOLS controls the policy:
|
|
10
|
+
* - "readonly" (default): only readOnlyHint tools
|
|
11
|
+
* - "all": every tool (not recommended)
|
|
12
|
+
* - comma-separated tool names: explicit allowlist
|
|
13
|
+
*
|
|
14
|
+
* @module http-policy
|
|
15
|
+
*/
|
|
16
|
+
export interface HttpToolPolicy {
|
|
17
|
+
mode: "readonly" | "all" | "allowlist";
|
|
18
|
+
allowlist: ReadonlySet<string>;
|
|
19
|
+
}
|
|
20
|
+
export declare function resolveToolPolicy(env?: NodeJS.ProcessEnv): HttpToolPolicy;
|
|
21
|
+
export declare function isToolAllowed(name: string, policy: HttpToolPolicy): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Find the first tools/call in a JSON-RPC payload (single or batch)
|
|
24
|
+
* that the policy forbids. Returns null when everything is allowed.
|
|
25
|
+
*/
|
|
26
|
+
export declare function findBlockedToolCall(payload: unknown, policy: HttpToolPolicy): {
|
|
27
|
+
toolName: string;
|
|
28
|
+
id: unknown;
|
|
29
|
+
} | null;
|
|
30
|
+
//# sourceMappingURL=http-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-policy.d.ts","sourceRoot":"","sources":["../src/http-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,GAAG,KAAK,GAAG,WAAW,CAAC;IACvC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAChC;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,cAAc,CAYhB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAI3E;AAQD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,cAAc,GACrB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAY1C"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP tool exposure policy.
|
|
3
|
+
*
|
|
4
|
+
* The stdio transport (local Claude Code) gets every tool; the HTTP
|
|
5
|
+
* transport is a remote attack surface, so by default it may only
|
|
6
|
+
* invoke tools registered with readOnlyHint: true. A leaked bearer
|
|
7
|
+
* token must not be equivalent to file writes or process execution.
|
|
8
|
+
*
|
|
9
|
+
* VASPERA_HTTP_TOOLS controls the policy:
|
|
10
|
+
* - "readonly" (default): only readOnlyHint tools
|
|
11
|
+
* - "all": every tool (not recommended)
|
|
12
|
+
* - comma-separated tool names: explicit allowlist
|
|
13
|
+
*
|
|
14
|
+
* @module http-policy
|
|
15
|
+
*/
|
|
16
|
+
import { toolAnnotations } from "./tool-guard.js";
|
|
17
|
+
export function resolveToolPolicy(env = process.env) {
|
|
18
|
+
const raw = (env.VASPERA_HTTP_TOOLS || "readonly").trim();
|
|
19
|
+
if (raw === "all") {
|
|
20
|
+
return { mode: "all", allowlist: new Set() };
|
|
21
|
+
}
|
|
22
|
+
if (raw === "readonly" || raw === "") {
|
|
23
|
+
return { mode: "readonly", allowlist: new Set() };
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
mode: "allowlist",
|
|
27
|
+
allowlist: new Set(raw.split(",").map((s) => s.trim()).filter(Boolean)),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function isToolAllowed(name, policy) {
|
|
31
|
+
if (policy.mode === "all")
|
|
32
|
+
return true;
|
|
33
|
+
if (policy.mode === "allowlist")
|
|
34
|
+
return policy.allowlist.has(name);
|
|
35
|
+
return toolAnnotations.get(name)?.readOnlyHint === true;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Find the first tools/call in a JSON-RPC payload (single or batch)
|
|
39
|
+
* that the policy forbids. Returns null when everything is allowed.
|
|
40
|
+
*/
|
|
41
|
+
export function findBlockedToolCall(payload, policy) {
|
|
42
|
+
const messages = Array.isArray(payload) ? payload : [payload];
|
|
43
|
+
for (const message of messages) {
|
|
44
|
+
const m = message;
|
|
45
|
+
if (m && m.method === "tools/call") {
|
|
46
|
+
const toolName = typeof m.params?.name === "string" ? m.params.name : "";
|
|
47
|
+
if (!isToolAllowed(toolName, policy)) {
|
|
48
|
+
return { toolName, id: m.id ?? null };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=http-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-policy.js","sourceRoot":"","sources":["../src/http-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAOlD,MAAM,UAAU,iBAAiB,CAC/B,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,kBAAkB,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IACpD,CAAC;IACD,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,MAAsB;IAChE,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnE,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;AAC1D,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,MAAsB;IAEtB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,OAAgC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;gBACrC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|