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/reporting.js CHANGED
@@ -36,7 +36,7 @@ var __importStar = (this && this.__importStar) || (function () {
36
36
  };
37
37
  })();
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.TraceReportManager = exports.TRUST_SUMMARY_EVENT_TYPE = void 0;
39
+ exports.TraceReportManager = exports.ComplianceMonitor = exports.COMPLIANCE_DRIFT_EVENT_TYPE = exports.TRUST_SUMMARY_EVENT_TYPE = void 0;
40
40
  const crypto = __importStar(require("crypto"));
41
41
  const fs = __importStar(require("fs"));
42
42
  const path = __importStar(require("path"));
@@ -47,6 +47,196 @@ const report_1 = require("./report");
47
47
  const security_report_1 = require("./security_report");
48
48
  const verify_1 = require("./verify");
49
49
  exports.TRUST_SUMMARY_EVENT_TYPE = 'trust_summary';
50
+ exports.COMPLIANCE_DRIFT_EVENT_TYPE = 'compliance_drift';
51
+ /**
52
+ * Continuous compliance monitoring for tracking score changes.
53
+ *
54
+ * Monitors compliance scores across traces and emits drift events
55
+ * when scores change significantly.
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const monitor = new ComplianceMonitor({
60
+ * driftThreshold: 5,
61
+ * onDrift: (event) => {
62
+ * if (event.driftDirection === 'degraded') {
63
+ * console.warn(`Compliance degraded: ${event.scoreDelta} points`);
64
+ * }
65
+ * },
66
+ * });
67
+ *
68
+ * // Record score after each trace
69
+ * monitor.recordScore('trace_1', 85, 'B');
70
+ * monitor.recordScore('trace_2', 78, 'C'); // Triggers drift event
71
+ * ```
72
+ */
73
+ class ComplianceMonitor {
74
+ constructor(options = {}) {
75
+ this.snapshots = [];
76
+ this.driftCallbacks = [];
77
+ this.driftThreshold = options.driftThreshold ?? 5;
78
+ this.maxSnapshots = options.maxSnapshots ?? 100;
79
+ this.framework = options.framework;
80
+ this.onDrift = options.onDrift;
81
+ }
82
+ /**
83
+ * Record a compliance score snapshot.
84
+ *
85
+ * @param traceId - Trace identifier
86
+ * @param score - Compliance score (0-100)
87
+ * @param grade - Grade letter (A-F)
88
+ * @param framework - Optional framework name
89
+ * @returns Drift event if threshold exceeded, null otherwise
90
+ */
91
+ recordScore(traceId, score, grade, framework) {
92
+ const snapshot = {
93
+ traceId,
94
+ score,
95
+ grade,
96
+ timestamp: new Date().toISOString(),
97
+ framework,
98
+ };
99
+ const previousSnapshot = this.getLatestSnapshot();
100
+ this.snapshots.push(snapshot);
101
+ // Trim old snapshots
102
+ if (this.snapshots.length > this.maxSnapshots) {
103
+ this.snapshots = this.snapshots.slice(-this.maxSnapshots);
104
+ }
105
+ // Check for drift
106
+ if (previousSnapshot) {
107
+ const scoreDelta = score - previousSnapshot.score;
108
+ const absDelta = Math.abs(scoreDelta);
109
+ if (absDelta >= this.driftThreshold) {
110
+ const driftEvent = {
111
+ eventType: exports.COMPLIANCE_DRIFT_EVENT_TYPE,
112
+ previousScore: previousSnapshot.score,
113
+ currentScore: score,
114
+ scoreDelta,
115
+ previousGrade: previousSnapshot.grade,
116
+ currentGrade: grade,
117
+ traceId,
118
+ previousTraceId: previousSnapshot.traceId,
119
+ timestamp: snapshot.timestamp,
120
+ driftDirection: scoreDelta > 0 ? 'improved' : scoreDelta < 0 ? 'degraded' : 'stable',
121
+ threshold: this.driftThreshold,
122
+ };
123
+ // Notify callbacks
124
+ this.notifyDrift(driftEvent);
125
+ return driftEvent;
126
+ }
127
+ }
128
+ return null;
129
+ }
130
+ /**
131
+ * Get the latest score snapshot.
132
+ */
133
+ getLatestSnapshot() {
134
+ return this.snapshots.length > 0 ? this.snapshots[this.snapshots.length - 1] : null;
135
+ }
136
+ /**
137
+ * Get all score snapshots.
138
+ */
139
+ getSnapshots() {
140
+ return [...this.snapshots];
141
+ }
142
+ /**
143
+ * Get score trend (average change over recent snapshots).
144
+ *
145
+ * @param windowSize - Number of recent snapshots to consider (default: 5)
146
+ */
147
+ getScoreTrend(windowSize = 5) {
148
+ if (this.snapshots.length < 2) {
149
+ return { trend: 'stable', avgChange: 0 };
150
+ }
151
+ const recentSnapshots = this.snapshots.slice(-windowSize);
152
+ if (recentSnapshots.length < 2) {
153
+ return { trend: 'stable', avgChange: 0 };
154
+ }
155
+ let totalChange = 0;
156
+ for (let i = 1; i < recentSnapshots.length; i++) {
157
+ totalChange += recentSnapshots[i].score - recentSnapshots[i - 1].score;
158
+ }
159
+ const avgChange = totalChange / (recentSnapshots.length - 1);
160
+ let trend;
161
+ if (avgChange > 1) {
162
+ trend = 'improving';
163
+ }
164
+ else if (avgChange < -1) {
165
+ trend = 'degrading';
166
+ }
167
+ else {
168
+ trend = 'stable';
169
+ }
170
+ return { trend, avgChange: Number(avgChange.toFixed(2)) };
171
+ }
172
+ /**
173
+ * Get compliance statistics.
174
+ */
175
+ getStatistics() {
176
+ if (this.snapshots.length === 0) {
177
+ return {
178
+ currentScore: null,
179
+ averageScore: 0,
180
+ minScore: 0,
181
+ maxScore: 0,
182
+ snapshotCount: 0,
183
+ trend: 'stable',
184
+ };
185
+ }
186
+ const scores = this.snapshots.map((s) => s.score);
187
+ const sum = scores.reduce((a, b) => a + b, 0);
188
+ return {
189
+ currentScore: scores[scores.length - 1],
190
+ averageScore: Number((sum / scores.length).toFixed(2)),
191
+ minScore: Math.min(...scores),
192
+ maxScore: Math.max(...scores),
193
+ snapshotCount: this.snapshots.length,
194
+ trend: this.getScoreTrend().trend,
195
+ };
196
+ }
197
+ /**
198
+ * Register a callback for drift events.
199
+ *
200
+ * @param callback - Function to call on drift
201
+ * @returns Unsubscribe function
202
+ */
203
+ onDriftEvent(callback) {
204
+ this.driftCallbacks.push(callback);
205
+ return () => {
206
+ const index = this.driftCallbacks.indexOf(callback);
207
+ if (index !== -1) {
208
+ this.driftCallbacks.splice(index, 1);
209
+ }
210
+ };
211
+ }
212
+ /**
213
+ * Clear all snapshots.
214
+ */
215
+ reset() {
216
+ this.snapshots = [];
217
+ }
218
+ notifyDrift(event) {
219
+ // Call constructor callback
220
+ if (this.onDrift) {
221
+ try {
222
+ this.onDrift(event);
223
+ }
224
+ catch {
225
+ // Ignore callback errors
226
+ }
227
+ }
228
+ // Call registered callbacks
229
+ for (const callback of this.driftCallbacks) {
230
+ try {
231
+ callback(event);
232
+ }
233
+ catch {
234
+ // Ignore callback errors
235
+ }
236
+ }
237
+ }
238
+ }
239
+ exports.ComplianceMonitor = ComplianceMonitor;
50
240
  class TraceReportManager {
51
241
  constructor(config) {
52
242
  this.eventsByTrace = new Map();
@@ -113,7 +303,7 @@ class TraceReportManager {
113
303
  this.eventsByTrace.delete(traceId);
114
304
  const dropped = this.droppedByTrace.get(traceId) || 0;
115
305
  this.droppedByTrace.delete(traceId);
116
- const report = (0, report_1.buildReport)(events, this.config.policies || {});
306
+ const report = (0, report_1.buildReport)(events, this.config.policies || {}, this.config.registry);
117
307
  const artifacts = [];
118
308
  const reportPaths = {};
119
309
  let reportDir = resolveReportDir(this.outputDir, traceId);
@@ -460,6 +650,7 @@ function buildTrustProofBundle(traceId, report, events, chainProof, artifacts, c
460
650
  const sanitizedEvents = redactHosts
461
651
  ? redactEventHosts(normalizedEvents, redactionPrefix)
462
652
  : normalizedEvents;
653
+ const includeEvents = config.reporting?.trust_bundle_include_events !== false;
463
654
  // Compute events digest
464
655
  const eventsDigestHash = (0, verify_1.computeEventsDigest)(sanitizedEvents);
465
656
  // Build artifact list for bundle
@@ -483,10 +674,10 @@ function buildTrustProofBundle(traceId, report, events, chainProof, artifacts, c
483
674
  eventsDigest: {
484
675
  total_events: sanitizedEvents.length,
485
676
  events_sha256: eventsDigestHash,
486
- events_included: true, // Embed events by default (user decision)
677
+ events_included: includeEvents,
487
678
  events_url: null,
488
679
  },
489
- events: sanitizedEvents, // Include raw events in bundle (user decision)
680
+ events: includeEvents ? sanitizedEvents : undefined,
490
681
  traceInfo: {
491
682
  trace_id: traceId,
492
683
  project_name: projectName,
@@ -517,7 +708,7 @@ function buildTrustProofBundle(traceId, report, events, chainProof, artifacts, c
517
708
  bundle = (0, attestation_1.buildAttestationBundle)(report, reportBytes, sigResult, {
518
709
  chainProof,
519
710
  eventsDigest: bundle.events_digest,
520
- events: sanitizedEvents,
711
+ events: includeEvents ? sanitizedEvents : undefined,
521
712
  traceInfo: bundle.trace_info,
522
713
  });
523
714
  bundle.report_artifacts = artifactList;
@@ -0,0 +1,285 @@
1
+ /**
2
+ * ISO 42001 Resource Inventory Management Module (A.4.2, A.4.4, A.4.5, A.2.4)
3
+ *
4
+ * Provides comprehensive resource tracking for AI systems including:
5
+ * - A.4.2: Resource determination
6
+ * - A.4.4: Tooling resources (algorithms, frameworks, libraries, models, tools)
7
+ * - A.4.5: Computing resources (cloud, on-premise, edge, hybrid)
8
+ * - A.4.6: Human resources (roles, competencies, certifications)
9
+ * - A.2.4: AI policy review scheduling and tracking
10
+ *
11
+ * This module enables organizations to maintain complete visibility
12
+ * into the resources supporting their AI systems.
13
+ */
14
+ export type ToolingResourceType = "algorithm" | "framework" | "library" | "model" | "tool";
15
+ export type ComputeResourceType = "cloud" | "on_premise" | "edge" | "hybrid";
16
+ export type PolicyType = "ai_policy" | "data_policy" | "security_policy" | "ethics_policy" | "privacy_policy" | "risk_policy" | "other";
17
+ export type ReviewStatus = "scheduled" | "in_progress" | "completed" | "overdue" | "cancelled";
18
+ export type PolicyStatus = "current" | "needs_update" | "deprecated";
19
+ /**
20
+ * Represents a tooling resource used in AI system development/operation.
21
+ * Covers algorithms, frameworks, libraries, models, and tools per ISO 42001 A.4.4.
22
+ */
23
+ export interface ToolingResource {
24
+ resourceId: string;
25
+ type: ToolingResourceType;
26
+ name: string;
27
+ version: string;
28
+ purpose: string;
29
+ license: string;
30
+ riskAssessment?: string;
31
+ approved: boolean;
32
+ approvedBy?: string;
33
+ approvedAt?: string;
34
+ addedAt: string;
35
+ metadata: Record<string, unknown>;
36
+ }
37
+ /**
38
+ * Represents a computing resource used by an AI system.
39
+ * Tracks infrastructure per ISO 42001 A.4.5.
40
+ */
41
+ export interface ComputeResource {
42
+ resourceId: string;
43
+ type: ComputeResourceType;
44
+ provider: string;
45
+ description: string;
46
+ capacity: Record<string, unknown>;
47
+ purpose: string;
48
+ costTier: string;
49
+ location?: string;
50
+ complianceCertifications: string[];
51
+ addedAt: string;
52
+ metadata: Record<string, unknown>;
53
+ }
54
+ /**
55
+ * Represents human resources involved in AI system development/operation.
56
+ * Tracks roles, competencies, and training per ISO 42001 A.4.6.
57
+ */
58
+ export interface HumanResource {
59
+ resourceId: string;
60
+ role: string;
61
+ name?: string;
62
+ competencies: string[];
63
+ certifications: string[];
64
+ trainingCompleted: string[];
65
+ trainingRequired: string[];
66
+ assignedSystems: string[];
67
+ department?: string;
68
+ addedAt: string;
69
+ updatedAt: string;
70
+ metadata: Record<string, unknown>;
71
+ }
72
+ /**
73
+ * Complete resource inventory for an AI system.
74
+ * Aggregates all resource types per ISO 42001 A.4.
75
+ */
76
+ export interface ResourceInventory {
77
+ inventoryId: string;
78
+ systemId: string;
79
+ name: string;
80
+ description: string;
81
+ dataResources: string[];
82
+ toolingResources: ToolingResource[];
83
+ computeResources: ComputeResource[];
84
+ humanResources: HumanResource[];
85
+ createdAt: string;
86
+ updatedAt: string;
87
+ metadata: Record<string, unknown>;
88
+ }
89
+ /**
90
+ * Tracks AI policy review scheduling and completion per ISO 42001 A.2.4.
91
+ */
92
+ export interface PolicyReview {
93
+ reviewId: string;
94
+ policyId: string;
95
+ policyName: string;
96
+ policyType: PolicyType;
97
+ policyVersion: string;
98
+ scheduledDate: string;
99
+ status: ReviewStatus;
100
+ reviewer?: string;
101
+ reviewDate?: string;
102
+ findings: string[];
103
+ recommendations: string[];
104
+ actionItems: string[];
105
+ policyStatus: PolicyStatus;
106
+ nextReviewDate?: string;
107
+ createdAt: string;
108
+ updatedAt: string;
109
+ metadata: Record<string, unknown>;
110
+ }
111
+ declare function toolingResourceToDict(resource: ToolingResource): Record<string, unknown>;
112
+ declare function computeResourceToDict(resource: ComputeResource): Record<string, unknown>;
113
+ declare function humanResourceToDict(resource: HumanResource): Record<string, unknown>;
114
+ declare function inventoryToDict(inventory: ResourceInventory): Record<string, unknown>;
115
+ declare function policyReviewToDict(review: PolicyReview): Record<string, unknown>;
116
+ declare class ResourceRegistry {
117
+ private inventories;
118
+ private policyReviews;
119
+ addInventory(inventory: ResourceInventory): void;
120
+ getInventory(inventoryId: string): ResourceInventory | undefined;
121
+ getInventoryBySystem(systemId: string): ResourceInventory | undefined;
122
+ listInventories(): ResourceInventory[];
123
+ addPolicyReview(review: PolicyReview): void;
124
+ getPolicyReview(reviewId: string): PolicyReview | undefined;
125
+ listPolicyReviews(status?: ReviewStatus, policyType?: PolicyType): PolicyReview[];
126
+ clear(): void;
127
+ }
128
+ export declare function getRegistry(): ResourceRegistry;
129
+ export interface CreateInventoryOptions {
130
+ systemId: string;
131
+ name?: string;
132
+ description?: string;
133
+ metadata?: Record<string, unknown>;
134
+ }
135
+ /**
136
+ * Create a new resource inventory for an AI system.
137
+ */
138
+ export declare function createResourceInventory(options: CreateInventoryOptions): ResourceInventory;
139
+ /**
140
+ * Get a resource inventory by ID.
141
+ */
142
+ export declare function getResourceInventory(inventoryId: string): ResourceInventory | undefined;
143
+ /**
144
+ * Get the resource inventory for a system.
145
+ */
146
+ export declare function getInventoryForSystem(systemId: string): ResourceInventory | undefined;
147
+ export interface AddToolingResourceOptions {
148
+ inventoryId: string;
149
+ type: ToolingResourceType;
150
+ name: string;
151
+ version: string;
152
+ purpose: string;
153
+ license: string;
154
+ riskAssessment?: string;
155
+ approved?: boolean;
156
+ approvedBy?: string;
157
+ metadata?: Record<string, unknown>;
158
+ }
159
+ /**
160
+ * Add a tooling resource to an inventory.
161
+ */
162
+ export declare function addToolingResource(options: AddToolingResourceOptions): ToolingResource | undefined;
163
+ export interface AddComputeResourceOptions {
164
+ inventoryId: string;
165
+ type: ComputeResourceType;
166
+ provider: string;
167
+ description: string;
168
+ capacity?: Record<string, unknown>;
169
+ purpose?: string;
170
+ costTier?: string;
171
+ location?: string;
172
+ complianceCertifications?: string[];
173
+ metadata?: Record<string, unknown>;
174
+ }
175
+ /**
176
+ * Add a computing resource to an inventory.
177
+ */
178
+ export declare function addComputeResource(options: AddComputeResourceOptions): ComputeResource | undefined;
179
+ export interface AddHumanResourceOptions {
180
+ inventoryId: string;
181
+ role: string;
182
+ name?: string;
183
+ competencies?: string[];
184
+ certifications?: string[];
185
+ trainingCompleted?: string[];
186
+ trainingRequired?: string[];
187
+ assignedSystems?: string[];
188
+ department?: string;
189
+ metadata?: Record<string, unknown>;
190
+ }
191
+ /**
192
+ * Add a human resource to an inventory.
193
+ */
194
+ export declare function addHumanResource(options: AddHumanResourceOptions): HumanResource | undefined;
195
+ /**
196
+ * Add a data resource reference to an inventory.
197
+ */
198
+ export declare function addDataResource(inventoryId: string, datasetId: string): boolean;
199
+ /**
200
+ * Approve a tooling resource for use.
201
+ */
202
+ export declare function approveToolingResource(inventoryId: string, resourceId: string, approver: string, riskAssessment?: string): boolean;
203
+ export interface InventorySummary {
204
+ inventoryId: string;
205
+ systemId: string;
206
+ name: string;
207
+ summary: {
208
+ dataResources: number;
209
+ toolingResources: {
210
+ total: number;
211
+ approved: number;
212
+ byType: Record<string, number>;
213
+ };
214
+ computeResources: {
215
+ total: number;
216
+ byType: Record<string, number>;
217
+ };
218
+ humanResources: {
219
+ total: number;
220
+ trainingGaps: number;
221
+ };
222
+ };
223
+ updatedAt: string;
224
+ }
225
+ /**
226
+ * Generate a summary of a resource inventory.
227
+ */
228
+ export declare function getInventorySummary(inventoryId: string): InventorySummary | undefined;
229
+ export interface SchedulePolicyReviewOptions {
230
+ policyId: string;
231
+ policyName: string;
232
+ policyType: PolicyType;
233
+ policyVersion: string;
234
+ scheduledDate: string;
235
+ metadata?: Record<string, unknown>;
236
+ }
237
+ /**
238
+ * Schedule a policy review.
239
+ */
240
+ export declare function schedulePolicyReview(options: SchedulePolicyReviewOptions): PolicyReview;
241
+ /**
242
+ * Start a policy review.
243
+ */
244
+ export declare function startPolicyReview(reviewId: string, reviewer: string): PolicyReview | undefined;
245
+ export interface CompletePolicyReviewOptions {
246
+ reviewId: string;
247
+ findings: string[];
248
+ recommendations: string[];
249
+ actionItems?: string[];
250
+ policyStatus?: PolicyStatus;
251
+ nextReviewDate?: string;
252
+ }
253
+ /**
254
+ * Complete a policy review with findings.
255
+ */
256
+ export declare function completePolicyReview(options: CompletePolicyReviewOptions): PolicyReview | undefined;
257
+ /**
258
+ * Cancel a scheduled policy review.
259
+ */
260
+ export declare function cancelPolicyReview(reviewId: string, reason: string): PolicyReview | undefined;
261
+ /**
262
+ * Find and mark overdue policy reviews.
263
+ */
264
+ export declare function checkOverdueReviews(): PolicyReview[];
265
+ export interface PolicyReviewSummary {
266
+ totalReviews: number;
267
+ byStatus: Record<string, number>;
268
+ byType: Record<string, number>;
269
+ upcoming: Array<{
270
+ reviewId: string;
271
+ policyName: string;
272
+ scheduledDate: string;
273
+ }>;
274
+ overdue: Array<Record<string, unknown>>;
275
+ }
276
+ /**
277
+ * Generate a summary of all policy reviews.
278
+ */
279
+ export declare function getPolicyReviewSummary(): PolicyReviewSummary;
280
+ /**
281
+ * Emit a custom resource event.
282
+ */
283
+ export declare function emitCustomResourceEvent(eventType: string, inventoryId?: string, data?: Record<string, unknown>): void;
284
+ export { ResourceRegistry, inventoryToDict, policyReviewToDict, toolingResourceToDict, computeResourceToDict, humanResourceToDict, };
285
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}