@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,59 @@
|
|
|
1
|
+
import type { QueryClassification } from "../classification/query_classifier";
|
|
2
|
+
export interface GovernanceDecisionRecord {
|
|
3
|
+
timestamp: string;
|
|
4
|
+
query: string;
|
|
5
|
+
outcome: "allowed" | "pre_blocked" | "post_blocked";
|
|
6
|
+
blockedReason: string | null;
|
|
7
|
+
classification: QueryClassification;
|
|
8
|
+
domain: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ReferencedEntity {
|
|
11
|
+
entityId: string | null;
|
|
12
|
+
entityName: string | null;
|
|
13
|
+
firstReferencedAt: string;
|
|
14
|
+
lastReferencedAt: string;
|
|
15
|
+
referenceCount: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ConversationEntry {
|
|
18
|
+
timestamp: string;
|
|
19
|
+
role: "user" | "governance";
|
|
20
|
+
content: string;
|
|
21
|
+
blocked: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface InteractionSessionState {
|
|
24
|
+
sessionId: string;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
lastActivityAt: string;
|
|
27
|
+
domain: string;
|
|
28
|
+
turnCount: number;
|
|
29
|
+
referencedEntities: Map<string, ReferencedEntity>;
|
|
30
|
+
governanceDecisions: GovernanceDecisionRecord[];
|
|
31
|
+
conversationHistory: ConversationEntry[];
|
|
32
|
+
}
|
|
33
|
+
export interface SessionStateUpdate {
|
|
34
|
+
domain?: string;
|
|
35
|
+
entity?: {
|
|
36
|
+
entityId: string | null;
|
|
37
|
+
entityName: string | null;
|
|
38
|
+
};
|
|
39
|
+
governanceDecision?: GovernanceDecisionRecord;
|
|
40
|
+
conversationEntry?: ConversationEntry;
|
|
41
|
+
}
|
|
42
|
+
export interface IInteractionStateManager {
|
|
43
|
+
createSession(sessionId: string, domain?: string): InteractionSessionState;
|
|
44
|
+
getSessionState(sessionId: string): InteractionSessionState | null;
|
|
45
|
+
updateSessionState(sessionId: string, update: SessionStateUpdate): InteractionSessionState;
|
|
46
|
+
}
|
|
47
|
+
export declare class InteractionStateManager implements IInteractionStateManager {
|
|
48
|
+
private sessions;
|
|
49
|
+
private maxDecisionHistory;
|
|
50
|
+
private maxConversationHistory;
|
|
51
|
+
constructor(options?: {
|
|
52
|
+
maxDecisionHistory?: number;
|
|
53
|
+
maxConversationHistory?: number;
|
|
54
|
+
});
|
|
55
|
+
createSession(sessionId: string, domain?: string): InteractionSessionState;
|
|
56
|
+
getSessionState(sessionId: string): InteractionSessionState | null;
|
|
57
|
+
updateSessionState(sessionId: string, update: SessionStateUpdate): InteractionSessionState;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=interaction_state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction_state.d.ts","sourceRoot":"","sources":["../../../src/state/interaction_state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,GAAG,aAAa,GAAG,cAAc,CAAC;IACpD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,mBAAmB,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAClD,mBAAmB,EAAE,wBAAwB,EAAE,CAAC;IAChD,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,CAAC;IACF,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,uBAAuB,CAAC;IAC3E,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAAC;IACnE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,uBAAuB,CAAC;CAC5F;AAED,qBAAa,uBAAwB,YAAW,wBAAwB;IACtE,OAAO,CAAC,QAAQ,CAAmD;IACnE,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,sBAAsB,CAAS;gBAE3B,OAAO,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,sBAAsB,CAAC,EAAE,MAAM,CAAA;KAAE;IAKtF,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,uBAAuB;IAsB1E,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAIlE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,uBAAuB;CAgD3F"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export class InteractionStateManager {
|
|
2
|
+
sessions = new Map();
|
|
3
|
+
maxDecisionHistory;
|
|
4
|
+
maxConversationHistory;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.maxDecisionHistory = options?.maxDecisionHistory ?? 100;
|
|
7
|
+
this.maxConversationHistory = options?.maxConversationHistory ?? 200;
|
|
8
|
+
}
|
|
9
|
+
createSession(sessionId, domain) {
|
|
10
|
+
const existing = this.sessions.get(sessionId);
|
|
11
|
+
if (existing) {
|
|
12
|
+
return existing;
|
|
13
|
+
}
|
|
14
|
+
const now = new Date().toISOString();
|
|
15
|
+
const session = {
|
|
16
|
+
sessionId,
|
|
17
|
+
createdAt: now,
|
|
18
|
+
lastActivityAt: now,
|
|
19
|
+
domain: domain ?? "health",
|
|
20
|
+
turnCount: 0,
|
|
21
|
+
referencedEntities: new Map(),
|
|
22
|
+
governanceDecisions: [],
|
|
23
|
+
conversationHistory: [],
|
|
24
|
+
};
|
|
25
|
+
this.sessions.set(sessionId, session);
|
|
26
|
+
return session;
|
|
27
|
+
}
|
|
28
|
+
getSessionState(sessionId) {
|
|
29
|
+
return this.sessions.get(sessionId) ?? null;
|
|
30
|
+
}
|
|
31
|
+
updateSessionState(sessionId, update) {
|
|
32
|
+
let session = this.sessions.get(sessionId);
|
|
33
|
+
if (!session) {
|
|
34
|
+
session = this.createSession(sessionId, update.domain);
|
|
35
|
+
}
|
|
36
|
+
session.lastActivityAt = new Date().toISOString();
|
|
37
|
+
if (update.domain) {
|
|
38
|
+
session.domain = update.domain;
|
|
39
|
+
}
|
|
40
|
+
if (update.entity) {
|
|
41
|
+
const key = update.entity.entityId ?? update.entity.entityName ?? "";
|
|
42
|
+
if (key) {
|
|
43
|
+
const existing = session.referencedEntities.get(key);
|
|
44
|
+
if (existing) {
|
|
45
|
+
existing.lastReferencedAt = session.lastActivityAt;
|
|
46
|
+
existing.referenceCount += 1;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
session.referencedEntities.set(key, {
|
|
50
|
+
entityId: update.entity.entityId,
|
|
51
|
+
entityName: update.entity.entityName,
|
|
52
|
+
firstReferencedAt: session.lastActivityAt,
|
|
53
|
+
lastReferencedAt: session.lastActivityAt,
|
|
54
|
+
referenceCount: 1,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (update.governanceDecision) {
|
|
60
|
+
session.governanceDecisions.push(update.governanceDecision);
|
|
61
|
+
if (session.governanceDecisions.length > this.maxDecisionHistory) {
|
|
62
|
+
session.governanceDecisions = session.governanceDecisions.slice(-this.maxDecisionHistory);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (update.conversationEntry) {
|
|
66
|
+
session.conversationHistory.push(update.conversationEntry);
|
|
67
|
+
session.turnCount += 1;
|
|
68
|
+
if (session.conversationHistory.length > this.maxConversationHistory) {
|
|
69
|
+
session.conversationHistory = session.conversationHistory.slice(-this.maxConversationHistory);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return session;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=interaction_state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction_state.js","sourceRoot":"","sources":["../../../src/state/interaction_state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { QueryClassification } from "../classification/query_classifier";
|
|
2
|
+
import type { Violation } from "../reasoning/reasoning_validator";
|
|
3
|
+
export interface GovernanceLogEntry {
|
|
4
|
+
timestamp: string;
|
|
5
|
+
query: string;
|
|
6
|
+
classification: QueryClassification;
|
|
7
|
+
preInteraction: {
|
|
8
|
+
allowed: boolean;
|
|
9
|
+
blockedReason: string | null;
|
|
10
|
+
entityFound: boolean;
|
|
11
|
+
patientId: string | null;
|
|
12
|
+
};
|
|
13
|
+
llmCalled: boolean;
|
|
14
|
+
llmResponseSummary: string | null;
|
|
15
|
+
postInteraction: {
|
|
16
|
+
approved: boolean;
|
|
17
|
+
violations: Violation[];
|
|
18
|
+
} | null;
|
|
19
|
+
finalOutcome: "allowed" | "pre_blocked" | "post_blocked" | "tool_blocked" | "trace_blocked";
|
|
20
|
+
domain: string;
|
|
21
|
+
sessionId: string | null;
|
|
22
|
+
toolGuardBlocked?: number;
|
|
23
|
+
retrievalConfidence?: number | null;
|
|
24
|
+
}
|
|
25
|
+
export interface IGovernanceLogger {
|
|
26
|
+
log(entry: GovernanceLogEntry): void;
|
|
27
|
+
}
|
|
28
|
+
export declare class GovernanceLogger implements IGovernanceLogger {
|
|
29
|
+
private metricsAggregator;
|
|
30
|
+
constructor(metricsAggregator?: IMetricsReceiver);
|
|
31
|
+
log(entry: GovernanceLogEntry): void;
|
|
32
|
+
}
|
|
33
|
+
export interface IMetricsReceiver {
|
|
34
|
+
record(entry: GovernanceLogEntry): void;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=governance_logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance_logger.d.ts","sourceRoot":"","sources":["../../../src/telemetry/governance_logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,mBAAmB,CAAC;IACpC,cAAc,EAAE;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,WAAW,EAAE,OAAO,CAAC;QACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE;QACf,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,EAAE,SAAS,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC;IACT,YAAY,EAAE,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe,CAAC;IAC5F,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACtC;AAED,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,iBAAiB,CAA0B;gBAEvC,iBAAiB,CAAC,EAAE,gBAAgB;IAIhD,GAAG,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;CA2BrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACzC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export class GovernanceLogger {
|
|
2
|
+
metricsAggregator;
|
|
3
|
+
constructor(metricsAggregator) {
|
|
4
|
+
this.metricsAggregator = metricsAggregator ?? null;
|
|
5
|
+
}
|
|
6
|
+
log(entry) {
|
|
7
|
+
const logObj = {
|
|
8
|
+
level: "GOVERNANCE",
|
|
9
|
+
timestamp: entry.timestamp,
|
|
10
|
+
query: entry.query.substring(0, 120),
|
|
11
|
+
classification: entry.classification.type,
|
|
12
|
+
classificationConfidence: entry.classification.confidence,
|
|
13
|
+
preAllowed: entry.preInteraction.allowed,
|
|
14
|
+
preBlockedReason: entry.preInteraction.blockedReason,
|
|
15
|
+
entityFound: entry.preInteraction.entityFound,
|
|
16
|
+
patientId: entry.preInteraction.patientId,
|
|
17
|
+
llmCalled: entry.llmCalled,
|
|
18
|
+
postApproved: entry.postInteraction?.approved ?? null,
|
|
19
|
+
postViolations: entry.postInteraction?.violations.length ?? 0,
|
|
20
|
+
postViolationTypes: entry.postInteraction?.violations.map((v) => v.type) ?? [],
|
|
21
|
+
finalOutcome: entry.finalOutcome,
|
|
22
|
+
domain: entry.domain,
|
|
23
|
+
sessionId: entry.sessionId,
|
|
24
|
+
toolGuardBlocked: entry.toolGuardBlocked ?? 0,
|
|
25
|
+
};
|
|
26
|
+
console.log(`[GOVERNANCE] ${JSON.stringify(logObj)}`);
|
|
27
|
+
if (this.metricsAggregator) {
|
|
28
|
+
this.metricsAggregator.record(entry);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=governance_logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance_logger.js","sourceRoot":"","sources":["../../../src/telemetry/governance_logger.ts"],"names":[],"mappings":"AA8BA,MAAM,OAAO,gBAAgB;IACnB,iBAAiB,CAA0B;IAEnD,YAAY,iBAAoC;QAC9C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,IAAI,IAAI,CAAC;IACrD,CAAC;IAED,GAAG,CAAC,KAAyB;QAC3B,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;YACpC,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI;YACzC,wBAAwB,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU;YACzD,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO;YACxC,gBAAgB,EAAE,KAAK,CAAC,cAAc,CAAC,aAAa;YACpD,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW;YAC7C,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS;YACzC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,YAAY,EAAE,KAAK,CAAC,eAAe,EAAE,QAAQ,IAAI,IAAI;YACrD,cAAc,EAAE,KAAK,CAAC,eAAe,EAAE,UAAU,CAAC,MAAM,IAAI,CAAC;YAC7D,kBAAkB,EAAE,KAAK,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;YAC9E,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,CAAC;SAC9C,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAGjB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { GovernanceLogEntry } from "./governance_logger";
|
|
2
|
+
export interface GovernanceMetrics {
|
|
3
|
+
totalQueries: number;
|
|
4
|
+
blockedQueries: number;
|
|
5
|
+
allowedQueries: number;
|
|
6
|
+
blockRate: number;
|
|
7
|
+
hallucinationDetections: number;
|
|
8
|
+
safetyViolations: number;
|
|
9
|
+
traceViolations: number;
|
|
10
|
+
toolBlocks: number;
|
|
11
|
+
averageRetrievalConfidence: number;
|
|
12
|
+
byDomain: Record<string, DomainMetrics>;
|
|
13
|
+
byOutcome: Record<string, number>;
|
|
14
|
+
byClassification: Record<string, number>;
|
|
15
|
+
startedAt: string;
|
|
16
|
+
lastUpdatedAt: string | null;
|
|
17
|
+
}
|
|
18
|
+
export interface DomainMetrics {
|
|
19
|
+
totalQueries: number;
|
|
20
|
+
blockedQueries: number;
|
|
21
|
+
allowedQueries: number;
|
|
22
|
+
blockRate: number;
|
|
23
|
+
}
|
|
24
|
+
export interface IGovernanceMetricsAggregator {
|
|
25
|
+
record(entry: GovernanceLogEntry): void;
|
|
26
|
+
getMetrics(): GovernanceMetrics;
|
|
27
|
+
reset(): void;
|
|
28
|
+
}
|
|
29
|
+
export declare class GovernanceMetricsAggregator implements IGovernanceMetricsAggregator {
|
|
30
|
+
private totalQueries;
|
|
31
|
+
private blockedQueries;
|
|
32
|
+
private allowedQueries;
|
|
33
|
+
private hallucinationDetections;
|
|
34
|
+
private safetyViolations;
|
|
35
|
+
private traceViolations;
|
|
36
|
+
private toolBlocks;
|
|
37
|
+
private retrievalConfidenceSum;
|
|
38
|
+
private retrievalConfidenceCount;
|
|
39
|
+
private byDomain;
|
|
40
|
+
private byOutcome;
|
|
41
|
+
private byClassification;
|
|
42
|
+
private startedAt;
|
|
43
|
+
private lastUpdatedAt;
|
|
44
|
+
constructor();
|
|
45
|
+
record(entry: GovernanceLogEntry): void;
|
|
46
|
+
getMetrics(): GovernanceMetrics;
|
|
47
|
+
reset(): void;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B,EAAE,MAAM,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,UAAU,IAAI,iBAAiB,CAAC;IAChC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,qBAAa,2BAA4B,YAAW,4BAA4B;IAC9E,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,uBAAuB,CAAK;IACpC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,wBAAwB,CAAK;IACrC,OAAO,CAAC,QAAQ,CAA0E;IAC1F,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAuB;;IAM5C,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAqDvC,UAAU,IAAI,iBAAiB;IAuC/B,KAAK,IAAI,IAAI;CAgBd"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
export class GovernanceMetricsAggregator {
|
|
2
|
+
totalQueries = 0;
|
|
3
|
+
blockedQueries = 0;
|
|
4
|
+
allowedQueries = 0;
|
|
5
|
+
hallucinationDetections = 0;
|
|
6
|
+
safetyViolations = 0;
|
|
7
|
+
traceViolations = 0;
|
|
8
|
+
toolBlocks = 0;
|
|
9
|
+
retrievalConfidenceSum = 0;
|
|
10
|
+
retrievalConfidenceCount = 0;
|
|
11
|
+
byDomain = new Map();
|
|
12
|
+
byOutcome = new Map();
|
|
13
|
+
byClassification = new Map();
|
|
14
|
+
startedAt;
|
|
15
|
+
lastUpdatedAt = null;
|
|
16
|
+
constructor() {
|
|
17
|
+
this.startedAt = new Date().toISOString();
|
|
18
|
+
}
|
|
19
|
+
record(entry) {
|
|
20
|
+
this.totalQueries++;
|
|
21
|
+
this.lastUpdatedAt = entry.timestamp;
|
|
22
|
+
const isBlocked = entry.finalOutcome !== "allowed";
|
|
23
|
+
if (isBlocked) {
|
|
24
|
+
this.blockedQueries++;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
this.allowedQueries++;
|
|
28
|
+
}
|
|
29
|
+
this.byOutcome.set(entry.finalOutcome, (this.byOutcome.get(entry.finalOutcome) ?? 0) + 1);
|
|
30
|
+
const classType = entry.classification?.type ?? "unknown";
|
|
31
|
+
this.byClassification.set(classType, (this.byClassification.get(classType) ?? 0) + 1);
|
|
32
|
+
const domain = entry.domain ?? "unknown";
|
|
33
|
+
if (!this.byDomain.has(domain)) {
|
|
34
|
+
this.byDomain.set(domain, { total: 0, blocked: 0, allowed: 0 });
|
|
35
|
+
}
|
|
36
|
+
const domainStats = this.byDomain.get(domain);
|
|
37
|
+
domainStats.total++;
|
|
38
|
+
if (isBlocked) {
|
|
39
|
+
domainStats.blocked++;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
domainStats.allowed++;
|
|
43
|
+
}
|
|
44
|
+
if (entry.postInteraction?.violations) {
|
|
45
|
+
for (const v of entry.postInteraction.violations) {
|
|
46
|
+
if (v.type === "hallucination") {
|
|
47
|
+
this.hallucinationDetections++;
|
|
48
|
+
}
|
|
49
|
+
if (v.type === "unsafe_content" || v.type === "privacy_leak") {
|
|
50
|
+
this.safetyViolations++;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (entry.finalOutcome === "trace_blocked") {
|
|
55
|
+
this.traceViolations++;
|
|
56
|
+
}
|
|
57
|
+
if (entry.finalOutcome === "tool_blocked") {
|
|
58
|
+
this.toolBlocks++;
|
|
59
|
+
}
|
|
60
|
+
if (entry.retrievalConfidence != null) {
|
|
61
|
+
this.retrievalConfidenceSum += entry.retrievalConfidence;
|
|
62
|
+
this.retrievalConfidenceCount++;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
getMetrics() {
|
|
66
|
+
const avgConfidence = this.retrievalConfidenceCount > 0
|
|
67
|
+
? Math.round((this.retrievalConfidenceSum / this.retrievalConfidenceCount) * 1000) / 1000
|
|
68
|
+
: 0;
|
|
69
|
+
const blockRate = this.totalQueries > 0
|
|
70
|
+
? Math.round((this.blockedQueries / this.totalQueries) * 1000) / 1000
|
|
71
|
+
: 0;
|
|
72
|
+
const domainMetrics = {};
|
|
73
|
+
for (const [domain, stats] of this.byDomain) {
|
|
74
|
+
domainMetrics[domain] = {
|
|
75
|
+
totalQueries: stats.total,
|
|
76
|
+
blockedQueries: stats.blocked,
|
|
77
|
+
allowedQueries: stats.allowed,
|
|
78
|
+
blockRate: stats.total > 0 ? Math.round((stats.blocked / stats.total) * 1000) / 1000 : 0,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
totalQueries: this.totalQueries,
|
|
83
|
+
blockedQueries: this.blockedQueries,
|
|
84
|
+
allowedQueries: this.allowedQueries,
|
|
85
|
+
blockRate,
|
|
86
|
+
hallucinationDetections: this.hallucinationDetections,
|
|
87
|
+
safetyViolations: this.safetyViolations,
|
|
88
|
+
traceViolations: this.traceViolations,
|
|
89
|
+
toolBlocks: this.toolBlocks,
|
|
90
|
+
averageRetrievalConfidence: avgConfidence,
|
|
91
|
+
byDomain: domainMetrics,
|
|
92
|
+
byOutcome: Object.fromEntries(this.byOutcome),
|
|
93
|
+
byClassification: Object.fromEntries(this.byClassification),
|
|
94
|
+
startedAt: this.startedAt,
|
|
95
|
+
lastUpdatedAt: this.lastUpdatedAt,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
reset() {
|
|
99
|
+
this.totalQueries = 0;
|
|
100
|
+
this.blockedQueries = 0;
|
|
101
|
+
this.allowedQueries = 0;
|
|
102
|
+
this.hallucinationDetections = 0;
|
|
103
|
+
this.safetyViolations = 0;
|
|
104
|
+
this.traceViolations = 0;
|
|
105
|
+
this.toolBlocks = 0;
|
|
106
|
+
this.retrievalConfidenceSum = 0;
|
|
107
|
+
this.retrievalConfidenceCount = 0;
|
|
108
|
+
this.byDomain.clear();
|
|
109
|
+
this.byOutcome.clear();
|
|
110
|
+
this.byClassification.clear();
|
|
111
|
+
this.startedAt = new Date().toISOString();
|
|
112
|
+
this.lastUpdatedAt = null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/telemetry/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface ToolRequest {
|
|
2
|
+
toolName: string;
|
|
3
|
+
parameters: Record<string, any>;
|
|
4
|
+
sessionId?: string | null;
|
|
5
|
+
domain?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ToolGuardResult {
|
|
8
|
+
allowed: boolean;
|
|
9
|
+
blockedReason: string | null;
|
|
10
|
+
violations: ToolViolation[];
|
|
11
|
+
toolName: string;
|
|
12
|
+
sanitizedParameters: Record<string, any> | null;
|
|
13
|
+
}
|
|
14
|
+
export interface ToolViolation {
|
|
15
|
+
rule: string;
|
|
16
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
17
|
+
description: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ToolPolicyRule {
|
|
20
|
+
id: string;
|
|
21
|
+
description: string;
|
|
22
|
+
severity: "critical" | "high" | "medium" | "low";
|
|
23
|
+
check: (request: ToolRequest) => ToolViolation | null;
|
|
24
|
+
}
|
|
25
|
+
export interface IToolGuard {
|
|
26
|
+
evaluate(request: ToolRequest): ToolGuardResult;
|
|
27
|
+
addRule(rule: ToolPolicyRule): void;
|
|
28
|
+
removeRule(ruleId: string): void;
|
|
29
|
+
listRules(): ToolPolicyRule[];
|
|
30
|
+
}
|
|
31
|
+
export declare class ToolGuard implements IToolGuard {
|
|
32
|
+
private rules;
|
|
33
|
+
constructor(rules?: ToolPolicyRule[]);
|
|
34
|
+
evaluate(request: ToolRequest): ToolGuardResult;
|
|
35
|
+
addRule(rule: ToolPolicyRule): void;
|
|
36
|
+
removeRule(ruleId: string): void;
|
|
37
|
+
listRules(): ToolPolicyRule[];
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=tool_guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool_guard.d.ts","sourceRoot":"","sources":["../../../src/tools/tool_guard.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,aAAa,GAAG,IAAI,CAAC;CACvD;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAAC;IAChD,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IACpC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,IAAI,cAAc,EAAE,CAAC;CAC/B;AA8LD,qBAAa,SAAU,YAAW,UAAU;IAC1C,OAAO,CAAC,KAAK,CAA0C;gBAE3C,KAAK,CAAC,EAAE,cAAc,EAAE;IAOpC,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe;IAyB/C,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAInC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhC,SAAS,IAAI,cAAc,EAAE;CAG9B"}
|