@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,355 @@
1
+ export async function runGovernance(query, context, llmCall, config, domain, sessionId) {
2
+ const activeDomain = domain ?? "health";
3
+ let sessionState = null;
4
+ if (config.stateManager && sessionId) {
5
+ sessionState = config.stateManager.getSessionState(sessionId);
6
+ if (!sessionState) {
7
+ sessionState = config.stateManager.createSession(sessionId, activeDomain);
8
+ }
9
+ config.stateManager.updateSessionState(sessionId, {
10
+ domain: activeDomain,
11
+ conversationEntry: {
12
+ timestamp: new Date().toISOString(),
13
+ role: "user",
14
+ content: query,
15
+ blocked: false,
16
+ },
17
+ });
18
+ }
19
+ const classification = config.queryClassifier.classify(query);
20
+ const preInteraction = await config.preInteractionGovernance.evaluate(query, context.sessionPatientId);
21
+ if (!preInteraction.allowed) {
22
+ const decisionRecord = {
23
+ timestamp: new Date().toISOString(),
24
+ query,
25
+ outcome: "pre_blocked",
26
+ blockedReason: preInteraction.blockedReason,
27
+ classification: preInteraction.classification,
28
+ domain: activeDomain,
29
+ };
30
+ config.governanceLogger.log({
31
+ timestamp: decisionRecord.timestamp,
32
+ query,
33
+ classification: preInteraction.classification,
34
+ preInteraction: {
35
+ allowed: false,
36
+ blockedReason: preInteraction.blockedReason,
37
+ entityFound: preInteraction.entityValidation.found,
38
+ patientId: preInteraction.entityValidation.patientId,
39
+ },
40
+ llmCalled: false,
41
+ llmResponseSummary: null,
42
+ postInteraction: null,
43
+ finalOutcome: "pre_blocked",
44
+ domain: activeDomain,
45
+ sessionId: sessionId ?? null,
46
+ retrievalConfidence: context.retrievalContext?.retrievalConfidence ?? null,
47
+ });
48
+ const safeResponse = preInteraction.safeResponse || "Request blocked by governance policy.";
49
+ if (config.stateManager && sessionId) {
50
+ config.stateManager.updateSessionState(sessionId, {
51
+ governanceDecision: decisionRecord,
52
+ conversationEntry: {
53
+ timestamp: decisionRecord.timestamp,
54
+ role: "governance",
55
+ content: safeResponse,
56
+ blocked: true,
57
+ },
58
+ });
59
+ }
60
+ return {
61
+ finalResponse: safeResponse,
62
+ blocked: true,
63
+ blockedStage: "pre_interaction",
64
+ blockedReason: preInteraction.blockedReason,
65
+ classification: preInteraction.classification,
66
+ preInteraction,
67
+ postInteraction: null,
68
+ normalization: null,
69
+ violations: [],
70
+ llmCalled: false,
71
+ domain: activeDomain,
72
+ sessionId: sessionId ?? null,
73
+ toolGuardResults: [],
74
+ traceValidation: null,
75
+ };
76
+ }
77
+ if (config.stateManager && sessionId && preInteraction.entityValidation.found) {
78
+ config.stateManager.updateSessionState(sessionId, {
79
+ entity: {
80
+ entityId: preInteraction.entityValidation.patientId,
81
+ entityName: preInteraction.entityValidation.patientName,
82
+ },
83
+ });
84
+ }
85
+ const toolGuardResults = [];
86
+ if (config.toolGuard && context.toolCalls && context.toolCalls.length > 0) {
87
+ for (const toolCall of context.toolCalls) {
88
+ const result = config.toolGuard.evaluate({
89
+ toolName: toolCall.toolName,
90
+ parameters: toolCall.parameters,
91
+ sessionId: sessionId,
92
+ domain: activeDomain,
93
+ });
94
+ toolGuardResults.push(result);
95
+ }
96
+ const blockedTools = toolGuardResults.filter((r) => !r.allowed);
97
+ if (blockedTools.length > 0) {
98
+ const blockedDescriptions = blockedTools
99
+ .map((t) => `[${t.toolName}] ${t.blockedReason}`)
100
+ .join("; ");
101
+ const decisionRecord = {
102
+ timestamp: new Date().toISOString(),
103
+ query,
104
+ outcome: "pre_blocked",
105
+ blockedReason: `Tool governance blocked: ${blockedDescriptions}`,
106
+ classification,
107
+ domain: activeDomain,
108
+ };
109
+ config.governanceLogger.log({
110
+ timestamp: decisionRecord.timestamp,
111
+ query,
112
+ classification,
113
+ preInteraction: {
114
+ allowed: true,
115
+ blockedReason: null,
116
+ entityFound: preInteraction.entityValidation.found,
117
+ patientId: preInteraction.entityValidation.patientId,
118
+ },
119
+ llmCalled: false,
120
+ llmResponseSummary: null,
121
+ postInteraction: null,
122
+ finalOutcome: "tool_blocked",
123
+ domain: activeDomain,
124
+ sessionId: sessionId ?? null,
125
+ toolGuardBlocked: blockedTools.length,
126
+ retrievalConfidence: context.retrievalContext?.retrievalConfidence ?? null,
127
+ });
128
+ const safeResponse = `Tool access blocked by governance policy. ${blockedTools.length} tool request(s) violated policy rules: ${blockedDescriptions}`;
129
+ if (config.stateManager && sessionId) {
130
+ config.stateManager.updateSessionState(sessionId, {
131
+ governanceDecision: decisionRecord,
132
+ conversationEntry: {
133
+ timestamp: decisionRecord.timestamp,
134
+ role: "governance",
135
+ content: safeResponse,
136
+ blocked: true,
137
+ },
138
+ });
139
+ }
140
+ return {
141
+ finalResponse: safeResponse,
142
+ blocked: true,
143
+ blockedStage: "tool_guard",
144
+ blockedReason: decisionRecord.blockedReason,
145
+ classification,
146
+ preInteraction,
147
+ postInteraction: null,
148
+ normalization: null,
149
+ violations: [],
150
+ llmCalled: false,
151
+ domain: activeDomain,
152
+ sessionId: sessionId ?? null,
153
+ toolGuardResults,
154
+ traceValidation: null,
155
+ };
156
+ }
157
+ }
158
+ const llmResult = await llmCall(query, context);
159
+ let traceValidation = null;
160
+ if (config.traceValidator) {
161
+ traceValidation = config.traceValidator.validate({
162
+ query,
163
+ response: llmResult.response,
164
+ reasoning: llmResult.reasoning,
165
+ evidence: llmResult.evidence,
166
+ confidence: llmResult.confidence,
167
+ confidenceLabel: llmResult.confidenceLabel,
168
+ missingData: llmResult.missingData,
169
+ });
170
+ if (traceValidation.shouldBlock) {
171
+ const traceBlockReason = traceValidation.violations
172
+ .filter((v) => v.severity === "critical" || v.severity === "high")
173
+ .map((v) => v.description)
174
+ .join("; ");
175
+ const decisionRecord = {
176
+ timestamp: new Date().toISOString(),
177
+ query,
178
+ outcome: "post_blocked",
179
+ blockedReason: `Trace validation failed: ${traceBlockReason}`,
180
+ classification,
181
+ domain: activeDomain,
182
+ };
183
+ config.governanceLogger.log({
184
+ timestamp: decisionRecord.timestamp,
185
+ query,
186
+ classification,
187
+ preInteraction: {
188
+ allowed: true,
189
+ blockedReason: null,
190
+ entityFound: preInteraction.entityValidation.found,
191
+ patientId: preInteraction.entityValidation.patientId,
192
+ },
193
+ llmCalled: true,
194
+ llmResponseSummary: llmResult.response.substring(0, 120),
195
+ postInteraction: null,
196
+ finalOutcome: "trace_blocked",
197
+ domain: activeDomain,
198
+ sessionId: sessionId ?? null,
199
+ retrievalConfidence: context.retrievalContext?.retrievalConfidence ?? null,
200
+ });
201
+ const blockedResponse = "I'm unable to provide a reliable answer to this query. " +
202
+ "The response was blocked by trace validation due to reasoning integrity issues: " +
203
+ traceBlockReason +
204
+ ". Please consult a qualified professional for guidance.";
205
+ if (config.stateManager && sessionId) {
206
+ config.stateManager.updateSessionState(sessionId, {
207
+ governanceDecision: decisionRecord,
208
+ conversationEntry: {
209
+ timestamp: decisionRecord.timestamp,
210
+ role: "governance",
211
+ content: blockedResponse,
212
+ blocked: true,
213
+ },
214
+ });
215
+ }
216
+ return {
217
+ finalResponse: blockedResponse,
218
+ blocked: true,
219
+ blockedStage: "trace_validation",
220
+ blockedReason: decisionRecord.blockedReason,
221
+ classification,
222
+ preInteraction,
223
+ postInteraction: null,
224
+ normalization: null,
225
+ violations: [],
226
+ llmCalled: true,
227
+ domain: activeDomain,
228
+ sessionId: sessionId ?? null,
229
+ toolGuardResults,
230
+ traceValidation,
231
+ };
232
+ }
233
+ llmResult.confidence = traceValidation.adjustedConfidence;
234
+ llmResult.confidenceLabel = traceValidation.adjustedConfidenceLabel;
235
+ }
236
+ const postInteraction = config.postInteractionGovernance.evaluate(query, llmResult.response, context.retrievalContext, classification.type);
237
+ if (!postInteraction.approved) {
238
+ const decisionRecord = {
239
+ timestamp: new Date().toISOString(),
240
+ query,
241
+ outcome: "post_blocked",
242
+ blockedReason: postInteraction.violations.map((v) => v.description).join("; "),
243
+ classification,
244
+ domain: activeDomain,
245
+ };
246
+ config.governanceLogger.log({
247
+ timestamp: decisionRecord.timestamp,
248
+ query,
249
+ classification,
250
+ preInteraction: {
251
+ allowed: true,
252
+ blockedReason: null,
253
+ entityFound: preInteraction.entityValidation.found,
254
+ patientId: preInteraction.entityValidation.patientId,
255
+ },
256
+ llmCalled: true,
257
+ llmResponseSummary: llmResult.response.substring(0, 120),
258
+ postInteraction: {
259
+ approved: false,
260
+ violations: postInteraction.violations,
261
+ },
262
+ finalOutcome: "post_blocked",
263
+ domain: activeDomain,
264
+ sessionId: sessionId ?? null,
265
+ retrievalConfidence: context.retrievalContext?.retrievalConfidence ?? null,
266
+ });
267
+ const blockedResponse = postInteraction.revisedResponse || "Response blocked by governance policy.";
268
+ if (config.stateManager && sessionId) {
269
+ config.stateManager.updateSessionState(sessionId, {
270
+ governanceDecision: decisionRecord,
271
+ conversationEntry: {
272
+ timestamp: decisionRecord.timestamp,
273
+ role: "governance",
274
+ content: blockedResponse,
275
+ blocked: true,
276
+ },
277
+ });
278
+ }
279
+ return {
280
+ finalResponse: blockedResponse,
281
+ blocked: true,
282
+ blockedStage: "post_interaction",
283
+ blockedReason: decisionRecord.blockedReason,
284
+ classification,
285
+ preInteraction,
286
+ postInteraction,
287
+ normalization: null,
288
+ violations: postInteraction.violations,
289
+ llmCalled: true,
290
+ domain: activeDomain,
291
+ sessionId: sessionId ?? null,
292
+ toolGuardResults,
293
+ traceValidation,
294
+ };
295
+ }
296
+ const normalized = config.responseNormalizer.normalize(llmResult, query, context.retrievalContext);
297
+ const finalResponse = postInteraction.revisedResponse || normalized.responseText;
298
+ const decisionRecord = {
299
+ timestamp: new Date().toISOString(),
300
+ query,
301
+ outcome: "allowed",
302
+ blockedReason: null,
303
+ classification,
304
+ domain: activeDomain,
305
+ };
306
+ config.governanceLogger.log({
307
+ timestamp: decisionRecord.timestamp,
308
+ query,
309
+ classification,
310
+ preInteraction: {
311
+ allowed: true,
312
+ blockedReason: null,
313
+ entityFound: preInteraction.entityValidation.found,
314
+ patientId: preInteraction.entityValidation.patientId,
315
+ },
316
+ llmCalled: true,
317
+ llmResponseSummary: llmResult.response.substring(0, 120),
318
+ postInteraction: {
319
+ approved: true,
320
+ violations: [],
321
+ },
322
+ finalOutcome: "allowed",
323
+ domain: activeDomain,
324
+ sessionId: sessionId ?? null,
325
+ retrievalConfidence: context.retrievalContext?.retrievalConfidence ?? null,
326
+ });
327
+ if (config.stateManager && sessionId) {
328
+ config.stateManager.updateSessionState(sessionId, {
329
+ governanceDecision: decisionRecord,
330
+ conversationEntry: {
331
+ timestamp: decisionRecord.timestamp,
332
+ role: "governance",
333
+ content: finalResponse,
334
+ blocked: false,
335
+ },
336
+ });
337
+ }
338
+ return {
339
+ finalResponse,
340
+ blocked: false,
341
+ blockedStage: null,
342
+ blockedReason: null,
343
+ classification,
344
+ preInteraction,
345
+ postInteraction,
346
+ normalization: normalized,
347
+ violations: [],
348
+ llmCalled: true,
349
+ domain: activeDomain,
350
+ sessionId: sessionId ?? null,
351
+ toolGuardResults,
352
+ traceValidation,
353
+ };
354
+ }
355
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { PolicyEngine } from "./policy_engine";
2
+ export type { IPolicyEngine, BlockedQueryPolicy, PrivacyRule, SafetyRule, PolicyDefinition, } from "./policy_engine";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/policy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { PolicyEngine } from "./policy_engine.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/policy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,47 @@
1
+ export interface BlockedQueryPolicy {
2
+ action: "block" | "warn";
3
+ response: string;
4
+ }
5
+ export interface PrivacyRule {
6
+ id: string;
7
+ description: string;
8
+ severity: "critical" | "high" | "medium" | "low";
9
+ }
10
+ export interface SafetyRule {
11
+ id: string;
12
+ description: string;
13
+ severity: "critical" | "high" | "medium" | "low";
14
+ }
15
+ export interface PolicyDefinition {
16
+ domain: string;
17
+ version: string;
18
+ blocked_query_types: Record<string, BlockedQueryPolicy>;
19
+ privacy_rules: PrivacyRule[];
20
+ safety_rules: SafetyRule[];
21
+ }
22
+ export interface IPolicyEngine {
23
+ getBlockedQueryTypes(): Record<string, BlockedQueryPolicy>;
24
+ getBlockedResponse(queryType: string): string | null;
25
+ isQueryTypeBlocked(queryType: string): boolean;
26
+ getPrivacyRules(): PrivacyRule[];
27
+ getSafetyRules(): SafetyRule[];
28
+ getPrivacyRulesBySeverity(severity: string): PrivacyRule[];
29
+ getSafetyRulesBySeverity(severity: string): SafetyRule[];
30
+ getDomain(): string;
31
+ getVersion(): string;
32
+ }
33
+ export declare class PolicyEngine implements IPolicyEngine {
34
+ private policy;
35
+ constructor(policyPathOrDefinition?: string | PolicyDefinition);
36
+ private validate;
37
+ getBlockedQueryTypes(): Record<string, BlockedQueryPolicy>;
38
+ getBlockedResponse(queryType: string): string | null;
39
+ isQueryTypeBlocked(queryType: string): boolean;
40
+ getPrivacyRules(): PrivacyRule[];
41
+ getSafetyRules(): SafetyRule[];
42
+ getPrivacyRulesBySeverity(severity: string): PrivacyRule[];
43
+ getSafetyRulesBySeverity(severity: string): SafetyRule[];
44
+ getDomain(): string;
45
+ getVersion(): string;
46
+ }
47
+ //# sourceMappingURL=policy_engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy_engine.d.ts","sourceRoot":"","sources":["../../../src/policy/policy_engine.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CAClD;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CAClD;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACxD,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,YAAY,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC3D,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACrD,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/C,eAAe,IAAI,WAAW,EAAE,CAAC;IACjC,cAAc,IAAI,UAAU,EAAE,CAAC;IAC/B,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IAC3D,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IACzD,SAAS,IAAI,MAAM,CAAC;IACpB,UAAU,IAAI,MAAM,CAAC;CACtB;AAQD,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,MAAM,CAAmB;gBAErB,sBAAsB,CAAC,EAAE,MAAM,GAAG,gBAAgB;IAW9D,OAAO,CAAC,QAAQ;IAiDhB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAI1D,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMpD,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK9C,eAAe,IAAI,WAAW,EAAE;IAIhC,cAAc,IAAI,UAAU,EAAE;IAI9B,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAI1D,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE;IAIxD,SAAS,IAAI,MAAM;IAInB,UAAU,IAAI,MAAM;CAGrB"}
@@ -0,0 +1,100 @@
1
+ import { readFileSync } from "fs";
2
+ import { resolve, dirname } from "path";
3
+ import { fileURLToPath } from "url";
4
+ import { parse as parseYaml } from "yaml";
5
+ const currentDir = dirname(fileURLToPath(import.meta.url));
6
+ const DEFAULT_POLICY_PATH = resolve(currentDir, "../../config/policies.yaml");
7
+ export class PolicyEngine {
8
+ policy;
9
+ constructor(policyPathOrDefinition) {
10
+ if (typeof policyPathOrDefinition === "object" && policyPathOrDefinition !== null) {
11
+ this.policy = this.validate(policyPathOrDefinition);
12
+ }
13
+ else {
14
+ const filePath = policyPathOrDefinition ?? DEFAULT_POLICY_PATH;
15
+ const raw = readFileSync(filePath, "utf-8");
16
+ const parsed = parseYaml(raw);
17
+ this.policy = this.validate(parsed);
18
+ }
19
+ }
20
+ validate(raw) {
21
+ if (!raw || typeof raw !== "object") {
22
+ throw new Error("Policy file must be a YAML object");
23
+ }
24
+ if (typeof raw.domain !== "string" || raw.domain.length === 0) {
25
+ throw new Error("Policy must define a 'domain' string");
26
+ }
27
+ if (typeof raw.version !== "string" || raw.version.length === 0) {
28
+ throw new Error("Policy must define a 'version' string");
29
+ }
30
+ if (!raw.blocked_query_types || typeof raw.blocked_query_types !== "object") {
31
+ throw new Error("Policy must define 'blocked_query_types'");
32
+ }
33
+ const validActions = new Set(["block", "warn"]);
34
+ const validSeverities = new Set(["critical", "high", "medium", "low"]);
35
+ for (const [key, val] of Object.entries(raw.blocked_query_types)) {
36
+ const entry = val;
37
+ if (!entry.action || !entry.response) {
38
+ throw new Error(`blocked_query_types.${key} must have 'action' and 'response'`);
39
+ }
40
+ if (!validActions.has(entry.action)) {
41
+ throw new Error(`blocked_query_types.${key}.action must be 'block' or 'warn', got '${entry.action}'`);
42
+ }
43
+ }
44
+ if (!Array.isArray(raw.privacy_rules)) {
45
+ throw new Error("Policy must define 'privacy_rules' as an array");
46
+ }
47
+ for (const rule of raw.privacy_rules) {
48
+ if (!rule.id || !rule.severity) {
49
+ throw new Error("Each privacy_rule must have 'id' and 'severity'");
50
+ }
51
+ if (!validSeverities.has(rule.severity)) {
52
+ throw new Error(`privacy_rules '${rule.id}' has invalid severity '${rule.severity}'`);
53
+ }
54
+ }
55
+ if (!Array.isArray(raw.safety_rules)) {
56
+ throw new Error("Policy must define 'safety_rules' as an array");
57
+ }
58
+ for (const rule of raw.safety_rules) {
59
+ if (!rule.id || !rule.severity) {
60
+ throw new Error("Each safety_rule must have 'id' and 'severity'");
61
+ }
62
+ if (!validSeverities.has(rule.severity)) {
63
+ throw new Error(`safety_rules '${rule.id}' has invalid severity '${rule.severity}'`);
64
+ }
65
+ }
66
+ return raw;
67
+ }
68
+ getBlockedQueryTypes() {
69
+ return this.policy.blocked_query_types;
70
+ }
71
+ getBlockedResponse(queryType) {
72
+ const entry = this.policy.blocked_query_types[queryType];
73
+ if (!entry || entry.action !== "block")
74
+ return null;
75
+ return entry.response;
76
+ }
77
+ isQueryTypeBlocked(queryType) {
78
+ const entry = this.policy.blocked_query_types[queryType];
79
+ return !!entry && entry.action === "block";
80
+ }
81
+ getPrivacyRules() {
82
+ return this.policy.privacy_rules;
83
+ }
84
+ getSafetyRules() {
85
+ return this.policy.safety_rules;
86
+ }
87
+ getPrivacyRulesBySeverity(severity) {
88
+ return this.policy.privacy_rules.filter((r) => r.severity === severity);
89
+ }
90
+ getSafetyRulesBySeverity(severity) {
91
+ return this.policy.safety_rules.filter((r) => r.severity === severity);
92
+ }
93
+ getDomain() {
94
+ return this.policy.domain;
95
+ }
96
+ getVersion() {
97
+ return this.policy.version;
98
+ }
99
+ }
100
+ //# sourceMappingURL=policy_engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy_engine.js","sourceRoot":"","sources":["../../../src/policy/policy_engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { PostInteractionGovernance, type Violation, type PostInteractionResult, type IPostInteractionGovernance, } from "./reasoning_validator";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reasoning/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,GAChC,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { PostInteractionGovernance, } from "./reasoning_validator.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reasoning/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,GAI1B,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { GovernanceRetrievalContext as RetrievalContext } from "../types";
2
+ import type { QueryType } from "../classification/query_classifier";
3
+ export interface Violation {
4
+ type: "hallucination" | "missing_evidence" | "unsafe_content" | "privacy_leak";
5
+ severity: "critical" | "high" | "medium";
6
+ description: string;
7
+ }
8
+ export interface PostInteractionResult {
9
+ approved: boolean;
10
+ violations: Violation[];
11
+ revisedResponse: string | null;
12
+ }
13
+ export interface IPostInteractionGovernance {
14
+ evaluate(query: string, response: string, retrievalContext: RetrievalContext | undefined, queryType: QueryType): PostInteractionResult;
15
+ }
16
+ export declare class PostInteractionGovernance implements IPostInteractionGovernance {
17
+ evaluate(query: string, response: string, retrievalContext: RetrievalContext | undefined, queryType: QueryType): PostInteractionResult;
18
+ private checkHallucinations;
19
+ private checkUnsafeContent;
20
+ private checkPrivacyLeak;
21
+ private enrichMissingDataResponse;
22
+ private ensureClinicalCaveat;
23
+ private enrichCausalSpeculationCaveat;
24
+ private enrichPopulationStatisticsCaveat;
25
+ private addRetrievalConfidenceCaveat;
26
+ private responseAcknowledgesNoData;
27
+ }
28
+ //# sourceMappingURL=reasoning_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning_validator.d.ts","sourceRoot":"","sources":["../../../src/reasoning/reasoning_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAEpE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,eAAe,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,cAAc,CAAC;IAC/E,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,EAC9C,SAAS,EAAE,SAAS,GACnB,qBAAqB,CAAC;CAC1B;AAuCD,qBAAa,yBAA0B,YAAW,0BAA0B;IAC1E,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,EAC9C,SAAS,EAAE,SAAS,GACnB,qBAAqB;IAoCxB,OAAO,CAAC,mBAAmB;IAoE3B,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,yBAAyB;IAsDjC,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,6BAA6B;IAiBrC,OAAO,CAAC,gCAAgC;IA2BxC,OAAO,CAAC,4BAA4B;IAepC,OAAO,CAAC,0BAA0B;CASnC"}