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
package/dist/spec.js ADDED
@@ -0,0 +1,391 @@
1
+ "use strict";
2
+ /**
3
+ * Monora Schema Specification Types
4
+ *
5
+ * Provides typed schema definitions for AI model monitoring with
6
+ * field specifications, PII detection, and compliance configuration.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createFieldSpec = createFieldSpec;
10
+ exports.fieldSpecToJsonSchema = fieldSpecToJsonSchema;
11
+ exports.fieldSpecToRedactionRule = fieldSpecToRedactionRule;
12
+ exports.createEnrichmentConfig = createEnrichmentConfig;
13
+ exports.enrichmentConfigForFramework = enrichmentConfigForFramework;
14
+ exports.mergeEnrichmentConfigs = mergeEnrichmentConfigs;
15
+ exports.createMonoraSpec = createMonoraSpec;
16
+ exports.getAllFields = getAllFields;
17
+ exports.getPiiFields = getPiiFields;
18
+ exports.specToSchemaContract = specToSchemaContract;
19
+ exports.specToConfig = specToConfig;
20
+ exports.specFromSchemaContract = specFromSchemaContract;
21
+ exports.specToDict = specToDict;
22
+ exports.specFromDict = specFromDict;
23
+ /**
24
+ * Create a FieldSpec with defaults applied.
25
+ */
26
+ function createFieldSpec(name, dataType, options = {}) {
27
+ return {
28
+ name,
29
+ dataType,
30
+ required: options.required ?? true,
31
+ nullable: options.nullable ?? false,
32
+ description: options.description,
33
+ piiType: options.piiType,
34
+ redactionPattern: options.redactionPattern,
35
+ minValue: options.minValue,
36
+ maxValue: options.maxValue,
37
+ pattern: options.pattern,
38
+ role: options.role,
39
+ };
40
+ }
41
+ /**
42
+ * Convert FieldSpec to JSON Schema property definition.
43
+ */
44
+ function fieldSpecToJsonSchema(spec) {
45
+ const schema = {
46
+ type: spec.dataType,
47
+ };
48
+ if (spec.description) {
49
+ schema.description = spec.description;
50
+ }
51
+ if (spec.minValue !== undefined) {
52
+ schema.minimum = spec.minValue;
53
+ }
54
+ if (spec.maxValue !== undefined) {
55
+ schema.maximum = spec.maxValue;
56
+ }
57
+ if (spec.pattern) {
58
+ schema.pattern = spec.pattern;
59
+ }
60
+ return schema;
61
+ }
62
+ /**
63
+ * Convert FieldSpec to a redaction rule for data handling.
64
+ */
65
+ function fieldSpecToRedactionRule(spec) {
66
+ if (!spec.piiType) {
67
+ return null;
68
+ }
69
+ const patterns = {
70
+ email: '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}',
71
+ phone: '\\+?[\\d\\s\\-\\(\\)]{10,}',
72
+ ssn: '\\d{3}-?\\d{2}-?\\d{4}',
73
+ credit_card: '\\d{4}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}[\\s\\-]?\\d{4}',
74
+ ip_address: '\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}',
75
+ name: '.*',
76
+ address: '.*',
77
+ date_of_birth: '\\d{4}-\\d{2}-\\d{2}',
78
+ custom: '.*',
79
+ };
80
+ return {
81
+ fields: [spec.name],
82
+ pattern: spec.redactionPattern || patterns[spec.piiType],
83
+ replacement: `[REDACTED:${spec.piiType.toUpperCase()}]`,
84
+ };
85
+ }
86
+ /** Framework to enrichment mapping */
87
+ const FRAMEWORK_ENRICHMENTS = {
88
+ gdpr: {
89
+ dataRedaction: true,
90
+ dataGovernance: true,
91
+ identityTracking: true,
92
+ dataResidency: true,
93
+ },
94
+ soc2: {
95
+ identityTracking: true,
96
+ riskTracking: true,
97
+ immutability: true,
98
+ signing: true,
99
+ },
100
+ iso42001: {
101
+ riskTracking: true,
102
+ humanOversight: true,
103
+ biasDetection: true,
104
+ lifecycleTracking: true,
105
+ dataGovernance: true,
106
+ },
107
+ eu_ai_act: {
108
+ riskTracking: true,
109
+ humanOversight: true,
110
+ biasDetection: true,
111
+ dataGovernance: true,
112
+ lifecycleTracking: true,
113
+ },
114
+ hipaa: {
115
+ dataRedaction: true,
116
+ identityTracking: true,
117
+ immutability: true,
118
+ signing: true,
119
+ dataGovernance: true,
120
+ },
121
+ iso27001: {
122
+ immutability: true,
123
+ signing: true,
124
+ identityTracking: true,
125
+ riskTracking: true,
126
+ },
127
+ pci_dss: {
128
+ dataRedaction: true,
129
+ immutability: true,
130
+ signing: true,
131
+ identityTracking: true,
132
+ },
133
+ nist_ai_rmf: {
134
+ riskTracking: true,
135
+ humanOversight: true,
136
+ biasDetection: true,
137
+ lifecycleTracking: true,
138
+ },
139
+ };
140
+ /**
141
+ * Create default EnrichmentConfig.
142
+ */
143
+ function createEnrichmentConfig(options = {}) {
144
+ return {
145
+ biasDetection: options.biasDetection ?? false,
146
+ riskTracking: options.riskTracking ?? false,
147
+ humanOversight: options.humanOversight ?? false,
148
+ dataRedaction: options.dataRedaction ?? true,
149
+ identityTracking: options.identityTracking ?? false,
150
+ costTracking: options.costTracking ?? false,
151
+ immutability: options.immutability ?? true,
152
+ signing: options.signing ?? false,
153
+ dataGovernance: options.dataGovernance ?? false,
154
+ lifecycleTracking: options.lifecycleTracking ?? false,
155
+ dataResidency: options.dataResidency ?? false,
156
+ };
157
+ }
158
+ /**
159
+ * Get enrichment configuration for a specific compliance framework.
160
+ */
161
+ function enrichmentConfigForFramework(framework) {
162
+ const frameworkLower = framework.toLowerCase().replace(/-/g, '_');
163
+ const frameworkConfig = FRAMEWORK_ENRICHMENTS[frameworkLower] || {};
164
+ return createEnrichmentConfig(frameworkConfig);
165
+ }
166
+ /**
167
+ * Merge two enrichment configurations (union of enabled features).
168
+ */
169
+ function mergeEnrichmentConfigs(base, other) {
170
+ return {
171
+ biasDetection: base.biasDetection || other.biasDetection,
172
+ riskTracking: base.riskTracking || other.riskTracking,
173
+ humanOversight: base.humanOversight || other.humanOversight,
174
+ dataRedaction: base.dataRedaction || other.dataRedaction,
175
+ identityTracking: base.identityTracking || other.identityTracking,
176
+ costTracking: base.costTracking || other.costTracking,
177
+ immutability: base.immutability || other.immutability,
178
+ signing: base.signing || other.signing,
179
+ dataGovernance: base.dataGovernance || other.dataGovernance,
180
+ lifecycleTracking: base.lifecycleTracking || other.lifecycleTracking,
181
+ dataResidency: base.dataResidency || other.dataResidency,
182
+ };
183
+ }
184
+ /**
185
+ * Create a MonoraSpec with defaults applied.
186
+ */
187
+ function createMonoraSpec(options) {
188
+ return {
189
+ inputs: options.inputs,
190
+ outputs: options.outputs,
191
+ metadata: options.metadata ?? [],
192
+ identifiers: options.identifiers ?? [],
193
+ enrichments: options.enrichments ?? createEnrichmentConfig(),
194
+ complianceTargets: options.complianceTargets ?? [],
195
+ modelName: options.modelName,
196
+ modelVersion: options.modelVersion ?? '1.0.0',
197
+ description: options.description,
198
+ eventTimestampField: options.eventTimestampField ?? 'timestamp',
199
+ };
200
+ }
201
+ /**
202
+ * Get all fields from a MonoraSpec.
203
+ */
204
+ function getAllFields(spec) {
205
+ return [
206
+ ...spec.inputs,
207
+ ...spec.outputs,
208
+ ...(spec.metadata || []),
209
+ ...(spec.identifiers || []),
210
+ ];
211
+ }
212
+ /**
213
+ * Get fields with PII from a MonoraSpec.
214
+ */
215
+ function getPiiFields(spec) {
216
+ return getAllFields(spec).filter((f) => f.piiType);
217
+ }
218
+ /**
219
+ * Convert MonoraSpec to schema contract format for onboarding validation.
220
+ */
221
+ function specToSchemaContract(spec) {
222
+ const properties = {};
223
+ const required = [];
224
+ for (const field of getAllFields(spec)) {
225
+ properties[field.name] = fieldSpecToJsonSchema(field);
226
+ if (field.required) {
227
+ required.push(field.name);
228
+ }
229
+ }
230
+ return {
231
+ $schema: 'http://json-schema.org/draft-07/schema#',
232
+ type: 'object',
233
+ properties,
234
+ required,
235
+ roles: {
236
+ inputs: spec.inputs.map((f) => f.name),
237
+ outputs: spec.outputs.map((f) => f.name),
238
+ metadata: (spec.metadata || []).map((f) => f.name),
239
+ identifiers: (spec.identifiers || []).map((f) => f.name),
240
+ },
241
+ pii_fields: getPiiFields(spec).map((f) => ({
242
+ field: f.name,
243
+ type: f.piiType,
244
+ })),
245
+ model_info: {
246
+ name: spec.modelName,
247
+ version: spec.modelVersion,
248
+ description: spec.description,
249
+ },
250
+ };
251
+ }
252
+ /**
253
+ * Convert MonoraSpec to Monora configuration format.
254
+ */
255
+ function specToConfig(spec) {
256
+ const enrichments = spec.enrichments || createEnrichmentConfig();
257
+ const redactionRules = [];
258
+ // Build redaction rules from PII fields
259
+ for (const field of getPiiFields(spec)) {
260
+ const rule = fieldSpecToRedactionRule(field);
261
+ if (rule) {
262
+ redactionRules.push(rule);
263
+ }
264
+ }
265
+ const config = {
266
+ defaults: {
267
+ service_name: spec.modelName || 'monora-model',
268
+ },
269
+ model_spec: {
270
+ name: spec.modelName || 'monora-model',
271
+ version: spec.modelVersion || '1.0.0',
272
+ event_ts_field: spec.eventTimestampField || 'timestamp',
273
+ roles: {
274
+ inputs: spec.inputs.map((f) => f.name),
275
+ outputs: spec.outputs.map((f) => f.name),
276
+ metadata: (spec.metadata || []).map((f) => f.name),
277
+ identifiers: (spec.identifiers || []).map((f) => f.name),
278
+ },
279
+ },
280
+ immutability: {
281
+ enabled: enrichments.immutability ?? true,
282
+ verify_on_emit: true,
283
+ },
284
+ signing: {
285
+ enabled: enrichments.signing ?? false,
286
+ },
287
+ identity: {
288
+ enabled: enrichments.identityTracking ?? false,
289
+ },
290
+ risk_register: {
291
+ enabled: enrichments.riskTracking ?? false,
292
+ },
293
+ bias: {
294
+ enabled: enrichments.biasDetection ?? false,
295
+ },
296
+ human_oversight: {
297
+ enabled: enrichments.humanOversight ?? false,
298
+ },
299
+ data_governance: {
300
+ enabled: enrichments.dataGovernance ?? false,
301
+ },
302
+ lifecycle: {
303
+ enabled: enrichments.lifecycleTracking ?? false,
304
+ },
305
+ };
306
+ // Add data handling if redaction enabled
307
+ if (enrichments.dataRedaction && redactionRules.length > 0) {
308
+ config.data_handling = {
309
+ enabled: true,
310
+ mode: 'redact',
311
+ rules: redactionRules,
312
+ };
313
+ }
314
+ // Add compliance targets
315
+ if (spec.complianceTargets && spec.complianceTargets.length > 0) {
316
+ config.onboarding = {
317
+ enabled: true,
318
+ standards: spec.complianceTargets.map((t) => t.toUpperCase()),
319
+ };
320
+ }
321
+ return config;
322
+ }
323
+ /**
324
+ * Create MonoraSpec from a schema contract.
325
+ */
326
+ function specFromSchemaContract(contract) {
327
+ const roles = contract.roles || {};
328
+ const properties = contract.properties || {};
329
+ const piiFieldsRaw = contract.pii_fields || [];
330
+ const modelInfo = contract.model_info || {};
331
+ const piiMap = new Map();
332
+ for (const pii of piiFieldsRaw) {
333
+ if (pii.field && pii.type) {
334
+ piiMap.set(pii.field, pii.type);
335
+ }
336
+ }
337
+ const createFieldsFromRoles = (roleNames, role) => {
338
+ return (roleNames || []).map((name) => {
339
+ const prop = properties[name] || {};
340
+ return createFieldSpec(name, prop.type || 'string', {
341
+ description: prop.description,
342
+ piiType: piiMap.get(name),
343
+ required: (contract.required || []).includes(name),
344
+ role,
345
+ });
346
+ });
347
+ };
348
+ return createMonoraSpec({
349
+ inputs: createFieldsFromRoles(roles.inputs || [], 'input'),
350
+ outputs: createFieldsFromRoles(roles.outputs || [], 'output'),
351
+ metadata: createFieldsFromRoles(roles.metadata || [], 'metadata'),
352
+ identifiers: createFieldsFromRoles(roles.identifiers || [], 'identifier'),
353
+ modelName: modelInfo.name,
354
+ modelVersion: modelInfo.version,
355
+ description: modelInfo.description,
356
+ });
357
+ }
358
+ /**
359
+ * Convert MonoraSpec to dictionary representation.
360
+ */
361
+ function specToDict(spec) {
362
+ return {
363
+ inputs: spec.inputs,
364
+ outputs: spec.outputs,
365
+ metadata: spec.metadata || [],
366
+ identifiers: spec.identifiers || [],
367
+ enrichments: spec.enrichments || createEnrichmentConfig(),
368
+ compliance_targets: spec.complianceTargets || [],
369
+ model_name: spec.modelName,
370
+ model_version: spec.modelVersion,
371
+ description: spec.description,
372
+ event_timestamp_field: spec.eventTimestampField,
373
+ };
374
+ }
375
+ /**
376
+ * Create MonoraSpec from dictionary representation.
377
+ */
378
+ function specFromDict(data) {
379
+ return createMonoraSpec({
380
+ inputs: data.inputs || [],
381
+ outputs: data.outputs || [],
382
+ metadata: data.metadata || [],
383
+ identifiers: data.identifiers || [],
384
+ enrichments: data.enrichments,
385
+ complianceTargets: data.compliance_targets || data.complianceTargets,
386
+ modelName: data.model_name || data.modelName,
387
+ modelVersion: data.model_version || data.modelVersion,
388
+ description: data.description,
389
+ eventTimestampField: data.event_timestamp_field || data.eventTimestampField,
390
+ });
391
+ }
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Stakeholder & Third-Party Management for ISO 42001 A.8/A.10 compliance.
3
+ *
4
+ * This module provides stakeholder and third-party management supporting ISO 42001:
5
+ * - A.8.2: System documentation for users
6
+ * - A.10.2: Allocating responsibilities
7
+ * - A.10.3: Suppliers
8
+ * - A.10.4: Customers
9
+ *
10
+ * Cross-SDK Parity:
11
+ * Both Python and Node.js SDKs provide identical stakeholder APIs:
12
+ * - registerStakeholder() / register_stakeholder()
13
+ * - registerSupplier() / register_supplier()
14
+ * - registerCustomer() / register_customer()
15
+ * - allocateResponsibility() / allocate_responsibility()
16
+ */
17
+ import { MonoraConfig } from './config';
18
+ export type StakeholderType = 'user' | 'customer' | 'supplier' | 'regulator' | 'internal' | 'public';
19
+ export type SupplierRiskLevel = 'low' | 'medium' | 'high' | 'critical';
20
+ export type SupplierStatus = 'approved' | 'conditional' | 'under_review' | 'blocked';
21
+ export type ResponsibilityCategory = 'development' | 'operation' | 'governance' | 'compliance' | 'support';
22
+ /**
23
+ * Reference to documentation provided to stakeholder (A.8.2).
24
+ */
25
+ export interface DocumentRef {
26
+ docId: string;
27
+ title: string;
28
+ docType: string;
29
+ pathOrUrl: string;
30
+ version: string;
31
+ lastUpdated: string;
32
+ }
33
+ export declare function documentRefToDict(doc: DocumentRef): Record<string, any>;
34
+ /**
35
+ * A responsibility allocation (A.10.2).
36
+ */
37
+ export interface Responsibility {
38
+ responsibilityId: string;
39
+ description: string;
40
+ category: ResponsibilityCategory;
41
+ assignedTo: string;
42
+ agreedAt: string;
43
+ }
44
+ export declare function responsibilityToDict(resp: Responsibility): Record<string, any>;
45
+ /**
46
+ * Stakeholder record for ISO 42001 A.8/A.10.
47
+ */
48
+ export interface StakeholderRecord {
49
+ partyId: string;
50
+ name: string;
51
+ type: StakeholderType;
52
+ informationRequirements: string[];
53
+ documentationProvided: DocumentRef[];
54
+ responsibilities: Responsibility[];
55
+ contact: string;
56
+ communicationChannel: string;
57
+ notificationPreferences: Record<string, any>;
58
+ createdAt: string;
59
+ updatedAt: string;
60
+ }
61
+ export declare function stakeholderRecordToDict(record: StakeholderRecord): Record<string, any>;
62
+ /**
63
+ * Supplier record for ISO 42001 A.10.3.
64
+ */
65
+ export interface SupplierRecord {
66
+ supplierId: string;
67
+ name: string;
68
+ services: string[];
69
+ riskLevel: SupplierRiskLevel;
70
+ complianceRequirements: string[];
71
+ certifications: string[];
72
+ lastAssessmentDate?: string;
73
+ assessmentResults: Record<string, any>;
74
+ status: SupplierStatus;
75
+ contractRef: string;
76
+ contractExpiry?: string;
77
+ slaRequirements: Record<string, any>;
78
+ createdAt: string;
79
+ updatedAt: string;
80
+ }
81
+ export declare function supplierRecordToDict(record: SupplierRecord): Record<string, any>;
82
+ /**
83
+ * Customer record for ISO 42001 A.10.4.
84
+ */
85
+ export interface CustomerRecord {
86
+ customerId: string;
87
+ name: string;
88
+ statedNeeds: string[];
89
+ expectations: string[];
90
+ constraints: string[];
91
+ supportLevel: string;
92
+ escalationContact: string;
93
+ createdAt: string;
94
+ updatedAt: string;
95
+ }
96
+ export declare function customerRecordToDict(record: CustomerRecord): Record<string, any>;
97
+ /**
98
+ * Register a stakeholder.
99
+ */
100
+ export interface RegisterStakeholderOptions {
101
+ name: string;
102
+ stakeholderType: StakeholderType;
103
+ informationRequirements?: string[];
104
+ contact?: string;
105
+ communicationChannel?: string;
106
+ }
107
+ export declare function registerStakeholder(options: RegisterStakeholderOptions): StakeholderRecord;
108
+ export declare function getStakeholder(partyId: string): StakeholderRecord | undefined;
109
+ export declare function getAllStakeholders(): StakeholderRecord[];
110
+ /**
111
+ * Add documentation provided to stakeholder (A.8.2).
112
+ */
113
+ export interface AddStakeholderDocumentationOptions {
114
+ partyId: string;
115
+ title: string;
116
+ docType: string;
117
+ pathOrUrl: string;
118
+ version?: string;
119
+ }
120
+ export declare function addStakeholderDocumentation(options: AddStakeholderDocumentationOptions): DocumentRef;
121
+ /**
122
+ * Allocate a responsibility to a stakeholder (A.10.2).
123
+ */
124
+ export interface AllocateResponsibilityOptions {
125
+ partyId: string;
126
+ description: string;
127
+ category: ResponsibilityCategory;
128
+ }
129
+ export declare function allocateResponsibility(options: AllocateResponsibilityOptions): Responsibility;
130
+ /**
131
+ * Register a supplier (A.10.3).
132
+ */
133
+ export interface RegisterSupplierOptions {
134
+ name: string;
135
+ services?: string[];
136
+ riskLevel?: SupplierRiskLevel;
137
+ complianceRequirements?: string[];
138
+ certifications?: string[];
139
+ contractRef?: string;
140
+ config?: MonoraConfig;
141
+ }
142
+ export declare function registerSupplier(options: RegisterSupplierOptions): SupplierRecord;
143
+ export declare function getSupplier(supplierId: string): SupplierRecord | undefined;
144
+ export declare function getAllSuppliers(): SupplierRecord[];
145
+ /**
146
+ * Record supplier assessment results.
147
+ */
148
+ export interface AssessSupplierOptions {
149
+ supplierId: string;
150
+ assessmentResults: Record<string, any>;
151
+ assessedBy?: string;
152
+ }
153
+ export declare function assessSupplier(options: AssessSupplierOptions): SupplierRecord;
154
+ /**
155
+ * Update supplier approval status.
156
+ */
157
+ export interface UpdateSupplierStatusOptions {
158
+ supplierId: string;
159
+ status: SupplierStatus;
160
+ config?: MonoraConfig;
161
+ }
162
+ export declare function updateSupplierStatus(options: UpdateSupplierStatusOptions): SupplierRecord;
163
+ /**
164
+ * Register a customer (A.10.4).
165
+ */
166
+ export interface RegisterCustomerOptions {
167
+ name: string;
168
+ statedNeeds?: string[];
169
+ expectations?: string[];
170
+ constraints?: string[];
171
+ supportLevel?: string;
172
+ escalationContact?: string;
173
+ }
174
+ export declare function registerCustomer(options: RegisterCustomerOptions): CustomerRecord;
175
+ export declare function getCustomer(customerId: string): CustomerRecord | undefined;
176
+ export declare function getAllCustomers(): CustomerRecord[];
177
+ /**
178
+ * Update customer needs and expectations.
179
+ */
180
+ export interface UpdateCustomerNeedsOptions {
181
+ customerId: string;
182
+ statedNeeds?: string[];
183
+ expectations?: string[];
184
+ constraints?: string[];
185
+ }
186
+ export declare function updateCustomerNeeds(options: UpdateCustomerNeedsOptions): CustomerRecord;
187
+ export declare function clearStakeholders(): void;
188
+ export declare function clearSuppliers(): void;
189
+ export declare function clearCustomers(): void;
190
+ export declare function clearAll(): void;
191
+ /**
192
+ * Get summary of supplier risk levels.
193
+ */
194
+ export declare function getSupplierRiskSummary(config?: MonoraConfig): Record<string, any>;
195
+ /**
196
+ * Get aggregate stakeholder report.
197
+ */
198
+ export declare function getStakeholderReport(config?: MonoraConfig): Record<string, any>;
199
+ //# sourceMappingURL=stakeholders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakeholders.d.ts","sourceRoot":"","sources":["../src/stakeholders.ts"],"names":[],"mappings":"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"}