@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.
Files changed (128) hide show
  1. package/README.md +251 -0
  2. package/dist/domains/finance/entity_rules.d.ts +4 -0
  3. package/dist/domains/finance/entity_rules.d.ts.map +1 -0
  4. package/dist/domains/finance/entity_rules.js +19 -0
  5. package/dist/domains/finance/entity_rules.js.map +1 -0
  6. package/dist/domains/finance/policy.yaml +85 -0
  7. package/dist/domains/health/entity_rules.d.ts +4 -0
  8. package/dist/domains/health/entity_rules.d.ts.map +1 -0
  9. package/dist/domains/health/entity_rules.js +20 -0
  10. package/dist/domains/health/entity_rules.js.map +1 -0
  11. package/dist/domains/health/policy.yaml +95 -0
  12. package/dist/domains/insurance/entity_rules.d.ts +4 -0
  13. package/dist/domains/insurance/entity_rules.d.ts.map +1 -0
  14. package/dist/domains/insurance/entity_rules.js +19 -0
  15. package/dist/domains/insurance/entity_rules.js.map +1 -0
  16. package/dist/domains/insurance/policy.yaml +88 -0
  17. package/dist/domains/registry.d.ts +20 -0
  18. package/dist/domains/registry.d.ts.map +1 -0
  19. package/dist/domains/registry.js +65 -0
  20. package/dist/domains/registry.js.map +1 -0
  21. package/dist/domains/types.d.ts +12 -0
  22. package/dist/domains/types.d.ts.map +1 -0
  23. package/dist/domains/types.js +2 -0
  24. package/dist/domains/types.js.map +1 -0
  25. package/dist/index.d.ts +32 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +15 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/sdk/governance.d.ts +121 -0
  30. package/dist/sdk/governance.d.ts.map +1 -0
  31. package/dist/sdk/governance.js +219 -0
  32. package/dist/sdk/governance.js.map +1 -0
  33. package/dist/src/api/index.d.ts +2 -0
  34. package/dist/src/api/index.d.ts.map +1 -0
  35. package/dist/src/api/index.js +2 -0
  36. package/dist/src/api/index.js.map +1 -0
  37. package/dist/src/certification/test_runner.d.ts +86 -0
  38. package/dist/src/certification/test_runner.d.ts.map +1 -0
  39. package/dist/src/certification/test_runner.js +422 -0
  40. package/dist/src/certification/test_runner.js.map +1 -0
  41. package/dist/src/classification/index.d.ts +2 -0
  42. package/dist/src/classification/index.d.ts.map +1 -0
  43. package/dist/src/classification/index.js +2 -0
  44. package/dist/src/classification/index.js.map +1 -0
  45. package/dist/src/classification/query_classifier.d.ts +13 -0
  46. package/dist/src/classification/query_classifier.d.ts.map +1 -0
  47. package/dist/src/classification/query_classifier.js +142 -0
  48. package/dist/src/classification/query_classifier.js.map +1 -0
  49. package/dist/src/config/index.d.ts +2 -0
  50. package/dist/src/config/index.d.ts.map +1 -0
  51. package/dist/src/config/index.js +2 -0
  52. package/dist/src/config/index.js.map +1 -0
  53. package/dist/src/context/index.d.ts +2 -0
  54. package/dist/src/context/index.d.ts.map +1 -0
  55. package/dist/src/context/index.js +2 -0
  56. package/dist/src/context/index.js.map +1 -0
  57. package/dist/src/gateway/index.d.ts +2 -0
  58. package/dist/src/gateway/index.d.ts.map +1 -0
  59. package/dist/src/gateway/index.js +2 -0
  60. package/dist/src/gateway/index.js.map +1 -0
  61. package/dist/src/gateway/pre_interaction_governance.d.ts +34 -0
  62. package/dist/src/gateway/pre_interaction_governance.d.ts.map +1 -0
  63. package/dist/src/gateway/pre_interaction_governance.js +187 -0
  64. package/dist/src/gateway/pre_interaction_governance.js.map +1 -0
  65. package/dist/src/interfaces/entity.d.ts +16 -0
  66. package/dist/src/interfaces/entity.d.ts.map +1 -0
  67. package/dist/src/interfaces/entity.js +2 -0
  68. package/dist/src/interfaces/entity.js.map +1 -0
  69. package/dist/src/normalization/index.d.ts +2 -0
  70. package/dist/src/normalization/index.d.ts.map +1 -0
  71. package/dist/src/normalization/index.js +2 -0
  72. package/dist/src/normalization/index.js.map +1 -0
  73. package/dist/src/normalization/response_normalizer.d.ts +30 -0
  74. package/dist/src/normalization/response_normalizer.d.ts.map +1 -0
  75. package/dist/src/normalization/response_normalizer.js +224 -0
  76. package/dist/src/normalization/response_normalizer.js.map +1 -0
  77. package/dist/src/orchestrator.d.ts +21 -0
  78. package/dist/src/orchestrator.d.ts.map +1 -0
  79. package/dist/src/orchestrator.js +355 -0
  80. package/dist/src/orchestrator.js.map +1 -0
  81. package/dist/src/policy/index.d.ts +3 -0
  82. package/dist/src/policy/index.d.ts.map +1 -0
  83. package/dist/src/policy/index.js +2 -0
  84. package/dist/src/policy/index.js.map +1 -0
  85. package/dist/src/policy/policy_engine.d.ts +47 -0
  86. package/dist/src/policy/policy_engine.d.ts.map +1 -0
  87. package/dist/src/policy/policy_engine.js +100 -0
  88. package/dist/src/policy/policy_engine.js.map +1 -0
  89. package/dist/src/reasoning/index.d.ts +2 -0
  90. package/dist/src/reasoning/index.d.ts.map +1 -0
  91. package/dist/src/reasoning/index.js +2 -0
  92. package/dist/src/reasoning/index.js.map +1 -0
  93. package/dist/src/reasoning/reasoning_validator.d.ts +28 -0
  94. package/dist/src/reasoning/reasoning_validator.d.ts.map +1 -0
  95. package/dist/src/reasoning/reasoning_validator.js +277 -0
  96. package/dist/src/reasoning/reasoning_validator.js.map +1 -0
  97. package/dist/src/reasoning/trace_validator.d.ts +33 -0
  98. package/dist/src/reasoning/trace_validator.d.ts.map +1 -0
  99. package/dist/src/reasoning/trace_validator.js +251 -0
  100. package/dist/src/reasoning/trace_validator.js.map +1 -0
  101. package/dist/src/state/interaction_state.d.ts +59 -0
  102. package/dist/src/state/interaction_state.d.ts.map +1 -0
  103. package/dist/src/state/interaction_state.js +75 -0
  104. package/dist/src/state/interaction_state.js.map +1 -0
  105. package/dist/src/telemetry/governance_logger.d.ts +36 -0
  106. package/dist/src/telemetry/governance_logger.d.ts.map +1 -0
  107. package/dist/src/telemetry/governance_logger.js +32 -0
  108. package/dist/src/telemetry/governance_logger.js.map +1 -0
  109. package/dist/src/telemetry/index.d.ts +2 -0
  110. package/dist/src/telemetry/index.d.ts.map +1 -0
  111. package/dist/src/telemetry/index.js +2 -0
  112. package/dist/src/telemetry/index.js.map +1 -0
  113. package/dist/src/telemetry/metrics.d.ts +49 -0
  114. package/dist/src/telemetry/metrics.d.ts.map +1 -0
  115. package/dist/src/telemetry/metrics.js +115 -0
  116. package/dist/src/telemetry/metrics.js.map +1 -0
  117. package/dist/src/tools/tool_guard.d.ts +39 -0
  118. package/dist/src/tools/tool_guard.d.ts.map +1 -0
  119. package/dist/src/tools/tool_guard.js +226 -0
  120. package/dist/src/tools/tool_guard.js.map +1 -0
  121. package/dist/src/types/index.d.ts +65 -0
  122. package/dist/src/types/index.d.ts.map +1 -0
  123. package/dist/src/types/index.js +2 -0
  124. package/dist/src/types/index.js.map +1 -0
  125. package/domains/finance/policy.yaml +85 -0
  126. package/domains/health/policy.yaml +95 -0
  127. package/domains/insurance/policy.yaml +88 -0
  128. 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,2 @@
1
+ export { GovernanceLogger, type GovernanceLogEntry, type IGovernanceLogger, } from "./governance_logger";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { GovernanceLogger, } from "./governance_logger.js";
2
+ //# sourceMappingURL=index.js.map
@@ -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"}