monora-ai 2.0.0 → 2.1.3

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 (202) hide show
  1. package/README.md +441 -150
  2. package/dist/aims_governance.d.ts +238 -0
  3. package/dist/aims_governance.d.ts.map +1 -0
  4. package/dist/aims_governance.js +922 -0
  5. package/dist/alerts.d.ts +16 -0
  6. package/dist/alerts.d.ts.map +1 -1
  7. package/dist/alerts.js +16 -0
  8. package/dist/api.d.ts +6 -0
  9. package/dist/api.d.ts.map +1 -1
  10. package/dist/api.js +6 -0
  11. package/dist/assessment.d.ts +269 -0
  12. package/dist/assessment.d.ts.map +1 -0
  13. package/dist/assessment.js +1232 -0
  14. package/dist/attestation.js +23 -1
  15. package/dist/attribution.d.ts +349 -0
  16. package/dist/attribution.d.ts.map +1 -0
  17. package/dist/attribution.js +987 -0
  18. package/dist/autodetect.d.ts +69 -1
  19. package/dist/autodetect.d.ts.map +1 -1
  20. package/dist/autodetect.js +644 -1
  21. package/dist/bias.d.ts +130 -0
  22. package/dist/bias.d.ts.map +1 -0
  23. package/dist/bias.js +223 -0
  24. package/dist/circuit_breaker.js +3 -3
  25. package/dist/cli/diagnostics.d.ts +5 -1
  26. package/dist/cli/diagnostics.d.ts.map +1 -1
  27. package/dist/cli/diagnostics.js +31 -8
  28. package/dist/cli/doctor.d.ts +25 -0
  29. package/dist/cli/doctor.d.ts.map +1 -0
  30. package/dist/cli/doctor.js +381 -0
  31. package/dist/cli/fix.d.ts +16 -0
  32. package/dist/cli/fix.d.ts.map +1 -0
  33. package/dist/cli/fix.js +284 -0
  34. package/dist/cli/init.d.ts +57 -0
  35. package/dist/cli/init.d.ts.map +1 -0
  36. package/dist/cli/init.js +205 -0
  37. package/dist/cli.js +1611 -126
  38. package/dist/complianceTargets.d.ts +111 -0
  39. package/dist/complianceTargets.d.ts.map +1 -0
  40. package/dist/complianceTargets.js +521 -0
  41. package/dist/config.d.ts +301 -17
  42. package/dist/config.d.ts.map +1 -1
  43. package/dist/config.js +428 -36
  44. package/dist/config_migrations.d.ts +41 -0
  45. package/dist/config_migrations.d.ts.map +1 -1
  46. package/dist/config_migrations.js +205 -0
  47. package/dist/config_schema.d.ts +2900 -731
  48. package/dist/config_schema.d.ts.map +1 -1
  49. package/dist/config_schema.js +257 -55
  50. package/dist/context.d.ts +34 -0
  51. package/dist/context.d.ts.map +1 -1
  52. package/dist/context.js +118 -7
  53. package/dist/control_backbone.d.ts +122 -0
  54. package/dist/control_backbone.d.ts.map +1 -0
  55. package/dist/control_backbone.js +698 -0
  56. package/dist/data-governance.d.ts +187 -0
  57. package/dist/data-governance.d.ts.map +1 -0
  58. package/dist/data-governance.js +424 -0
  59. package/dist/dataResidency.d.ts +44 -0
  60. package/dist/dataResidency.d.ts.map +1 -0
  61. package/dist/dataResidency.js +203 -0
  62. package/dist/dispatcher.d.ts +32 -0
  63. package/dist/dispatcher.d.ts.map +1 -1
  64. package/dist/dispatcher.js +91 -4
  65. package/dist/events.d.ts.map +1 -1
  66. package/dist/events.js +38 -0
  67. package/dist/evidence_store.d.ts +103 -0
  68. package/dist/evidence_store.d.ts.map +1 -0
  69. package/dist/evidence_store.js +459 -0
  70. package/dist/executiveSummary.d.ts +65 -8
  71. package/dist/executiveSummary.d.ts.map +1 -1
  72. package/dist/executiveSummary.js +289 -26
  73. package/dist/identity.d.ts +143 -0
  74. package/dist/identity.d.ts.map +1 -0
  75. package/dist/identity.js +231 -0
  76. package/dist/impact-assessment.d.ts +350 -0
  77. package/dist/impact-assessment.d.ts.map +1 -0
  78. package/dist/impact-assessment.js +580 -0
  79. package/dist/index.d.ts +25 -5
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +300 -4
  82. package/dist/instrumentation.d.ts +1 -1
  83. package/dist/instrumentation.d.ts.map +1 -1
  84. package/dist/instrumentation.js +243 -27
  85. package/dist/integrations/anthropic.d.ts +3 -0
  86. package/dist/integrations/anthropic.d.ts.map +1 -1
  87. package/dist/integrations/anthropic.js +284 -79
  88. package/dist/integrations/governance.d.ts +33 -0
  89. package/dist/integrations/governance.d.ts.map +1 -0
  90. package/dist/integrations/governance.js +208 -0
  91. package/dist/integrations/langchain.d.ts +7 -0
  92. package/dist/integrations/langchain.d.ts.map +1 -1
  93. package/dist/integrations/langchain.js +387 -143
  94. package/dist/integrations/openai.d.ts +9 -0
  95. package/dist/integrations/openai.d.ts.map +1 -1
  96. package/dist/integrations/openai.js +673 -73
  97. package/dist/iso42001_consolidation.d.ts +16 -0
  98. package/dist/iso42001_consolidation.d.ts.map +1 -0
  99. package/dist/iso42001_consolidation.js +413 -0
  100. package/dist/iso42001_workflows.d.ts +263 -0
  101. package/dist/iso42001_workflows.d.ts.map +1 -0
  102. package/dist/iso42001_workflows.js +781 -0
  103. package/dist/lifecycle.d.ts +299 -0
  104. package/dist/lifecycle.d.ts.map +1 -0
  105. package/dist/lifecycle.js +624 -0
  106. package/dist/lineage.d.ts +2 -2
  107. package/dist/lineage.d.ts.map +1 -1
  108. package/dist/lineage.js +12 -17
  109. package/dist/middleware/express.d.ts.map +1 -1
  110. package/dist/middleware/express.js +33 -3
  111. package/dist/middleware/nextjs.d.ts.map +1 -1
  112. package/dist/middleware/nextjs.js +42 -68
  113. package/dist/model.d.ts +143 -0
  114. package/dist/model.d.ts.map +1 -0
  115. package/dist/model.js +371 -0
  116. package/dist/onboarding.d.ts +42 -0
  117. package/dist/onboarding.d.ts.map +1 -0
  118. package/dist/onboarding.js +1022 -0
  119. package/dist/oversight.d.ts +264 -0
  120. package/dist/oversight.d.ts.map +1 -0
  121. package/dist/oversight.js +497 -0
  122. package/dist/pdf_report.d.ts.map +1 -1
  123. package/dist/pdf_report.js +42 -21
  124. package/dist/presets.d.ts +88 -0
  125. package/dist/presets.d.ts.map +1 -0
  126. package/dist/presets.js +520 -0
  127. package/dist/propagation.d.ts.map +1 -1
  128. package/dist/propagation.js +34 -2
  129. package/dist/quotas.d.ts +171 -0
  130. package/dist/quotas.d.ts.map +1 -0
  131. package/dist/quotas.js +259 -0
  132. package/dist/register.d.ts +13 -0
  133. package/dist/register.d.ts.map +1 -0
  134. package/dist/register.js +99 -0
  135. package/dist/registry.d.ts +1 -0
  136. package/dist/registry.d.ts.map +1 -1
  137. package/dist/registry.js +7 -0
  138. package/dist/registryData.json +43 -6
  139. package/dist/report.d.ts +2 -1
  140. package/dist/report.d.ts.map +1 -1
  141. package/dist/report.js +189 -2
  142. package/dist/reporting.d.ts +125 -0
  143. package/dist/reporting.d.ts.map +1 -1
  144. package/dist/reporting.js +196 -5
  145. package/dist/resources.d.ts +285 -0
  146. package/dist/resources.d.ts.map +1 -0
  147. package/dist/resources.js +643 -0
  148. package/dist/risk.d.ts +120 -0
  149. package/dist/risk.d.ts.map +1 -0
  150. package/dist/risk.js +220 -0
  151. package/dist/runtime.d.ts +74 -1
  152. package/dist/runtime.d.ts.map +1 -1
  153. package/dist/runtime.js +598 -22
  154. package/dist/schemaInference.d.ts +92 -0
  155. package/dist/schemaInference.d.ts.map +1 -0
  156. package/dist/schemaInference.js +466 -0
  157. package/dist/schema_validation.js +2 -2
  158. package/dist/schemas/config.schema.json +169 -6
  159. package/dist/schemas/event.schema.json +4 -0
  160. package/dist/security_report.js +4 -4
  161. package/dist/signing.d.ts +1 -1
  162. package/dist/signing.d.ts.map +1 -1
  163. package/dist/signing.js +4 -0
  164. package/dist/sinks/file.d.ts +19 -1
  165. package/dist/sinks/file.d.ts.map +1 -1
  166. package/dist/sinks/file.js +82 -13
  167. package/dist/sinks/https.d.ts +10 -0
  168. package/dist/sinks/https.d.ts.map +1 -1
  169. package/dist/sinks/https.js +76 -16
  170. package/dist/sinks/stdout.d.ts +1 -0
  171. package/dist/sinks/stdout.d.ts.map +1 -1
  172. package/dist/sinks/stdout.js +12 -1
  173. package/dist/spec.d.ts +159 -0
  174. package/dist/spec.d.ts.map +1 -0
  175. package/dist/spec.js +391 -0
  176. package/dist/stakeholders.d.ts +199 -0
  177. package/dist/stakeholders.d.ts.map +1 -0
  178. package/dist/stakeholders.js +398 -0
  179. package/dist/standards.d.ts.map +1 -1
  180. package/dist/standards.js +160 -2
  181. package/dist/standards_ingest.d.ts +2 -2
  182. package/dist/standards_ingest.d.ts.map +1 -1
  183. package/dist/standards_ingest.js +105 -23
  184. package/dist/streaming.d.ts.map +1 -1
  185. package/dist/streaming.js +7 -2
  186. package/dist/telemetry.d.ts +16 -2
  187. package/dist/telemetry.d.ts.map +1 -1
  188. package/dist/telemetry.js +79 -14
  189. package/dist/templates/controls/iso42001_control_catalog.json +1443 -0
  190. package/dist/traced_emitter.d.ts +3 -0
  191. package/dist/traced_emitter.d.ts.map +1 -1
  192. package/dist/traced_emitter.js +142 -25
  193. package/dist/trust_package.d.ts +21 -1
  194. package/dist/trust_package.d.ts.map +1 -1
  195. package/dist/trust_package.js +101 -4
  196. package/dist/verify.d.ts.map +1 -1
  197. package/dist/verify.js +9 -2
  198. package/dist/wal.d.ts.map +1 -1
  199. package/dist/wal.js +2 -1
  200. package/package.json +14 -1
  201. package/scripts/postinstall.js +119 -97
  202. package/templates/controls/iso42001_control_catalog.json +1443 -0
