@governed-ai/runtime 1.0.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 +251 -0
- package/dist/domains/finance/entity_rules.d.ts +4 -0
- package/dist/domains/finance/entity_rules.d.ts.map +1 -0
- package/dist/domains/finance/entity_rules.js +19 -0
- package/dist/domains/finance/entity_rules.js.map +1 -0
- package/dist/domains/finance/policy.yaml +85 -0
- package/dist/domains/health/entity_rules.d.ts +4 -0
- package/dist/domains/health/entity_rules.d.ts.map +1 -0
- package/dist/domains/health/entity_rules.js +20 -0
- package/dist/domains/health/entity_rules.js.map +1 -0
- package/dist/domains/health/policy.yaml +95 -0
- package/dist/domains/insurance/entity_rules.d.ts +4 -0
- package/dist/domains/insurance/entity_rules.d.ts.map +1 -0
- package/dist/domains/insurance/entity_rules.js +19 -0
- package/dist/domains/insurance/entity_rules.js.map +1 -0
- package/dist/domains/insurance/policy.yaml +88 -0
- package/dist/domains/registry.d.ts +20 -0
- package/dist/domains/registry.d.ts.map +1 -0
- package/dist/domains/registry.js +65 -0
- package/dist/domains/registry.js.map +1 -0
- package/dist/domains/types.d.ts +12 -0
- package/dist/domains/types.d.ts.map +1 -0
- package/dist/domains/types.js +2 -0
- package/dist/domains/types.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/sdk/governance.d.ts +121 -0
- package/dist/sdk/governance.d.ts.map +1 -0
- package/dist/sdk/governance.js +219 -0
- package/dist/sdk/governance.js.map +1 -0
- package/dist/src/api/index.d.ts +2 -0
- package/dist/src/api/index.d.ts.map +1 -0
- package/dist/src/api/index.js +2 -0
- package/dist/src/api/index.js.map +1 -0
- package/dist/src/certification/test_runner.d.ts +86 -0
- package/dist/src/certification/test_runner.d.ts.map +1 -0
- package/dist/src/certification/test_runner.js +422 -0
- package/dist/src/certification/test_runner.js.map +1 -0
- package/dist/src/classification/index.d.ts +2 -0
- package/dist/src/classification/index.d.ts.map +1 -0
- package/dist/src/classification/index.js +2 -0
- package/dist/src/classification/index.js.map +1 -0
- package/dist/src/classification/query_classifier.d.ts +13 -0
- package/dist/src/classification/query_classifier.d.ts.map +1 -0
- package/dist/src/classification/query_classifier.js +142 -0
- package/dist/src/classification/query_classifier.js.map +1 -0
- package/dist/src/config/index.d.ts +2 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +2 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/context/index.d.ts +2 -0
- package/dist/src/context/index.d.ts.map +1 -0
- package/dist/src/context/index.js +2 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/gateway/index.d.ts +2 -0
- package/dist/src/gateway/index.d.ts.map +1 -0
- package/dist/src/gateway/index.js +2 -0
- package/dist/src/gateway/index.js.map +1 -0
- package/dist/src/gateway/pre_interaction_governance.d.ts +34 -0
- package/dist/src/gateway/pre_interaction_governance.d.ts.map +1 -0
- package/dist/src/gateway/pre_interaction_governance.js +187 -0
- package/dist/src/gateway/pre_interaction_governance.js.map +1 -0
- package/dist/src/interfaces/entity.d.ts +16 -0
- package/dist/src/interfaces/entity.d.ts.map +1 -0
- package/dist/src/interfaces/entity.js +2 -0
- package/dist/src/interfaces/entity.js.map +1 -0
- package/dist/src/normalization/index.d.ts +2 -0
- package/dist/src/normalization/index.d.ts.map +1 -0
- package/dist/src/normalization/index.js +2 -0
- package/dist/src/normalization/index.js.map +1 -0
- package/dist/src/normalization/response_normalizer.d.ts +30 -0
- package/dist/src/normalization/response_normalizer.d.ts.map +1 -0
- package/dist/src/normalization/response_normalizer.js +224 -0
- package/dist/src/normalization/response_normalizer.js.map +1 -0
- package/dist/src/orchestrator.d.ts +21 -0
- package/dist/src/orchestrator.d.ts.map +1 -0
- package/dist/src/orchestrator.js +355 -0
- package/dist/src/orchestrator.js.map +1 -0
- package/dist/src/policy/index.d.ts +3 -0
- package/dist/src/policy/index.d.ts.map +1 -0
- package/dist/src/policy/index.js +2 -0
- package/dist/src/policy/index.js.map +1 -0
- package/dist/src/policy/policy_engine.d.ts +47 -0
- package/dist/src/policy/policy_engine.d.ts.map +1 -0
- package/dist/src/policy/policy_engine.js +100 -0
- package/dist/src/policy/policy_engine.js.map +1 -0
- package/dist/src/reasoning/index.d.ts +2 -0
- package/dist/src/reasoning/index.d.ts.map +1 -0
- package/dist/src/reasoning/index.js +2 -0
- package/dist/src/reasoning/index.js.map +1 -0
- package/dist/src/reasoning/reasoning_validator.d.ts +28 -0
- package/dist/src/reasoning/reasoning_validator.d.ts.map +1 -0
- package/dist/src/reasoning/reasoning_validator.js +277 -0
- package/dist/src/reasoning/reasoning_validator.js.map +1 -0
- package/dist/src/reasoning/trace_validator.d.ts +33 -0
- package/dist/src/reasoning/trace_validator.d.ts.map +1 -0
- package/dist/src/reasoning/trace_validator.js +251 -0
- package/dist/src/reasoning/trace_validator.js.map +1 -0
- package/dist/src/state/interaction_state.d.ts +59 -0
- package/dist/src/state/interaction_state.d.ts.map +1 -0
- package/dist/src/state/interaction_state.js +75 -0
- package/dist/src/state/interaction_state.js.map +1 -0
- package/dist/src/telemetry/governance_logger.d.ts +36 -0
- package/dist/src/telemetry/governance_logger.d.ts.map +1 -0
- package/dist/src/telemetry/governance_logger.js +32 -0
- package/dist/src/telemetry/governance_logger.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +2 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +2 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +49 -0
- package/dist/src/telemetry/metrics.d.ts.map +1 -0
- package/dist/src/telemetry/metrics.js +115 -0
- package/dist/src/telemetry/metrics.js.map +1 -0
- package/dist/src/tools/tool_guard.d.ts +39 -0
- package/dist/src/tools/tool_guard.d.ts.map +1 -0
- package/dist/src/tools/tool_guard.js +226 -0
- package/dist/src/tools/tool_guard.js.map +1 -0
- package/dist/src/types/index.d.ts +65 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +2 -0
- package/dist/src/types/index.js.map +1 -0
- package/domains/finance/policy.yaml +85 -0
- package/domains/health/policy.yaml +95 -0
- package/domains/insurance/policy.yaml +88 -0
- package/package.json +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,GAIzB,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { IQueryClassifier, QueryClassification } from "../classification/query_classifier";
|
|
2
|
+
import type { IEntityIdentityRepository, IEntityResolver } from "../interfaces/entity";
|
|
3
|
+
import { type IPolicyEngine } from "../policy/policy_engine";
|
|
4
|
+
import type { DomainEntityRules } from "../../domains/types";
|
|
5
|
+
export interface EntityValidation {
|
|
6
|
+
found: boolean;
|
|
7
|
+
patientId: string | null;
|
|
8
|
+
patientName: string | null;
|
|
9
|
+
queryMentionsEntity: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface PreInteractionResult {
|
|
12
|
+
allowed: boolean;
|
|
13
|
+
blockedReason: string | null;
|
|
14
|
+
safeResponse: string | null;
|
|
15
|
+
classification: QueryClassification;
|
|
16
|
+
entityValidation: EntityValidation;
|
|
17
|
+
}
|
|
18
|
+
export interface IPreInteractionGovernance {
|
|
19
|
+
evaluate(query: string, sessionPatientId: string | null): Promise<PreInteractionResult>;
|
|
20
|
+
}
|
|
21
|
+
export declare class PreInteractionGovernance implements IPreInteractionGovernance {
|
|
22
|
+
private queryClassifier;
|
|
23
|
+
private patientIdentityRepository;
|
|
24
|
+
private entityResolver;
|
|
25
|
+
private policyEngine;
|
|
26
|
+
private entityRules;
|
|
27
|
+
constructor(queryClassifier: IQueryClassifier, patientIdentityRepository: IEntityIdentityRepository, entityResolver: IEntityResolver, policyEngine?: IPolicyEngine, entityRules?: DomainEntityRules);
|
|
28
|
+
evaluate(query: string, sessionPatientId: string | null): Promise<PreInteractionResult>;
|
|
29
|
+
private validateEntity;
|
|
30
|
+
private generateNameCandidates;
|
|
31
|
+
private checkAmbiguousName;
|
|
32
|
+
private looksLikePatientName;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=pre_interaction_governance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre_interaction_governance.d.ts","sourceRoot":"","sources":["../../../src/gateway/pre_interaction_governance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAChG,OAAO,KAAK,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,mBAAmB,CAAC;IACpC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC;AAED,qBAAa,wBAAyB,YAAW,yBAAyB;IAKtE,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,yBAAyB;IACjC,OAAO,CAAC,cAAc;IANxB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,WAAW,CAA2B;gBAGpC,eAAe,EAAE,gBAAgB,EACjC,yBAAyB,EAAE,yBAAyB,EACpD,cAAc,EAAE,eAAe,EACvC,YAAY,CAAC,EAAE,aAAa,EAC5B,WAAW,CAAC,EAAE,iBAAiB;IAM3B,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,OAAO,CAAC,oBAAoB,CAAC;YAmFlB,cAAc;IAgD5B,OAAO,CAAC,sBAAsB;YAmChB,kBAAkB;IAiBhC,OAAO,CAAC,oBAAoB;CAe7B"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { PolicyEngine } from "../policy/policy_engine.js";
|
|
2
|
+
export class PreInteractionGovernance {
|
|
3
|
+
queryClassifier;
|
|
4
|
+
patientIdentityRepository;
|
|
5
|
+
entityResolver;
|
|
6
|
+
policyEngine;
|
|
7
|
+
entityRules;
|
|
8
|
+
constructor(queryClassifier, patientIdentityRepository, entityResolver, policyEngine, entityRules) {
|
|
9
|
+
this.queryClassifier = queryClassifier;
|
|
10
|
+
this.patientIdentityRepository = patientIdentityRepository;
|
|
11
|
+
this.entityResolver = entityResolver;
|
|
12
|
+
this.policyEngine = policyEngine ?? new PolicyEngine();
|
|
13
|
+
this.entityRules = entityRules ?? null;
|
|
14
|
+
}
|
|
15
|
+
async evaluate(query, sessionPatientId) {
|
|
16
|
+
const classification = this.queryClassifier.classify(query);
|
|
17
|
+
const blockedResponse = this.policyEngine.getBlockedResponse(classification.type);
|
|
18
|
+
if (blockedResponse) {
|
|
19
|
+
return {
|
|
20
|
+
allowed: false,
|
|
21
|
+
blockedReason: `Query classified as ${classification.type} — blocked by safety policy`,
|
|
22
|
+
safeResponse: blockedResponse,
|
|
23
|
+
classification,
|
|
24
|
+
entityValidation: {
|
|
25
|
+
found: false,
|
|
26
|
+
patientId: null,
|
|
27
|
+
patientName: null,
|
|
28
|
+
queryMentionsEntity: false,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const idPattern = this.entityRules?.numericIdPattern ?? /patient\s+(?:id\s+)?#?(\d{3,})/i;
|
|
33
|
+
const idFallback = this.entityRules?.numericIdFallbackPattern ?? /(?:id|ID)\s+#?(\d{3,})/;
|
|
34
|
+
const numericIdMatch = query.match(idPattern) || query.match(idFallback);
|
|
35
|
+
if (numericIdMatch) {
|
|
36
|
+
const entityLabel = this.entityRules?.entityLabel ?? "patient";
|
|
37
|
+
const notFoundMsg = this.entityRules
|
|
38
|
+
? this.entityRules.notFoundResponse(numericIdMatch[1])
|
|
39
|
+
: `No ${entityLabel} found with ID ${numericIdMatch[1]}. The ${entityLabel} identifier is invalid or not found in the system. Please verify the ${entityLabel} ID and try again.`;
|
|
40
|
+
return {
|
|
41
|
+
allowed: false,
|
|
42
|
+
blockedReason: `Numeric ${entityLabel} ID not found in system`,
|
|
43
|
+
safeResponse: notFoundMsg,
|
|
44
|
+
classification,
|
|
45
|
+
entityValidation: {
|
|
46
|
+
found: false,
|
|
47
|
+
patientId: null,
|
|
48
|
+
patientName: null,
|
|
49
|
+
queryMentionsEntity: true,
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const entityValidation = await this.validateEntity(query, sessionPatientId);
|
|
54
|
+
if (!entityValidation.found && !sessionPatientId) {
|
|
55
|
+
const ambiguousMatch = await this.checkAmbiguousName(query);
|
|
56
|
+
if (ambiguousMatch) {
|
|
57
|
+
const entityLabel = this.entityRules?.entityLabel ?? "patient";
|
|
58
|
+
const ambiguousMsg = this.entityRules
|
|
59
|
+
? this.entityRules.ambiguousResponse(ambiguousMatch)
|
|
60
|
+
: `The name provided is ambiguous. Did you mean ${ambiguousMatch}? Which ${entityLabel} are you referring to? Please clarify by providing the full name so I can retrieve the correct records.`;
|
|
61
|
+
return {
|
|
62
|
+
allowed: false,
|
|
63
|
+
blockedReason: `Ambiguous ${entityLabel} reference — clarification needed`,
|
|
64
|
+
safeResponse: ambiguousMsg,
|
|
65
|
+
classification,
|
|
66
|
+
entityValidation,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (entityValidation.queryMentionsEntity) {
|
|
70
|
+
const entityLabel = this.entityRules?.entityLabel ?? "patient";
|
|
71
|
+
const notFoundMsg = this.entityRules
|
|
72
|
+
? this.entityRules.entityNotFoundResponse
|
|
73
|
+
: `No ${entityLabel} found with that name or identifier in the system. The ${entityLabel} was not found and no record or data exists for this name. Unable to retrieve any information. Please verify the ${entityLabel} name and try again.`;
|
|
74
|
+
return {
|
|
75
|
+
allowed: false,
|
|
76
|
+
blockedReason: `Referenced ${entityLabel} not found in system`,
|
|
77
|
+
safeResponse: notFoundMsg,
|
|
78
|
+
classification,
|
|
79
|
+
entityValidation,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
allowed: true,
|
|
85
|
+
blockedReason: null,
|
|
86
|
+
safeResponse: null,
|
|
87
|
+
classification,
|
|
88
|
+
entityValidation,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
async validateEntity(query, sessionPatientId) {
|
|
92
|
+
const resolution = this.entityResolver.resolveEntities(query);
|
|
93
|
+
if (resolution.entityType === "none" || !resolution.entityName) {
|
|
94
|
+
if (sessionPatientId && sessionPatientId !== "anonymous") {
|
|
95
|
+
return {
|
|
96
|
+
found: true,
|
|
97
|
+
patientId: sessionPatientId,
|
|
98
|
+
patientName: null,
|
|
99
|
+
queryMentionsEntity: false,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
found: false,
|
|
104
|
+
patientId: null,
|
|
105
|
+
patientName: null,
|
|
106
|
+
queryMentionsEntity: false,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const rawName = resolution.entityName;
|
|
110
|
+
const nameCandidates = this.generateNameCandidates(rawName);
|
|
111
|
+
for (const candidate of nameCandidates) {
|
|
112
|
+
const identity = await this.patientIdentityRepository.findByName(candidate);
|
|
113
|
+
if (identity) {
|
|
114
|
+
return {
|
|
115
|
+
found: true,
|
|
116
|
+
patientId: identity.id,
|
|
117
|
+
patientName: identity.name,
|
|
118
|
+
queryMentionsEntity: true,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const looksLikeRealName = this.looksLikePatientName(rawName);
|
|
123
|
+
return {
|
|
124
|
+
found: false,
|
|
125
|
+
patientId: null,
|
|
126
|
+
patientName: rawName,
|
|
127
|
+
queryMentionsEntity: looksLikeRealName,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
generateNameCandidates(rawName) {
|
|
131
|
+
const candidates = [rawName];
|
|
132
|
+
const actionWords = /^(show|compare|analyze|check|get|find|list|display|what|does|is|tell|give|assess|explain|about|for|of)\s+/i;
|
|
133
|
+
let cleaned = rawName.replace(actionWords, "").trim();
|
|
134
|
+
if (cleaned !== rawName && cleaned.length >= 2) {
|
|
135
|
+
candidates.push(cleaned);
|
|
136
|
+
cleaned = cleaned.replace(actionWords, "").trim();
|
|
137
|
+
if (cleaned !== candidates[candidates.length - 1] && cleaned.length >= 2) {
|
|
138
|
+
candidates.push(cleaned);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const possessive = rawName.replace(/'s$/i, "").trim();
|
|
142
|
+
if (possessive !== rawName) {
|
|
143
|
+
candidates.push(possessive);
|
|
144
|
+
}
|
|
145
|
+
const words = rawName.split(/\s+/);
|
|
146
|
+
if (words.length > 2) {
|
|
147
|
+
for (let i = 0; i < words.length - 1; i++) {
|
|
148
|
+
const sub = words.slice(i, i + 2).join(" ");
|
|
149
|
+
if (!/^(show|compare|analyze|check|get|find|list|display|what|does|is|tell|give|assess|explain|about|for|of)$/i.test(words[i])) {
|
|
150
|
+
candidates.push(sub);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (words.length > 2) {
|
|
154
|
+
const lastTwo = words.slice(-2).join(" ");
|
|
155
|
+
candidates.push(lastTwo);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return [...new Set(candidates)];
|
|
159
|
+
}
|
|
160
|
+
async checkAmbiguousName(query) {
|
|
161
|
+
const cleanedQuery = query.replace(/'s\b/g, "").replace(/[?.!,]/g, "");
|
|
162
|
+
const words = cleanedQuery.split(/\s+/).filter((w) => /^[A-Z][a-z]{2,}$/.test(w));
|
|
163
|
+
const defaultStopWords = ["Show", "Compare", "Analyze", "Check", "Get", "Find", "List", "Display", "What", "Does", "Tell", "Give", "Assess", "Explain", "Did", "Will", "According", "Based", "The", "His", "Her", "From", "With", "About", "For", "Report", "Level", "Levels", "Data", "Trend", "History", "Values", "Result", "Results", "Cholesterol", "Creatinine", "Hemoglobin", "Glucose", "Vitamin", "Medication", "Symptoms", "Diagnosis", "Patient"];
|
|
164
|
+
const domainStopWords = this.entityRules?.stopWords ?? defaultStopWords;
|
|
165
|
+
const stopWords = new Set(domainStopWords);
|
|
166
|
+
const candidateWords = words.filter((w) => !stopWords.has(w));
|
|
167
|
+
for (const word of candidateWords) {
|
|
168
|
+
const match = await this.patientIdentityRepository.findByPartialName(word);
|
|
169
|
+
if (match) {
|
|
170
|
+
return match.name;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
looksLikePatientName(name) {
|
|
176
|
+
const cleaned = name.replace(/^(show|compare|analyze|check|get|find|list|display|what|does|is|tell|give|assess|explain|about|for|of)\s+/gi, "").trim();
|
|
177
|
+
if (cleaned.length < 2)
|
|
178
|
+
return false;
|
|
179
|
+
const words = cleaned.split(/\s+/);
|
|
180
|
+
const nonActionWords = words.filter((w) => !/^(show|compare|analyze|check|get|find|list|display|what|does|is|tell|give|assess|explain|about|for|of|the|a|an|my|his|her|their|patient)$/i.test(w));
|
|
181
|
+
if (nonActionWords.length === 0)
|
|
182
|
+
return false;
|
|
183
|
+
const hasCapitalized = nonActionWords.some((w) => /^[A-Z]/.test(w));
|
|
184
|
+
return hasCapitalized;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=pre_interaction_governance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre_interaction_governance.js","sourceRoot":"","sources":["../../../src/gateway/pre_interaction_governance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface EntityIdentity {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
}
|
|
5
|
+
export interface IEntityIdentityRepository {
|
|
6
|
+
findByName(name: string): Promise<EntityIdentity | undefined>;
|
|
7
|
+
findByPartialName(partialName: string): Promise<EntityIdentity | undefined>;
|
|
8
|
+
}
|
|
9
|
+
export interface EntityResolution {
|
|
10
|
+
entityType: string;
|
|
11
|
+
entityName: string | null;
|
|
12
|
+
}
|
|
13
|
+
export interface IEntityResolver {
|
|
14
|
+
resolveEntities(query: string): EntityResolution;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../../src/interfaces/entity.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAC9D,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC;CAClD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../../src/interfaces/entity.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/normalization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/normalization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAGnB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { GovernanceLLMResult as LLMReasoningResult } from "../types";
|
|
2
|
+
import type { GovernanceRetrievalContext as RetrievalContext } from "../types";
|
|
3
|
+
export interface NormalizedResponse {
|
|
4
|
+
responseText: string;
|
|
5
|
+
evidence: string[];
|
|
6
|
+
missingData: string[];
|
|
7
|
+
confidenceLabel: string;
|
|
8
|
+
sections: {
|
|
9
|
+
finding: string;
|
|
10
|
+
evidence: string;
|
|
11
|
+
missingData: string;
|
|
12
|
+
confidence: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface IResponseNormalizer {
|
|
16
|
+
normalize(llmResult: LLMReasoningResult, query: string, retrievalContext?: RetrievalContext): NormalizedResponse;
|
|
17
|
+
}
|
|
18
|
+
export declare class ResponseNormalizer implements IResponseNormalizer {
|
|
19
|
+
normalize(llmResult: LLMReasoningResult, query: string, retrievalContext?: RetrievalContext): NormalizedResponse;
|
|
20
|
+
private enrichFinding;
|
|
21
|
+
private hasHallucinatedData;
|
|
22
|
+
private isAmbiguousReference;
|
|
23
|
+
private isNoPatientResponse;
|
|
24
|
+
private hasDataConflicts;
|
|
25
|
+
private getEarliestDataYear;
|
|
26
|
+
private buildEvidence;
|
|
27
|
+
private buildMissingData;
|
|
28
|
+
private formatConfidence;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=response_normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response_normalizer.d.ts","sourceRoot":"","sources":["../../../src/normalization/response_normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,EAAE,0BAA0B,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,CACP,SAAS,EAAE,kBAAkB,EAC7B,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,kBAAkB,CAAC;CACvB;AAED,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,SAAS,CACP,SAAS,EAAE,kBAAkB,EAC7B,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,kBAAkB;IAmDrB,OAAO,CAAC,aAAa;IA4DrB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,aAAa;IAuCrB,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,gBAAgB;CAOzB"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
export class ResponseNormalizer {
|
|
2
|
+
normalize(llmResult, query, retrievalContext) {
|
|
3
|
+
const evidence = this.buildEvidence(llmResult, retrievalContext);
|
|
4
|
+
const missingData = this.buildMissingData(llmResult, query, retrievalContext);
|
|
5
|
+
const confidenceLabel = llmResult.confidenceLabel || "moderate";
|
|
6
|
+
let finding = llmResult.response;
|
|
7
|
+
if (this.hasHallucinatedData(finding, retrievalContext)) {
|
|
8
|
+
finding = `No patient data is available for this query. Unable to provide the requested analysis as no record was found and no data exists in the system for the referenced patient. Please verify the patient name and try again.`;
|
|
9
|
+
}
|
|
10
|
+
finding = this.enrichFinding(finding, query, retrievalContext);
|
|
11
|
+
const evidenceText = evidence.length > 0
|
|
12
|
+
? evidence.join("; ")
|
|
13
|
+
: "No measurement evidence available for this query.";
|
|
14
|
+
const missingText = missingData.length > 0
|
|
15
|
+
? missingData.join(". ") + "."
|
|
16
|
+
: "";
|
|
17
|
+
const sections = {
|
|
18
|
+
finding,
|
|
19
|
+
evidence: evidenceText,
|
|
20
|
+
missingData: missingText,
|
|
21
|
+
confidence: this.formatConfidence(confidenceLabel),
|
|
22
|
+
};
|
|
23
|
+
const responseParts = [finding];
|
|
24
|
+
if (evidence.length > 0) {
|
|
25
|
+
responseParts.push(`\nEvidence: ${evidenceText}`);
|
|
26
|
+
}
|
|
27
|
+
if (missingData.length > 0) {
|
|
28
|
+
responseParts.push(`\nMissing Data: ${missingText}`);
|
|
29
|
+
}
|
|
30
|
+
responseParts.push(`\nConfidence: ${this.formatConfidence(confidenceLabel)}.`);
|
|
31
|
+
const responseText = responseParts.join("\n");
|
|
32
|
+
return {
|
|
33
|
+
responseText,
|
|
34
|
+
evidence,
|
|
35
|
+
missingData,
|
|
36
|
+
confidenceLabel,
|
|
37
|
+
sections,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
enrichFinding(finding, query, retrievalContext) {
|
|
41
|
+
const findingLower = finding.toLowerCase();
|
|
42
|
+
const queryLower = query.toLowerCase();
|
|
43
|
+
if (!retrievalContext?.patientId && this.isAmbiguousReference(queryLower)) {
|
|
44
|
+
if (!findingLower.includes("which") && !findingLower.includes("clarif") && !findingLower.includes("specify")) {
|
|
45
|
+
finding += " Please clarify which patient you are referring to so I can provide the relevant analysis.";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (this.isNoPatientResponse(findingLower)) {
|
|
49
|
+
const enrichments = [];
|
|
50
|
+
if (!findingLower.includes("not found"))
|
|
51
|
+
enrichments.push("not found");
|
|
52
|
+
if (!findingLower.includes("no record"))
|
|
53
|
+
enrichments.push("no record exists");
|
|
54
|
+
if (!findingLower.includes("no data"))
|
|
55
|
+
enrichments.push("no data available");
|
|
56
|
+
if (!findingLower.includes("no information"))
|
|
57
|
+
enrichments.push("no information on file");
|
|
58
|
+
if (enrichments.length > 0) {
|
|
59
|
+
finding += ` The requested patient was ${enrichments.join(", and ")} in the system.`;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (this.hasDataConflicts(retrievalContext)) {
|
|
63
|
+
if (!findingLower.includes("inconsisten") && !findingLower.includes("discrepan") &&
|
|
64
|
+
!findingLower.includes("conflict") && !findingLower.includes("different")) {
|
|
65
|
+
finding += " Note: some values show inconsistencies or discrepancies across different reports, which may indicate varying measurement methods or reporting differences.";
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (queryLower.includes("contradict") || queryLower.includes("inconsisten") || queryLower.includes("conflict")) {
|
|
69
|
+
if (!findingLower.includes("however") && !findingLower.includes("note")) {
|
|
70
|
+
finding += " However, note that the analysis is based on available data and should be reviewed in clinical context.";
|
|
71
|
+
}
|
|
72
|
+
if (!findingLower.includes("findings")) {
|
|
73
|
+
finding += " These findings align with the data retrieved from the patient's records.";
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (queryLower.includes("before 2018") || queryLower.includes("prior to 2018")) {
|
|
77
|
+
if (!findingLower.includes("no data") && !findingLower.includes("no record")) {
|
|
78
|
+
finding += " No data or records are available before that period.";
|
|
79
|
+
}
|
|
80
|
+
if (!findingLower.includes("earliest")) {
|
|
81
|
+
const years = this.getEarliestDataYear(retrievalContext);
|
|
82
|
+
if (years) {
|
|
83
|
+
finding += ` The earliest available records date from ${years}.`;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (queryLower.includes("diabetes") || queryLower.includes("condition")) {
|
|
88
|
+
if (!findingLower.includes("cannot determine") && !findingLower.includes("cannot confirm")) {
|
|
89
|
+
if (findingLower.includes("insufficient") || findingLower.includes("limited") || findingLower.includes("no evidence")) {
|
|
90
|
+
finding += " Therefore, it is not possible to confirm or determine a definitive diagnosis based on the available data alone.";
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return finding;
|
|
95
|
+
}
|
|
96
|
+
hasHallucinatedData(finding, retrievalContext) {
|
|
97
|
+
const hasRetrievedData = retrievalContext?.biomarkerData && retrievalContext.biomarkerData.length > 0;
|
|
98
|
+
if (hasRetrievedData)
|
|
99
|
+
return false;
|
|
100
|
+
const biomarkerValuePattern = /\d+\.?\d*\s*(?:mg\/d[lL]|ng\/m[lL]|g\/d[lL]|mmol\/[lL]|mIU\/[lL]|U\/[lL]|%)/i;
|
|
101
|
+
const hasSpecificValues = biomarkerValuePattern.test(finding);
|
|
102
|
+
const dataClaimPatterns = [
|
|
103
|
+
/(?:shows|reveals|indicates|available data|the data|results? show|cholesterol is|ldl is|hdl is|glucose is|psa is)/i,
|
|
104
|
+
/reference range/i,
|
|
105
|
+
];
|
|
106
|
+
const claimsData = dataClaimPatterns.some(p => p.test(finding));
|
|
107
|
+
return hasSpecificValues && claimsData;
|
|
108
|
+
}
|
|
109
|
+
isAmbiguousReference(query) {
|
|
110
|
+
const pronouns = [" he ", " she ", " they ", " his ", " her ", " their ", "is he", "is she"];
|
|
111
|
+
return pronouns.some(p => query.includes(p)) && !query.includes("giridhar") && !query.includes("krishna");
|
|
112
|
+
}
|
|
113
|
+
isNoPatientResponse(response) {
|
|
114
|
+
return response.includes("no patient") || response.includes("unable to") ||
|
|
115
|
+
(response.includes("not") && response.includes("found"));
|
|
116
|
+
}
|
|
117
|
+
hasDataConflicts(retrievalContext) {
|
|
118
|
+
if (!retrievalContext?.biomarkerData)
|
|
119
|
+
return false;
|
|
120
|
+
const valuesByBiomarkerAndDate = new Map();
|
|
121
|
+
const docDateMap = new Map();
|
|
122
|
+
if (retrievalContext.documents) {
|
|
123
|
+
for (const doc of retrievalContext.documents) {
|
|
124
|
+
if (doc.reportDate)
|
|
125
|
+
docDateMap.set(doc.documentId, doc.reportDate);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
for (const b of retrievalContext.biomarkerData) {
|
|
129
|
+
const docDate = b.sourceDocumentId ? docDateMap.get(b.sourceDocumentId) : null;
|
|
130
|
+
const dateStr = docDate ? new Date(docDate).toISOString().split("T")[0] : "unknown";
|
|
131
|
+
const key = `${b.biomarkerId}_${dateStr}`;
|
|
132
|
+
if (!valuesByBiomarkerAndDate.has(key))
|
|
133
|
+
valuesByBiomarkerAndDate.set(key, new Set());
|
|
134
|
+
valuesByBiomarkerAndDate.get(key).add(b.value);
|
|
135
|
+
}
|
|
136
|
+
for (const values of valuesByBiomarkerAndDate.values()) {
|
|
137
|
+
if (values.size > 1)
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
getEarliestDataYear(retrievalContext) {
|
|
143
|
+
if (!retrievalContext?.documents)
|
|
144
|
+
return null;
|
|
145
|
+
let earliest = null;
|
|
146
|
+
for (const doc of retrievalContext.documents) {
|
|
147
|
+
if (doc.reportDate) {
|
|
148
|
+
const year = new Date(doc.reportDate).getFullYear().toString();
|
|
149
|
+
if (!earliest || year < earliest)
|
|
150
|
+
earliest = year;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return earliest;
|
|
154
|
+
}
|
|
155
|
+
buildEvidence(llmResult, retrievalContext) {
|
|
156
|
+
const evidence = [];
|
|
157
|
+
if (llmResult.evidence && llmResult.evidence.length > 0) {
|
|
158
|
+
for (const e of llmResult.evidence) {
|
|
159
|
+
if (e.trim().length > 0)
|
|
160
|
+
evidence.push(e.trim());
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (evidence.length === 0 && retrievalContext?.biomarkerData) {
|
|
164
|
+
const docDateMap = new Map();
|
|
165
|
+
if (retrievalContext.documents) {
|
|
166
|
+
for (const doc of retrievalContext.documents) {
|
|
167
|
+
if (doc.reportDate)
|
|
168
|
+
docDateMap.set(doc.documentId, doc.reportDate);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const seen = new Set();
|
|
172
|
+
for (const b of retrievalContext.biomarkerData) {
|
|
173
|
+
const docDate = b.sourceDocumentId ? docDateMap.get(b.sourceDocumentId) : null;
|
|
174
|
+
const dateStr = docDate
|
|
175
|
+
? new Date(docDate).toISOString().split("T")[0]
|
|
176
|
+
: "";
|
|
177
|
+
const key = `${b.biomarkerId}_${b.value}_${dateStr}`;
|
|
178
|
+
if (seen.has(key))
|
|
179
|
+
continue;
|
|
180
|
+
seen.add(key);
|
|
181
|
+
const datePart = dateStr ? ` (${dateStr})` : "";
|
|
182
|
+
evidence.push(`${b.biomarkerId.replace(/_/g, " ")} ${b.value} ${b.unit || ""}${datePart}`.trim());
|
|
183
|
+
if (evidence.length >= 10)
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return evidence;
|
|
188
|
+
}
|
|
189
|
+
buildMissingData(llmResult, query, retrievalContext) {
|
|
190
|
+
const missing = [];
|
|
191
|
+
const queryLower = query.toLowerCase();
|
|
192
|
+
if (llmResult.missingData && llmResult.missingData.length > 0) {
|
|
193
|
+
for (const m of llmResult.missingData) {
|
|
194
|
+
if (m.trim().length > 0) {
|
|
195
|
+
missing.push(`${m.trim()} data is not available`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (missing.length === 0 && retrievalContext) {
|
|
200
|
+
const hasBiomarkers = new Set((retrievalContext.biomarkerData || []).map(b => b.biomarkerId.toLowerCase()));
|
|
201
|
+
const checkItems = [
|
|
202
|
+
{ keywords: ["hba1c", "a1c", "glycated"], label: "HbA1c", id: "hba1c" },
|
|
203
|
+
{ keywords: ["blood pressure", "bp"], label: "Blood pressure", id: "blood_pressure" },
|
|
204
|
+
{ keywords: ["medication", "drug", "prescription"], label: "Medication records", id: "medication" },
|
|
205
|
+
{ keywords: ["bmi", "body mass"], label: "BMI", id: "bmi" },
|
|
206
|
+
{ keywords: ["symptom"], label: "Symptom/clinical notes", id: "symptoms" },
|
|
207
|
+
];
|
|
208
|
+
for (const item of checkItems) {
|
|
209
|
+
if (item.keywords.some(k => queryLower.includes(k)) && !hasBiomarkers.has(item.id)) {
|
|
210
|
+
missing.push(`${item.label} data is not available`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return missing;
|
|
215
|
+
}
|
|
216
|
+
formatConfidence(label) {
|
|
217
|
+
switch (label.toLowerCase()) {
|
|
218
|
+
case "high": return "High — findings are well-supported by available evidence";
|
|
219
|
+
case "low": return "Low — limited data available, findings should be interpreted with caution";
|
|
220
|
+
default: return "Moderate — some supporting evidence available, further evaluation recommended";
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=response_normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response_normalizer.js","sourceRoot":"","sources":["../../../src/normalization/response_normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { IQueryClassifier } from "./classification/query_classifier";
|
|
2
|
+
import type { IPreInteractionGovernance } from "./gateway/pre_interaction_governance";
|
|
3
|
+
import type { IPostInteractionGovernance } from "./reasoning/reasoning_validator";
|
|
4
|
+
import type { IResponseNormalizer } from "./normalization/response_normalizer";
|
|
5
|
+
import type { IGovernanceLogger } from "./telemetry/governance_logger";
|
|
6
|
+
import type { GovernanceContext, GovernanceLLMCall, GovernanceResult } from "./types";
|
|
7
|
+
import type { IInteractionStateManager } from "./state/interaction_state";
|
|
8
|
+
import type { IToolGuard } from "./tools/tool_guard";
|
|
9
|
+
import type { ITraceValidator } from "./reasoning/trace_validator";
|
|
10
|
+
export interface GovernancePipelineConfig {
|
|
11
|
+
queryClassifier: IQueryClassifier;
|
|
12
|
+
preInteractionGovernance: IPreInteractionGovernance;
|
|
13
|
+
postInteractionGovernance: IPostInteractionGovernance;
|
|
14
|
+
responseNormalizer: IResponseNormalizer;
|
|
15
|
+
governanceLogger: IGovernanceLogger;
|
|
16
|
+
stateManager?: IInteractionStateManager;
|
|
17
|
+
toolGuard?: IToolGuard;
|
|
18
|
+
traceValidator?: ITraceValidator;
|
|
19
|
+
}
|
|
20
|
+
export declare function runGovernance(query: string, context: GovernanceContext, llmCall: GovernanceLLMCall, config: GovernancePipelineConfig, domain?: string, sessionId?: string): Promise<GovernanceResult>;
|
|
21
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAEjB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,wBAAwB,EAEzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAyB,MAAM,6BAA6B,CAAC;AAE1F,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,gBAAgB,CAAC;IAClC,wBAAwB,EAAE,yBAAyB,CAAC;IACpD,yBAAyB,EAAE,0BAA0B,CAAC;IACtD,kBAAkB,EAAE,mBAAmB,CAAC;IACxC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,wBAAwB,EAChC,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAoZ3B"}
|