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
@@ -52,6 +52,7 @@ const circuit_breaker_1 = require("../circuit_breaker");
52
52
  const verify_1 = require("../verify");
53
53
  const telemetry_1 = require("../telemetry");
54
54
  const logger_1 = require("../logger");
55
+ const dataResidency_1 = require("../dataResidency");
55
56
  function sleep(ms) {
56
57
  return new Promise((resolve) => setTimeout(resolve, ms));
57
58
  }
@@ -73,6 +74,7 @@ class HttpRetryQueue {
73
74
  const filepath = path.join(this.queueDir, filename);
74
75
  const payload = {
75
76
  created_at: new Date().toISOString(),
77
+ attempts: 0,
76
78
  events,
77
79
  };
78
80
  fs.writeFileSync(filepath, JSON.stringify(payload));
@@ -103,8 +105,9 @@ class HttpRetryQueue {
103
105
  try {
104
106
  await sendFunc(events);
105
107
  }
106
- catch {
107
- return;
108
+ catch (error) {
109
+ this.handleSendFailure(filepath, payload, error);
110
+ continue;
108
111
  }
109
112
  this.removeFile(filepath);
110
113
  }
@@ -119,7 +122,9 @@ class HttpRetryQueue {
119
122
  try {
120
123
  entries = fs
121
124
  .readdirSync(this.queueDir)
122
- .filter((entry) => entry.endsWith('.json') && entry !== HttpRetryQueue.STATS_FILENAME);
125
+ .filter((entry) => entry.endsWith('.json') &&
126
+ entry !== HttpRetryQueue.STATS_FILENAME &&
127
+ !entry.endsWith(HttpRetryQueue.DEAD_LETTER_SUFFIX));
123
128
  }
124
129
  catch {
125
130
  return [];
@@ -135,12 +140,58 @@ class HttpRetryQueue {
135
140
  // Best-effort cleanup
136
141
  }
137
142
  }
143
+ handleSendFailure(filepath, payload, error) {
144
+ const attempts = this.getAttempts(payload);
145
+ const nextAttempts = attempts + 1;
146
+ payload.attempts = nextAttempts;
147
+ payload.updated_at = new Date().toISOString();
148
+ logger_1.logger.warning('HTTP retry queue send failed: %s', error);
149
+ if (nextAttempts >= HttpRetryQueue.MAX_ATTEMPTS) {
150
+ logger_1.logger.warning('HTTP retry queue max attempts reached (%d); moving batch to dead letter.', nextAttempts);
151
+ this.moveToDeadLetter(filepath, payload);
152
+ return;
153
+ }
154
+ this.requeueFile(filepath, payload);
155
+ }
156
+ getAttempts(payload) {
157
+ const attempts = Number(payload.attempts);
158
+ return Number.isFinite(attempts) && attempts >= 0 ? attempts : 0;
159
+ }
160
+ requeueFile(filepath, payload) {
161
+ const tmpPath = `${filepath}.tmp`;
162
+ try {
163
+ fs.writeFileSync(tmpPath, JSON.stringify(payload));
164
+ fs.renameSync(tmpPath, filepath);
165
+ }
166
+ catch (error) {
167
+ logger_1.logger.warning('Failed to requeue HTTP retry batch: %s', error);
168
+ try {
169
+ if (fs.existsSync(tmpPath)) {
170
+ fs.unlinkSync(tmpPath);
171
+ }
172
+ }
173
+ catch {
174
+ return;
175
+ }
176
+ }
177
+ }
178
+ moveToDeadLetter(filepath, payload) {
179
+ const baseName = this.nextFilename().replace(/\.json$/, '');
180
+ const deadPath = path.join(this.queueDir, `${baseName}${HttpRetryQueue.DEAD_LETTER_SUFFIX}`);
181
+ try {
182
+ fs.writeFileSync(deadPath, JSON.stringify(payload));
183
+ this.removeFile(filepath);
184
+ }
185
+ catch (error) {
186
+ logger_1.logger.warning('Failed to move HTTP retry batch to dead letter: %s', error);
187
+ }
188
+ }
138
189
  pruneIfNeeded() {
139
190
  if (this.maxItems <= 0) {
140
191
  return;
141
192
  }
142
193
  const files = this.listFiles();
143
- if (files.length < this.maxItems) {
194
+ if (files.length <= this.maxItems - 1) {
144
195
  return;
145
196
  }
146
197
  const excess = files.length - this.maxItems + 1;
@@ -233,8 +284,18 @@ class HttpRetryQueue {
233
284
  }
234
285
  }
235
286
  HttpRetryQueue.STATS_FILENAME = '.monora_retry_queue_stats.json';
287
+ HttpRetryQueue.DEAD_LETTER_SUFFIX = '.dead.json';
288
+ HttpRetryQueue.MAX_ATTEMPTS = 5;
236
289
  class HttpSink {
237
290
  constructor(endpoint, headers, options) {
291
+ // Enforce data residency before accepting the endpoint
292
+ const residencyConfig = options?.dataResidency || {};
293
+ if (residencyConfig.residency) {
294
+ this.dataResidencyResult = (0, dataResidency_1.enforceDataResidency)(endpoint, residencyConfig.residency, residencyConfig.action || 'warn');
295
+ }
296
+ else {
297
+ this.dataResidencyResult = null;
298
+ }
238
299
  this.endpoint = endpoint;
239
300
  this.headers = headers;
240
301
  this.batchSize = options?.batchSize || 50;
@@ -243,8 +304,13 @@ class HttpSink {
243
304
  this.backoffBaseSec = options?.backoffBaseSec || 0.5;
244
305
  this.buffer = [];
245
306
  this.retryIntervalMs = 5000;
246
- this.idempotencyEnabled = true;
247
- this.idempotencyHeader = 'Idempotency-Key';
307
+ const idempotencyConfig = options?.idempotency;
308
+ this.idempotencyEnabled = idempotencyConfig?.enabled ?? true;
309
+ const headerValue = idempotencyConfig?.header ?? idempotencyConfig?.headerName;
310
+ this.idempotencyHeader =
311
+ headerValue && headerValue.trim().length > 0
312
+ ? headerValue.trim()
313
+ : 'Idempotency-Key';
248
314
  this.flushing = false;
249
315
  // Initialize circuit breaker
250
316
  const cbConfig = options?.circuitBreaker || {};
@@ -273,14 +339,6 @@ class HttpSink {
273
339
  this.retryTimer.unref();
274
340
  }
275
341
  }
276
- const idempotencyConfig = options?.idempotency || {};
277
- if (idempotencyConfig.enabled === false) {
278
- this.idempotencyEnabled = false;
279
- }
280
- const headerName = idempotencyConfig.headerName;
281
- if (headerName && headerName.trim().length > 0) {
282
- this.idempotencyHeader = headerName.trim();
283
- }
284
342
  }
285
343
  emit(events) {
286
344
  this.buffer.push(...events);
@@ -306,8 +364,10 @@ class HttpSink {
306
364
  try {
307
365
  await this.drainRetryQueue();
308
366
  while (this.buffer.length > 0) {
309
- const batch = this.buffer;
310
- this.buffer = [];
367
+ const batch = this.buffer.splice(0);
368
+ if (batch.length === 0) {
369
+ break;
370
+ }
311
371
  try {
312
372
  await this.sendPayload(batch);
313
373
  }
@@ -4,6 +4,7 @@
4
4
  import { Sink } from './base';
5
5
  export declare class StdoutSink implements Sink {
6
6
  private format;
7
+ private quiet;
7
8
  constructor(format?: 'json' | 'pretty');
8
9
  emit(events: Array<Record<string, any>>): void;
9
10
  flush(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"stdout.d.ts","sourceRoot":"","sources":["../../src/sinks/stdout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,qBAAa,UAAW,YAAW,IAAI;IACrC,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,GAAE,MAAM,GAAG,QAAiB;IAI9C,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;IAkB9C,KAAK,IAAI,IAAI;IAIb,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"stdout.d.ts","sourceRoot":"","sources":["../../src/sinks/stdout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,qBAAa,UAAW,YAAW,IAAI;IACrC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,GAAE,MAAM,GAAG,QAAmB;IAKhD,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;IAqB9C,KAAK,IAAI,IAAI;IAIb,KAAK,IAAI,IAAI;CAGd"}
@@ -6,10 +6,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.StdoutSink = void 0;
7
7
  const util_1 = require("util");
8
8
  class StdoutSink {
9
- constructor(format = 'json') {
9
+ constructor(format = 'pretty') {
10
10
  this.format = format;
11
+ this.quiet = isQuietMode();
11
12
  }
12
13
  emit(events) {
14
+ if (this.quiet) {
15
+ return;
16
+ }
13
17
  for (const event of events) {
14
18
  try {
15
19
  const payload = this.format === 'pretty'
@@ -32,3 +36,10 @@ class StdoutSink {
32
36
  }
33
37
  }
34
38
  exports.StdoutSink = StdoutSink;
39
+ function isQuietMode() {
40
+ const raw = String(process.env.MONORA_QUIET || '').trim().toLowerCase();
41
+ if (!raw) {
42
+ return false;
43
+ }
44
+ return ['1', 'true', 'yes', 'on'].includes(raw);
45
+ }
package/dist/spec.d.ts ADDED
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Monora Schema Specification Types
3
+ *
4
+ * Provides typed schema definitions for AI model monitoring with
5
+ * field specifications, PII detection, and compliance configuration.
6
+ */
7
+ /** Field data types for schema definition */
8
+ export type FieldType = 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object';
9
+ /** Types of PII that can be detected in fields */
10
+ export type PIIType = 'email' | 'phone' | 'ssn' | 'credit_card' | 'name' | 'address' | 'ip_address' | 'date_of_birth' | 'custom';
11
+ /** Field role in the AI system */
12
+ export type FieldRole = 'input' | 'output' | 'metadata' | 'identifier';
13
+ /**
14
+ * Specification for a single field in the schema.
15
+ */
16
+ export interface FieldSpec {
17
+ /** Field name (supports dot notation for nested fields) */
18
+ name: string;
19
+ /** Data type of the field */
20
+ dataType: FieldType;
21
+ /** Whether the field is required */
22
+ required?: boolean;
23
+ /** Whether the field can be null */
24
+ nullable?: boolean;
25
+ /** Human-readable description */
26
+ description?: string;
27
+ /** Type of PII contained, if any */
28
+ piiType?: PIIType;
29
+ /** Regex pattern for redacting PII */
30
+ redactionPattern?: string;
31
+ /** Minimum value for numeric fields */
32
+ minValue?: number;
33
+ /** Maximum value for numeric fields */
34
+ maxValue?: number;
35
+ /** Regex pattern for string validation */
36
+ pattern?: string;
37
+ /** Role of the field (input/output/metadata/identifier) */
38
+ role?: FieldRole;
39
+ }
40
+ /**
41
+ * Create a FieldSpec with defaults applied.
42
+ */
43
+ export declare function createFieldSpec(name: string, dataType: FieldType, options?: Partial<Omit<FieldSpec, 'name' | 'dataType'>>): FieldSpec;
44
+ /**
45
+ * Convert FieldSpec to JSON Schema property definition.
46
+ */
47
+ export declare function fieldSpecToJsonSchema(spec: FieldSpec): Record<string, any>;
48
+ /**
49
+ * Convert FieldSpec to a redaction rule for data handling.
50
+ */
51
+ export declare function fieldSpecToRedactionRule(spec: FieldSpec): Record<string, any> | null;
52
+ /**
53
+ * Enrichment configuration for compliance features.
54
+ */
55
+ export interface EnrichmentConfig {
56
+ /** Enable bias detection */
57
+ biasDetection?: boolean;
58
+ /** Enable risk tracking */
59
+ riskTracking?: boolean;
60
+ /** Enable human oversight */
61
+ humanOversight?: boolean;
62
+ /** Enable data redaction */
63
+ dataRedaction?: boolean;
64
+ /** Enable identity tracking */
65
+ identityTracking?: boolean;
66
+ /** Enable cost tracking */
67
+ costTracking?: boolean;
68
+ /** Enable immutability/hash chain */
69
+ immutability?: boolean;
70
+ /** Enable event signing */
71
+ signing?: boolean;
72
+ /** Enable data governance */
73
+ dataGovernance?: boolean;
74
+ /** Enable lifecycle tracking */
75
+ lifecycleTracking?: boolean;
76
+ /** Enable data residency enforcement */
77
+ dataResidency?: boolean;
78
+ }
79
+ /**
80
+ * Create default EnrichmentConfig.
81
+ */
82
+ export declare function createEnrichmentConfig(options?: Partial<EnrichmentConfig>): EnrichmentConfig;
83
+ /**
84
+ * Get enrichment configuration for a specific compliance framework.
85
+ */
86
+ export declare function enrichmentConfigForFramework(framework: string): EnrichmentConfig;
87
+ /**
88
+ * Merge two enrichment configurations (union of enabled features).
89
+ */
90
+ export declare function mergeEnrichmentConfigs(base: EnrichmentConfig, other: EnrichmentConfig): EnrichmentConfig;
91
+ /**
92
+ * MonoraSpec - Complete schema specification for an AI model.
93
+ */
94
+ export interface MonoraSpec {
95
+ /** Input fields (prompts, queries, etc.) */
96
+ inputs: FieldSpec[];
97
+ /** Output fields (responses, completions, etc.) */
98
+ outputs: FieldSpec[];
99
+ /** Metadata fields (timestamps, service info, etc.) */
100
+ metadata?: FieldSpec[];
101
+ /** Identifier fields (trace_id, event_id, etc.) */
102
+ identifiers?: FieldSpec[];
103
+ /** Enrichment configuration */
104
+ enrichments?: EnrichmentConfig;
105
+ /** Compliance frameworks to target */
106
+ complianceTargets?: string[];
107
+ /** Model/application name */
108
+ modelName?: string;
109
+ /** Model version */
110
+ modelVersion?: string;
111
+ /** Human-readable description */
112
+ description?: string;
113
+ /** Event timestamp field name */
114
+ eventTimestampField?: string;
115
+ }
116
+ /**
117
+ * Create a MonoraSpec with defaults applied.
118
+ */
119
+ export declare function createMonoraSpec(options: {
120
+ inputs: FieldSpec[];
121
+ outputs: FieldSpec[];
122
+ metadata?: FieldSpec[];
123
+ identifiers?: FieldSpec[];
124
+ enrichments?: EnrichmentConfig;
125
+ complianceTargets?: string[];
126
+ modelName?: string;
127
+ modelVersion?: string;
128
+ description?: string;
129
+ eventTimestampField?: string;
130
+ }): MonoraSpec;
131
+ /**
132
+ * Get all fields from a MonoraSpec.
133
+ */
134
+ export declare function getAllFields(spec: MonoraSpec): FieldSpec[];
135
+ /**
136
+ * Get fields with PII from a MonoraSpec.
137
+ */
138
+ export declare function getPiiFields(spec: MonoraSpec): FieldSpec[];
139
+ /**
140
+ * Convert MonoraSpec to schema contract format for onboarding validation.
141
+ */
142
+ export declare function specToSchemaContract(spec: MonoraSpec): Record<string, any>;
143
+ /**
144
+ * Convert MonoraSpec to Monora configuration format.
145
+ */
146
+ export declare function specToConfig(spec: MonoraSpec): Record<string, any>;
147
+ /**
148
+ * Create MonoraSpec from a schema contract.
149
+ */
150
+ export declare function specFromSchemaContract(contract: Record<string, any>): MonoraSpec;
151
+ /**
152
+ * Convert MonoraSpec to dictionary representation.
153
+ */
154
+ export declare function specToDict(spec: MonoraSpec): Record<string, any>;
155
+ /**
156
+ * Create MonoraSpec from dictionary representation.
157
+ */
158
+ export declare function specFromDict(data: Record<string, any>): MonoraSpec;
159
+ //# sourceMappingURL=spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}