@@ -0,0 +1,580 @@
1
+ "use strict";
2
+ /**
3
+ * AI Impact Assessment for ISO 42001 A.5 compliance.
4
+ *
5
+ * This module provides AI Impact Assessment (AIIA) management supporting
6
+ * ISO 42001 controls A.5.2 (process), A.5.3 (documentation), A.5.4 (individual
7
+ * impacts), and A.5.5 (societal impacts).
8
+ *
9
+ * Cross-SDK Parity:
10
+ * Both Python and Node.js SDKs provide identical impact assessment APIs:
11
+ * - createImpactAssessment() / create_impact_assessment()
12
+ * - addImpactRecord() / add_impact_record()
13
+ * - addMitigation() / add_mitigation()
14
+ * - submitForApproval() / submit_for_approval()
15
+ * - recordApproval() / record_approval()
16
+ * - finalizeAssessment() / finalize_assessment()
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.impactRecordToDict = impactRecordToDict;
20
+ exports.mitigationToDict = mitigationToDict;
21
+ exports.approvalToDict = approvalToDict;
22
+ exports.assessmentToDict = assessmentToDict;
23
+ exports.calculateRiskScore = calculateRiskScore;
24
+ exports.createImpactAssessment = createImpactAssessment;
25
+ exports.addImpactRecord = addImpactRecord;
26
+ exports.addMitigation = addMitigation;
27
+ exports.addResidualRisk = addResidualRisk;
28
+ exports.validateAssessmentCompleteness = validateAssessmentCompleteness;
29
+ exports.submitForApproval = submitForApproval;
30
+ exports.recordApproval = recordApproval;
31
+ exports.finalizeAssessment = finalizeAssessment;
32
+ exports.archiveAssessment = archiveAssessment;
33
+ exports.getAssessment = getAssessment;
34
+ exports.getAssessmentsForSystem = getAssessmentsForSystem;
35
+ exports.getAllAssessments = getAllAssessments;
36
+ exports.clearAssessments = clearAssessments;
37
+ exports.getAssessmentSummary = getAssessmentSummary;
38
+ exports.getImpactAssessmentReport = getImpactAssessmentReport;
39
+ exports.checkProductionReadiness = checkProductionReadiness;
40
+ exports.emitImpactAssessment = emitImpactAssessment;
41
+ const crypto_1 = require("crypto");
42
+ const logger_1 = require("./logger");
43
+ // Risk scoring weights
44
+ const LIKELIHOOD_WEIGHTS = {
45
+ rare: 1,
46
+ unlikely: 2,
47
+ possible: 3,
48
+ likely: 4,
49
+ certain: 5,
50
+ };
51
+ const SEVERITY_WEIGHTS = {
52
+ minimal: 1,
53
+ minor: 2,
54
+ moderate: 3,
55
+ major: 4,
56
+ catastrophic: 5,
57
+ };
58
+ /**
59
+ * Generate a deterministic ID from parts.
60
+ */
61
+ function generateId(prefix, ...parts) {
62
+ const combined = parts.join(':');
63
+ const hash = (0, crypto_1.createHash)('sha256').update(combined).digest('hex').slice(0, 12);
64
+ return `${prefix}_${hash}`;
65
+ }
66
+ /**
67
+ * Get current UTC timestamp in ISO format.
68
+ */
69
+ function nowIso() {
70
+ return new Date().toISOString();
71
+ }
72
+ /**
73
+ * Convert impact record to dictionary for serialization.
74
+ */
75
+ function impactRecordToDict(record) {
76
+ return {
77
+ impact_id: record.impactId,
78
+ category: record.category,
79
+ description: record.description,
80
+ likelihood: record.likelihood,
81
+ severity: record.severity,
82
+ risk_score: record.riskScore,
83
+ affected_parties: record.affectedParties,
84
+ impact_type: record.impactType,
85
+ };
86
+ }
87
+ /**
88
+ * Convert mitigation to dictionary for serialization.
89
+ */
90
+ function mitigationToDict(mitigation) {
91
+ return {
92
+ mitigation_id: mitigation.mitigationId,
93
+ risk_category: mitigation.riskCategory,
94
+ description: mitigation.description,
95
+ effectiveness: mitigation.effectiveness,
96
+ implementation_status: mitigation.implementationStatus,
97
+ owner: mitigation.owner,
98
+ target_impacts: mitigation.targetImpacts,
99
+ };
100
+ }
101
+ /**
102
+ * Convert approval to dictionary for serialization.
103
+ */
104
+ function approvalToDict(approval) {
105
+ const result = {
106
+ approver_role: approval.approverRole,
107
+ approver_name: approval.approverName,
108
+ approved_at: approval.approvedAt,
109
+ };
110
+ if (approval.comments) {
111
+ result.comments = approval.comments;
112
+ }
113
+ return result;
114
+ }
115
+ /**
116
+ * Convert assessment to dictionary for serialization.
117
+ */
118
+ function assessmentToDict(assessment) {
119
+ return {
120
+ assessment_id: assessment.assessmentId,
121
+ system_id: assessment.systemId,
122
+ assessment_date: assessment.assessmentDate,
123
+ assessor: assessment.assessor,
124
+ version: assessment.version,
125
+ status: assessment.status,
126
+ intended_purpose: assessment.intendedPurpose,
127
+ deployment_context: assessment.deploymentContext,
128
+ affected_groups: assessment.affectedGroups,
129
+ individual_impacts: assessment.individualImpacts.map(impactRecordToDict),
130
+ societal_impacts: assessment.societalImpacts.map(impactRecordToDict),
131
+ risk_mitigations: assessment.riskMitigations.map(mitigationToDict),
132
+ residual_risks: assessment.residualRisks,
133
+ approvals: assessment.approvals.map(approvalToDict),
134
+ created_at: assessment.createdAt,
135
+ updated_at: assessment.updatedAt,
136
+ };
137
+ }
138
+ // Runtime assessment registry
139
+ const assessments = new Map();
140
+ /**
141
+ * Calculate risk score from likelihood and severity.
142
+ *
143
+ * Uses a 5x5 risk matrix where score = likelihood_weight * severity_weight.
144
+ *
145
+ * @param likelihood - Probability of occurrence
146
+ * @param severity - Severity if impact occurs
147
+ * @returns Risk score from 1 (rare/minimal) to 25 (certain/catastrophic)
148
+ */
149
+ function calculateRiskScore(likelihood, severity) {
150
+ return LIKELIHOOD_WEIGHTS[likelihood] * SEVERITY_WEIGHTS[severity];
151
+ }
152
+ /**
153
+ * Create a new AI Impact Assessment.
154
+ *
155
+ * @param options - Assessment creation options
156
+ * @returns A new AIImpactAssessment in draft status
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * const assessment = createImpactAssessment({
161
+ * systemId: 'chatbot-v2',
162
+ * assessor: 'Jane Doe',
163
+ * intendedPurpose: 'Customer support automation',
164
+ * deploymentContext: 'Web and mobile applications',
165
+ * affectedGroups: ['customers', 'support_staff']
166
+ * });
167
+ * ```
168
+ */
169
+ function createImpactAssessment(options) {
170
+ const assessmentDate = new Date().toISOString().split('T')[0];
171
+ const version = options.version || '1.0';
172
+ const assessmentId = generateId('aiia', options.systemId, assessmentDate, version);
173
+ const assessment = {
174
+ assessmentId,
175
+ systemId: options.systemId,
176
+ assessmentDate,
177
+ assessor: options.assessor,
178
+ version,
179
+ status: 'draft',
180
+ intendedPurpose: options.intendedPurpose,
181
+ deploymentContext: options.deploymentContext,
182
+ affectedGroups: options.affectedGroups || [],
183
+ individualImpacts: [],
184
+ societalImpacts: [],
185
+ riskMitigations: [],
186
+ residualRisks: [],
187
+ approvals: [],
188
+ createdAt: nowIso(),
189
+ updatedAt: nowIso(),
190
+ };
191
+ assessments.set(assessmentId, assessment);
192
+ return assessment;
193
+ }
194
+ /**
195
+ * Add an impact record to an assessment.
196
+ *
197
+ * @param options - Impact record options
198
+ * @returns The created ImpactRecord
199
+ * @throws Error if assessment not found or not in draft status
200
+ */
201
+ function addImpactRecord(options) {
202
+ const assessment = assessments.get(options.assessmentId);
203
+ if (!assessment) {
204
+ throw new Error(`Assessment ${options.assessmentId} not found`);
205
+ }
206
+ if (assessment.status !== 'draft') {
207
+ throw new Error(`Assessment must be in draft status to add impacts (current: ${assessment.status})`);
208
+ }
209
+ const riskScore = calculateRiskScore(options.likelihood, options.severity);
210
+ const impactId = generateId('imp', options.assessmentId, options.category, options.description.slice(0, 20));
211
+ const impactType = options.impactType || 'individual';
212
+ const impact = {
213
+ impactId,
214
+ category: options.category,
215
+ description: options.description,
216
+ likelihood: options.likelihood,
217
+ severity: options.severity,
218
+ riskScore,
219
+ affectedParties: options.affectedParties || [],
220
+ impactType,
221
+ };
222
+ if (impactType === 'individual') {
223
+ assessment.individualImpacts.push(impact);
224
+ }
225
+ else {
226
+ assessment.societalImpacts.push(impact);
227
+ }
228
+ assessment.updatedAt = nowIso();
229
+ return impact;
230
+ }
231
+ /**
232
+ * Add a risk mitigation to an assessment.
233
+ *
234
+ * @param options - Mitigation options
235
+ * @returns The created Mitigation
236
+ * @throws Error if assessment not found or not in draft status
237
+ */
238
+ function addMitigation(options) {
239
+ const assessment = assessments.get(options.assessmentId);
240
+ if (!assessment) {
241
+ throw new Error(`Assessment ${options.assessmentId} not found`);
242
+ }
243
+ if (assessment.status !== 'draft') {
244
+ throw new Error(`Assessment must be in draft status to add mitigations (current: ${assessment.status})`);
245
+ }
246
+ const mitigationId = generateId('mit', options.assessmentId, options.riskCategory, options.description.slice(0, 20));
247
+ const mitigation = {
248
+ mitigationId,
249
+ riskCategory: options.riskCategory,
250
+ description: options.description,
251
+ effectiveness: options.effectiveness,
252
+ implementationStatus: options.implementationStatus,
253
+ owner: options.owner,
254
+ targetImpacts: options.targetImpacts || [],
255
+ };
256
+ assessment.riskMitigations.push(mitigation);
257
+ assessment.updatedAt = nowIso();
258
+ return mitigation;
259
+ }
260
+ /**
261
+ * Add a residual risk to an assessment.
262
+ *
263
+ * @param assessmentId - ID of the assessment to update
264
+ * @param riskDescription - Description of the residual risk
265
+ * @throws Error if assessment not found or not in draft status
266
+ */
267
+ function addResidualRisk(assessmentId, riskDescription) {
268
+ const assessment = assessments.get(assessmentId);
269
+ if (!assessment) {
270
+ throw new Error(`Assessment ${assessmentId} not found`);
271
+ }
272
+ if (assessment.status !== 'draft') {
273
+ throw new Error(`Assessment must be in draft status (current: ${assessment.status})`);
274
+ }
275
+ assessment.residualRisks.push(riskDescription);
276
+ assessment.updatedAt = nowIso();
277
+ }
278
+ /**
279
+ * Validate that an assessment has all required fields.
280
+ *
281
+ * @param assessment - The assessment to validate
282
+ * @returns List of validation errors (empty if valid)
283
+ */
284
+ function validateAssessmentCompleteness(assessment) {
285
+ const errors = [];
286
+ if (!assessment.intendedPurpose) {
287
+ errors.push('Missing intendedPurpose');
288
+ }
289
+ if (!assessment.deploymentContext) {
290
+ errors.push('Missing deploymentContext');
291
+ }
292
+ if (assessment.affectedGroups.length === 0) {
293
+ errors.push('No affectedGroups specified');
294
+ }
295
+ if (assessment.individualImpacts.length === 0 && assessment.societalImpacts.length === 0) {
296
+ errors.push('No impacts assessed (need at least one individual or societal impact)');
297
+ }
298
+ return errors;
299
+ }
300
+ /**
301
+ * Submit an assessment for approval review.
302
+ *
303
+ * Changes status from 'draft' to 'review'.
304
+ *
305
+ * @param assessmentId - ID of the assessment to submit
306
+ * @returns The updated assessment
307
+ * @throws Error if assessment not found or not in draft status
308
+ */
309
+ function submitForApproval(assessmentId) {
310
+ const assessment = assessments.get(assessmentId);
311
+ if (!assessment) {
312
+ throw new Error(`Assessment ${assessmentId} not found`);
313
+ }
314
+ if (assessment.status !== 'draft') {
315
+ throw new Error(`Assessment must be in draft status to submit (current: ${assessment.status})`);
316
+ }
317
+ // Validate completeness
318
+ const errors = validateAssessmentCompleteness(assessment);
319
+ if (errors.length > 0) {
320
+ throw new Error(`Assessment incomplete: ${errors.join('; ')}`);
321
+ }
322
+ assessment.status = 'review';
323
+ assessment.updatedAt = nowIso();
324
+ return assessment;
325
+ }
326
+ /**
327
+ * Record an approval sign-off on an assessment.
328
+ *
329
+ * @param options - Approval options
330
+ * @returns The created Approval
331
+ * @throws Error if assessment not found or not in review status
332
+ */
333
+ function recordApproval(options) {
334
+ const assessment = assessments.get(options.assessmentId);
335
+ if (!assessment) {
336
+ throw new Error(`Assessment ${options.assessmentId} not found`);
337
+ }
338
+ if (assessment.status !== 'review') {
339
+ throw new Error(`Assessment must be in review status to approve (current: ${assessment.status})`);
340
+ }
341
+ // Check if this role already approved
342
+ const existingApproval = assessment.approvals.find(a => a.approverRole === options.approverRole);
343
+ if (existingApproval) {
344
+ throw new Error(`Role ${options.approverRole} has already approved this assessment`);
345
+ }
346
+ const approval = {
347
+ approverRole: options.approverRole,
348
+ approverName: options.approverName,
349
+ approvedAt: nowIso(),
350
+ comments: options.comments,
351
+ };
352
+ assessment.approvals.push(approval);
353
+ assessment.updatedAt = nowIso();
354
+ return approval;
355
+ }
356
+ /**
357
+ * Finalize an assessment, marking it as approved.
358
+ *
359
+ * Validates that all required approvals are present.
360
+ *
361
+ * @param assessmentId - ID of the assessment to finalize
362
+ * @param config - Optional config for required approvals
363
+ * @returns The finalized assessment
364
+ * @throws Error if assessment not found, not in review, or missing approvals
365
+ */
366
+ function finalizeAssessment(assessmentId, config) {
367
+ const assessment = assessments.get(assessmentId);
368
+ if (!assessment) {
369
+ throw new Error(`Assessment ${assessmentId} not found`);
370
+ }
371
+ if (assessment.status !== 'review') {
372
+ throw new Error(`Assessment must be in review status to finalize (current: ${assessment.status})`);
373
+ }
374
+ // Check required approvals
375
+ const impactConfig = config?.impact_assessment;
376
+ const requiredApprovals = impactConfig?.require_approvals || [];
377
+ const approvedRoles = new Set(assessment.approvals.map(a => a.approverRole));
378
+ for (const req of requiredApprovals) {
379
+ const role = typeof req === 'object' ? req.role : req;
380
+ if (role && !approvedRoles.has(role)) {
381
+ throw new Error(`Missing required approval from role: ${role}`);
382
+ }
383
+ }
384
+ assessment.status = 'approved';
385
+ assessment.updatedAt = nowIso();
386
+ // Emit finalization event
387
+ emitAssessmentEvent(assessment, 'impact_assessment_approved', config);
388
+ return assessment;
389
+ }
390
+ /**
391
+ * Archive an approved assessment.
392
+ *
393
+ * @param assessmentId - ID of the assessment to archive
394
+ * @returns The archived assessment
395
+ * @throws Error if assessment not found or not approved
396
+ */
397
+ function archiveAssessment(assessmentId) {
398
+ const assessment = assessments.get(assessmentId);
399
+ if (!assessment) {
400
+ throw new Error(`Assessment ${assessmentId} not found`);
401
+ }
402
+ if (assessment.status !== 'approved') {
403
+ throw new Error(`Assessment must be approved to archive (current: ${assessment.status})`);
404
+ }
405
+ assessment.status = 'archived';
406
+ assessment.updatedAt = nowIso();
407
+ return assessment;
408
+ }
409
+ /**
410
+ * Get an assessment by ID.
411
+ *
412
+ * @param assessmentId - ID of the assessment
413
+ * @returns The assessment if found, undefined otherwise
414
+ */
415
+ function getAssessment(assessmentId) {
416
+ return assessments.get(assessmentId);
417
+ }
418
+ /**
419
+ * Get all assessments for a system.
420
+ *
421
+ * @param systemId - ID of the AI system
422
+ * @returns List of assessments for the system
423
+ */
424
+ function getAssessmentsForSystem(systemId) {
425
+ return Array.from(assessments.values()).filter(a => a.systemId === systemId);
426
+ }
427
+ /**
428
+ * Get all registered assessments.
429
+ *
430
+ * @returns List of all assessments
431
+ */
432
+ function getAllAssessments() {
433
+ return Array.from(assessments.values());
434
+ }
435
+ /**
436
+ * Clear all assessments from the registry.
437
+ */
438
+ function clearAssessments() {
439
+ assessments.clear();
440
+ }
441
+ /**
442
+ * Get a summary of an assessment for reporting.
443
+ *
444
+ * @param assessmentId - ID of the assessment
445
+ * @returns Summary dict with key metrics
446
+ */
447
+ function getAssessmentSummary(assessmentId) {
448
+ const assessment = assessments.get(assessmentId);
449
+ if (!assessment) {
450
+ return {};
451
+ }
452
+ const allImpacts = [...assessment.individualImpacts, ...assessment.societalImpacts];
453
+ const maxRisk = allImpacts.length > 0 ? Math.max(...allImpacts.map(i => i.riskScore)) : 0;
454
+ const avgRisk = allImpacts.length > 0
455
+ ? allImpacts.reduce((sum, i) => sum + i.riskScore, 0) / allImpacts.length
456
+ : 0;
457
+ const highRiskCount = allImpacts.filter(i => i.riskScore >= 15).length;
458
+ const mitigatedCount = assessment.riskMitigations.filter(m => m.implementationStatus === 'implemented' || m.implementationStatus === 'verified').length;
459
+ return {
460
+ assessment_id: assessment.assessmentId,
461
+ system_id: assessment.systemId,
462
+ status: assessment.status,
463
+ version: assessment.version,
464
+ total_impacts: allImpacts.length,
465
+ individual_impacts: assessment.individualImpacts.length,
466
+ societal_impacts: assessment.societalImpacts.length,
467
+ max_risk_score: maxRisk,
468
+ average_risk_score: Math.round(avgRisk * 100) / 100,
469
+ high_risk_impacts: highRiskCount,
470
+ total_mitigations: assessment.riskMitigations.length,
471
+ implemented_mitigations: mitigatedCount,
472
+ residual_risks: assessment.residualRisks.length,
473
+ approvals_received: assessment.approvals.length,
474
+ approval_roles: assessment.approvals.map(a => a.approverRole),
475
+ };
476
+ }
477
+ /**
478
+ * Get aggregate report of all impact assessments.
479
+ *
480
+ * @param config - Optional config
481
+ * @returns Report dict for compliance reporting
482
+ */
483
+ function getImpactAssessmentReport(config) {
484
+ if (assessments.size === 0) {
485
+ return {
486
+ total_assessments: 0,
487
+ by_status: {},
488
+ systems_assessed: [],
489
+ };
490
+ }
491
+ const byStatus = {};
492
+ const systems = new Set();
493
+ let totalImpacts = 0;
494
+ let highRiskTotal = 0;
495
+ assessments.forEach(assessment => {
496
+ byStatus[assessment.status] = (byStatus[assessment.status] || 0) + 1;
497
+ systems.add(assessment.systemId);
498
+ const allImpacts = [...assessment.individualImpacts, ...assessment.societalImpacts];
499
+ totalImpacts += allImpacts.length;
500
+ highRiskTotal += allImpacts.filter(i => i.riskScore >= 15).length;
501
+ });
502
+ return {
503
+ total_assessments: assessments.size,
504
+ by_status: byStatus,
505
+ systems_assessed: Array.from(systems).sort(),
506
+ total_impacts_identified: totalImpacts,
507
+ high_risk_impacts: highRiskTotal,
508
+ };
509
+ }
510
+ /**
511
+ * Check if a system has approved impact assessment for production.
512
+ *
513
+ * @param systemId - ID of the AI system
514
+ * @param config - Optional config
515
+ * @returns Object with readiness status and details
516
+ */
517
+ function checkProductionReadiness(systemId, config) {
518
+ const impactConfig = config?.impact_assessment;
519
+ const requireBeforeProduction = impactConfig?.require_before_production !== false;
520
+ const systemAssessments = getAssessmentsForSystem(systemId);
521
+ const approved = systemAssessments.filter(a => a.status === 'approved');
522
+ if (!requireBeforeProduction) {
523
+ return {
524
+ ready: true,
525
+ reason: 'Impact assessment not required for production',
526
+ system_id: systemId,
527
+ };
528
+ }
529
+ if (approved.length === 0) {
530
+ return {
531
+ ready: false,
532
+ reason: 'No approved impact assessment found',
533
+ system_id: systemId,
534
+ assessments_found: systemAssessments.length,
535
+ statuses: systemAssessments.map(a => a.status),
536
+ };
537
+ }
538
+ const latest = approved.reduce((a, b) => (a.updatedAt > b.updatedAt ? a : b));
539
+ return {
540
+ ready: true,
541
+ reason: 'Approved impact assessment exists',
542
+ system_id: systemId,
543
+ assessment_id: latest.assessmentId,
544
+ assessment_version: latest.version,
545
+ approved_at: latest.updatedAt,
546
+ };
547
+ }
548
+ /**
549
+ * Emit an impact assessment event.
550
+ */
551
+ function emitAssessmentEvent(assessment, eventType, config) {
552
+ try {
553
+ // Import runtime to emit event
554
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
555
+ const { getState } = require('./runtime');
556
+ const state = getState();
557
+ if (state && typeof state.emitInternal === 'function') {
558
+ state.emitInternal({
559
+ event_type: eventType,
560
+ timestamp: nowIso(),
561
+ body: assessmentToDict(assessment),
562
+ });
563
+ }
564
+ }
565
+ catch (err) {
566
+ logger_1.logger.warning('Failed to emit impact assessment event:', err);
567
+ }
568
+ }
569
+ /**
570
+ * Emit the current state of an assessment as an event.
571
+ *
572
+ * @param assessmentId - ID of the assessment to emit
573
+ * @param config - Optional config
574
+ */
575
+ function emitImpactAssessment(assessmentId, config) {
576
+ const assessment = getAssessment(assessmentId);
577
+ if (assessment) {
578
+ emitAssessmentEvent(assessment, 'impact_assessment', config);
579
+ }
580
+ }
package/dist/index.d.ts CHANGED
@@ -9,13 +9,14 @@ export { verifyEventHash, verifyChain, verifyTraceChain, detectTampering, detect
9
9
  export { getCurrentContext, getCurrentSpan, pushSpan, popSpan, trace, traceAsync, startSpan, nextStepNumber, nextEventSequence, captureContext, runInContext, bindContext, Span, TraceContext, } from './context';
10
10
  export { tracedSetTimeout, tracedSetInterval, tracedSetImmediate, tracedNextTick, } from './timers';
11
11
  export { TracedEventEmitter, wrapEmitterWithContext } from './traced_emitter';
12
- export { loadConfig, MonoraConfig, PRESETS, PresetName, SinkConfig, parseSinkConfig, getPresetConfig, buildConfigFromOptions, } from './config';
13
- export { detectEnvironment, detectServiceName, detectInstalledSdks, autoDetectConfig, selectPresetForEnvironment, } from './autodetect';
12
+ export { loadConfig, MonoraConfig, PRESETS, PresetName, SinkConfig, DataResidency, parseSinkConfig, getPresetConfig, buildConfigFromOptions, } from './config';
13
+ export { validateDataResidency, enforceDataResidency, detectEndpointRegion, DataResidencyCheckResult, } from './dataResidency';
14
+ export { detectEnvironment, detectServiceName, detectInstalledSdks, autoDetectConfig, selectPresetForEnvironment, detectFramework, analyzeProjectWithAI, buildSmartConfig, FrameworkDetection, AIAnalysisResult, } from './autodetect';
14
15
  export { WriteAheadLog, WALConfig, WALEntry, createWalFromConfig } from './wal';
15
16
  export { EventSigner, SignatureVerifier, SigningConfig, EventSignature, createSignerFromConfig, verifyEventSignature, } from './signing';
16
17
  export { ulid, generateUlid } from './ids';
17
18
  export { EventBuilder } from './events';
18
- export { EventDispatcher } from './dispatcher';
19
+ export { EventDispatcher, AuditCallback, onEvent, clearAuditCallbacks, getAuditCallbackCount, } from './dispatcher';
19
20
  export { Sink, SinkError, StdoutSink, FileSink, HttpSink } from './sinks';
20
21
  export { DataHandlingEngine, DataHandlingViolation, buildDataViolation } from './data_handling';
21
22
  export { ViolationWebhookDispatcher, AlertError, buildViolationPayload } from './alerts';
@@ -23,8 +24,8 @@ export { buildReport, loadJsonl, writeJson, writeMarkdown } from './report';
23
24
  export { generateSecurityReport } from './security_report';
24
25
  export { buildAttestationBundle, signReportGpg, serializeReport } from './attestation';
25
26
  export { subscribe, unsubscribe, publishEvent, clearSubscriptions, EventBus, EventSubscription, EventCallback, getEventBus, } from './streaming';
26
- export { calculateComplianceScore, generateExecutiveSummary, writeExecutiveSummary, ComplianceScoreResult, } from './executiveSummary';
27
- export { init, InitOptions, shutdown, logEvent, llmCall, toolCall, agentStep, setViolationHandler, exportTrustPackage, } from './runtime';
27
+ export { calculateComplianceScore, generateExecutiveSummary, writeExecutiveSummary, getFrameworkWeights, ComplianceScoreResult, FrameworkWeights, FRAMEWORK_WEIGHTS, } from './executiveSummary';
28
+ export { init, InitOptions, InitEventCallback, shutdown, logEvent, llmCall, toolCall, agentStep, setViolationHandler, exportTrustPackage, } from './runtime';
28
29
  export { llmCallDecorator, toolCallDecorator, agentStepDecorator, LlmCallOptions, ToolCallOptions, AgentStepOptions, } from './decorators';
29
30
  export { callLlm, callTool, callAgent } from './api';
30
31
  export { autoInstrument, InstrumentationError } from './instrumentation';
@@ -36,7 +37,26 @@ export { validateConfig as validateConfigDiagnostics, doctorChecks, emitResults
36
37
  export { patchOpenAI, PatchOpenAIOptions, patchAnthropic, PatchAnthropicOptions, MonoraCallbackHandler, MonoraCallbackHandlerOptions, } from './integrations';
37
38
  export { logger, LogLevel, setLevel as setLogLevel, getLevel as getLogLevel, } from './logger';
38
39
  export { validateConfig, isValidConfig, getValidationErrors, ConfigValidationError, MonoraConfigSchema, ValidatedMonoraConfig, } from './config_schema';
40
+ export { applyConfigMigrations, LATEST_CONFIG_VERSION, ProductionReadinessWarning, validateProductionReadiness, checkPresetEnvironmentMismatch, logProductionWarnings, } from './config_migrations';
39
41
  export { PUPPETEER_AVAILABLE, PDFGenerationError, generateCompliancePdf, generateAIActPdf, computePdfSha256, } from './pdf_report';
40
42
  export { CircuitBreaker, CircuitBreakerConfig, CircuitBreakerError, CircuitState, } from './circuit_breaker';
41
43
  export { PROMETHEUS_AVAILABLE, STATSD_AVAILABLE, MetricsCollector, MetricsBackend, MinimalBackend, PrometheusBackend, StatsdBackend, Timer, getMetricsCollector, initMetrics, closeMetrics, recordEvent, recordApiCall, recordViolation, recordTokens, recordQueueDepth, recordRetryQueueDepth, recordRetryQueueOldestAge, recordRetryQueueDrops, recordCircuitBreakerState, recordCircuitBreakerTrip, } from './telemetry';
44
+ export { ProjectRegistration, UsageReport, AuditMetadata, AttributionEvent, AttributionCallback, TelemetryOptions, registerProject, getRegistration, enableTelemetry, disableTelemetry, isTelemetryEnabled, recordFeatureUsage, getFeaturesUsed, buildUsageReport, reportUsage, onAttributionEvent, setDataResidency, getDataResidency, setAuditMetadata, getAuditMetadata, getInstallId, sendTelemetryEvent, configureHttp, hasShownFirstRunPrompt, hasRegistration, promptForRegistration, showFirstRunPromptIfNeeded, resetFirstRunPrompt, } from './attribution';
45
+ export { PresetConfig, PRESETS as COMPLIANCE_PRESETS, getPreset, listPresets, getPresetConfig as getCompliancePresetConfig, mergeWithPreset, DEVELOPMENT, POC, STAGING, PRODUCTION, STRICT_ENTERPRISE, DEFAULT_SECURE, EXPERIMENTAL, AUDIT_FIRST, LOW_LATENCY, } from './presets';
46
+ export { ComplianceCheck, ComplianceCheckResult, ComplianceScoreBreakdown, UsageProfile, ComplianceCheckOptions, ComplianceCheckCallback, UsageProfileOptions, AssessmentReportOptions, runComplianceCheck, reportUsageProfile, onComplianceCheck, generateAssessmentReport, } from './assessment';
47
+ export { BuildModelSpecOptions, ValidateOnboardingOptions, CompleteOnboardingOptions, OnboardingResult, buildModelSpec, validateOnboarding, completeOnboarding, getOnboardingStatus, resolveEnrichmentPlan, } from './onboarding';
48
+ export { QuotaAction, QuotasConfig, DEFAULT_QUOTAS, QuotaCheckResult, QuotaExceededError, TraceUsage, TraceQuotaTracker, QuotaManager, } from './quotas';
49
+ export { Identity, IdentityToDictOptions, identityToDict, setIdentity, getIdentity, clearIdentity, withIdentity, withIdentityAsync, bindIdentity, getIdentityForEvent, validateIdentityRequirement, } from './identity';
50
+ export { RiskLevel, ModelRiskAssessment, RegisterModelRiskOptions, assessmentToDict, getRiskAssessment, registerModelRisk, unregisterModelRisk, clearRuntimeRegistry as clearRiskRegistry, getRiskForEvent, validateModelRisk, getAllAssessments as getAllRiskAssessments, } from './risk';
51
+ export { MeasurementType, BiasMetrics, BiasMeasurement, BiasCallback, RecordBiasMeasurementOptions, metricsToDict, measurementToEventBody, recordBiasMeasurement, checkThresholdViolations, setMeasurementCallback, getMeasurementCallback, getAllMeasurements as getAllBiasMeasurements, clearMeasurements as clearBiasMeasurements, getBiasSummary, } from './bias';
52
+ export { ReviewType, ReviewDecision, HumanReview, HumanOverride, PendingReview, RecordHumanReviewOptions, RecordHumanOverrideOptions, RequireReviewOptions, reviewToEventBody, overrideToEventBody, recordHumanReview, recordHumanOverride, requireReview, getPendingReviews, getTimedOutReviews, checkReviewRequired, getOversightSummary, clearOversightData, } from './oversight';
53
+ export { PolicyStatus, ConcernStatus, ConcernSeverity, PolicyApprovalEvent, PolicyVersion, PolicyDocument, AimsContextRecord, RaciEntry, ConcernHistoryEvent, ConcernReport, GovernanceTrainingRecord, DuePolicyReview, clearAimsGovernanceData, createPolicyDocument, addPolicyVersion, submitPolicyVersion, approvePolicyVersion, rejectPolicyVersion, recordPolicyReview, setPolicyReviewCadence, getPolicyDocument, listPolicyDocuments, getDuePolicyReviews, recordAimsContext, getAimsContext, registerRaciEntry, listRaciEntries, recordGovernanceTraining, listGovernanceTrainingRecords, fileConcernReport, updateConcernReport, resolveConcernReport, getConcernReport, listConcernReports, getOpenConcerns, getAimsGovernanceSummary, buildAimsGovernanceStatePayload, exportAimsGovernanceState, loadAimsGovernanceState, } from './aims_governance';
54
+ export { Iso42001WorkflowRecord, clearIso42001WorkflowData, recordPolicyAlignment, recordResourceInventory, recordResourceCompetency, recordImpactAssessment, recordResponsibleDevelopmentObjectives, recordResponsibleDevelopmentProcess, recordRequirementsSpecification, recordVerificationValidationPlan, recordDeploymentPlan, recordOperationsMonitoringPlan, recordStakeholderTechnicalDocumentation, recordLifecycleEventLoggingPolicy, recordDataAcquisition, recordDataQualityCriteria, recordDataProvenanceProcess, recordDataPreparationCriteria, recordTransparencyDisclosure, recordAdverseImpactReporting, recordIncidentCommunicationPlan, recordReportingObligations, recordResponsibleUseProcess, recordResponsibleUseObjectives, recordIntendedUseStatement, recordThirdPartyResponsibilityMatrix, recordSupplierAssurance, recordCustomerExpectationAlignment, recordInternalAuditReport, recordManagementReviewMinutes, recordCorrectiveActionLog, getIso42001WorkflowRecord, listIso42001WorkflowRecords, getIso42001WorkflowSummary, exportIso42001WorkflowState, loadIso42001WorkflowState, } from './iso42001_workflows';
55
+ export { consolidateLegacyIso42001Modules, identifyIso42001RemainingGaps, consolidateAndIdentifyIso42001Gaps, } from './iso42001_consolidation';
56
+ export { WorkflowStatus, WorkflowHistoryEntry, ControlWorkflow, ControlCoverageRow, clearControlRuntime, setControlCatalog, loadControlCatalog, getControlCatalog, loadDefaultIso42001Catalog, resolveControlIdsForEvidenceTypes, createWorkflowTask, getWorkflowTask, listWorkflowTasks, transitionWorkflowTask, submitWorkflowTask, approveControlEvidence, expireWorkflowTask, attachControlEvidence, importEvidenceManifest, bootstrapWorkflowsFromCatalog, prioritizeMissingWorkflowModules, generateControlCoverageReport, buildWorkflowStatePayload, exportWorkflowState, loadWorkflowState, } from './control_backbone';
57
+ export { EvidenceStore, EvidenceHashRecord, EvidenceHashChain, EvidenceLineageGraph, EvidenceManifest, computeEvidenceItemHash, buildEvidenceHashChain, verifyEvidenceHashChain, buildEvidenceLineageGraph, buildHashedEvidenceManifest, getRuntimeEvidenceStore, clearRuntimeEvidenceStore, recordRuntimeEvidence, buildRuntimeEvidenceManifest, } from './evidence_store';
58
+ export { FieldType, PIIType, FieldRole, FieldSpec, EnrichmentConfig, MonoraSpec, createFieldSpec, createEnrichmentConfig, createMonoraSpec, enrichmentConfigForFramework, mergeEnrichmentConfigs, fieldSpecToJsonSchema, fieldSpecToRedactionRule, getAllFields, getPiiFields, specToSchemaContract, specToConfig, specFromSchemaContract, specToDict, specFromDict, } from './spec';
59
+ export { detectFieldType, detectPiiType, suggestRole, detectTimestampField, flattenDict, collectFieldValues, computeFieldStats, inferSchemaFromEvents, inferSchemaFromFile, loadEventsFromFile, generateInferenceReport, InferSchemaOptions, InferenceReport, InferenceReportField, } from './schemaInference';
60
+ export { RiskCategory, ValidationError, ValidationResult, MonoraModel, CreateModelOptions, FromDataOptions, createMonoraModel, createValidationResult, validationResultToDict, modelFromData, modelFromSpec, validateEvent, generateConfig, modelToDict, modelToJson, modelFromDict, modelFromJson, saveModel, loadModel, saveSchemaContract, saveConfig, modelToString, } from './model';
61
+ export { ComplianceFramework, Soc2TrustPrinciple, Soc2ControlFamily, GdprArticle, Iso42001ControlArea, FrameworkMetadata, ComplianceTargets, SOC2_CONTROL_MAPPINGS, GDPR_ARTICLE_MAPPINGS, ISO42001_CONTROL_MAPPINGS, createComplianceTargets, getFrameworkMetadata, getAllFrameworks, getRequiredEnrichments, validateComplianceConfig, generateComplianceConfig, suggestFrameworksForIndustry, getControlMappings, isFrameworkSupported, } from './complianceTargets';
42
62
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}