@pan-sec/notebooklm-mcp 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +61 -7
  2. package/SECURITY.md +40 -6
  3. package/dist/auth/mcp-auth.d.ts.map +1 -1
  4. package/dist/auth/mcp-auth.js +3 -6
  5. package/dist/auth/mcp-auth.js.map +1 -1
  6. package/dist/compliance/alert-manager.d.ts +120 -0
  7. package/dist/compliance/alert-manager.d.ts.map +1 -0
  8. package/dist/compliance/alert-manager.js +420 -0
  9. package/dist/compliance/alert-manager.js.map +1 -0
  10. package/dist/compliance/breach-detection.d.ts +134 -0
  11. package/dist/compliance/breach-detection.d.ts.map +1 -0
  12. package/dist/compliance/breach-detection.js +456 -0
  13. package/dist/compliance/breach-detection.js.map +1 -0
  14. package/dist/compliance/change-log.d.ts +113 -0
  15. package/dist/compliance/change-log.d.ts.map +1 -0
  16. package/dist/compliance/change-log.js +275 -0
  17. package/dist/compliance/change-log.js.map +1 -0
  18. package/dist/compliance/compliance-logger.d.ts +136 -0
  19. package/dist/compliance/compliance-logger.d.ts.map +1 -0
  20. package/dist/compliance/compliance-logger.js +425 -0
  21. package/dist/compliance/compliance-logger.js.map +1 -0
  22. package/dist/compliance/compliance-tools.d.ts +18 -0
  23. package/dist/compliance/compliance-tools.d.ts.map +1 -0
  24. package/dist/compliance/compliance-tools.js +673 -0
  25. package/dist/compliance/compliance-tools.js.map +1 -0
  26. package/dist/compliance/consent-manager.d.ts +130 -0
  27. package/dist/compliance/consent-manager.d.ts.map +1 -0
  28. package/dist/compliance/consent-manager.js +386 -0
  29. package/dist/compliance/consent-manager.js.map +1 -0
  30. package/dist/compliance/dashboard.d.ts +243 -0
  31. package/dist/compliance/dashboard.d.ts.map +1 -0
  32. package/dist/compliance/dashboard.js +519 -0
  33. package/dist/compliance/dashboard.js.map +1 -0
  34. package/dist/compliance/data-classification.d.ts +117 -0
  35. package/dist/compliance/data-classification.d.ts.map +1 -0
  36. package/dist/compliance/data-classification.js +469 -0
  37. package/dist/compliance/data-classification.js.map +1 -0
  38. package/dist/compliance/data-erasure.d.ts +110 -0
  39. package/dist/compliance/data-erasure.d.ts.map +1 -0
  40. package/dist/compliance/data-erasure.js +501 -0
  41. package/dist/compliance/data-erasure.js.map +1 -0
  42. package/dist/compliance/data-export.d.ts +85 -0
  43. package/dist/compliance/data-export.d.ts.map +1 -0
  44. package/dist/compliance/data-export.js +394 -0
  45. package/dist/compliance/data-export.js.map +1 -0
  46. package/dist/compliance/data-inventory.d.ts +136 -0
  47. package/dist/compliance/data-inventory.d.ts.map +1 -0
  48. package/dist/compliance/data-inventory.js +335 -0
  49. package/dist/compliance/data-inventory.js.map +1 -0
  50. package/dist/compliance/dsar-handler.d.ts +123 -0
  51. package/dist/compliance/dsar-handler.d.ts.map +1 -0
  52. package/dist/compliance/dsar-handler.js +371 -0
  53. package/dist/compliance/dsar-handler.js.map +1 -0
  54. package/dist/compliance/evidence-collector.d.ts +187 -0
  55. package/dist/compliance/evidence-collector.d.ts.map +1 -0
  56. package/dist/compliance/evidence-collector.js +656 -0
  57. package/dist/compliance/evidence-collector.js.map +1 -0
  58. package/dist/compliance/health-monitor.d.ts +111 -0
  59. package/dist/compliance/health-monitor.d.ts.map +1 -0
  60. package/dist/compliance/health-monitor.js +509 -0
  61. package/dist/compliance/health-monitor.js.map +1 -0
  62. package/dist/compliance/incident-manager.d.ts +131 -0
  63. package/dist/compliance/incident-manager.d.ts.map +1 -0
  64. package/dist/compliance/incident-manager.js +418 -0
  65. package/dist/compliance/incident-manager.js.map +1 -0
  66. package/dist/compliance/index.d.ts +32 -0
  67. package/dist/compliance/index.d.ts.map +1 -0
  68. package/dist/compliance/index.js +35 -0
  69. package/dist/compliance/index.js.map +1 -0
  70. package/dist/compliance/policy-docs.d.ts +108 -0
  71. package/dist/compliance/policy-docs.d.ts.map +1 -0
  72. package/dist/compliance/policy-docs.js +464 -0
  73. package/dist/compliance/policy-docs.js.map +1 -0
  74. package/dist/compliance/privacy-notice-text.d.ts +58 -0
  75. package/dist/compliance/privacy-notice-text.d.ts.map +1 -0
  76. package/dist/compliance/privacy-notice-text.js +161 -0
  77. package/dist/compliance/privacy-notice-text.js.map +1 -0
  78. package/dist/compliance/privacy-notice.d.ts +128 -0
  79. package/dist/compliance/privacy-notice.d.ts.map +1 -0
  80. package/dist/compliance/privacy-notice.js +250 -0
  81. package/dist/compliance/privacy-notice.js.map +1 -0
  82. package/dist/compliance/report-generator.d.ts +168 -0
  83. package/dist/compliance/report-generator.d.ts.map +1 -0
  84. package/dist/compliance/report-generator.js +830 -0
  85. package/dist/compliance/report-generator.js.map +1 -0
  86. package/dist/compliance/retention-engine.d.ts +130 -0
  87. package/dist/compliance/retention-engine.d.ts.map +1 -0
  88. package/dist/compliance/retention-engine.js +510 -0
  89. package/dist/compliance/retention-engine.js.map +1 -0
  90. package/dist/compliance/siem-exporter.d.ts +150 -0
  91. package/dist/compliance/siem-exporter.d.ts.map +1 -0
  92. package/dist/compliance/siem-exporter.js +509 -0
  93. package/dist/compliance/siem-exporter.js.map +1 -0
  94. package/dist/compliance/types.d.ts +601 -0
  95. package/dist/compliance/types.d.ts.map +1 -0
  96. package/dist/compliance/types.js +22 -0
  97. package/dist/compliance/types.js.map +1 -0
  98. package/dist/config.d.ts +4 -0
  99. package/dist/config.d.ts.map +1 -1
  100. package/dist/config.js +8 -1
  101. package/dist/config.js.map +1 -1
  102. package/dist/library/notebook-library.d.ts.map +1 -1
  103. package/dist/library/notebook-library.js +2 -1
  104. package/dist/library/notebook-library.js.map +1 -1
  105. package/dist/session/shared-context-manager.d.ts.map +1 -1
  106. package/dist/session/shared-context-manager.js +2 -1
  107. package/dist/session/shared-context-manager.js.map +1 -1
  108. package/dist/utils/audit-logger.d.ts +21 -1
  109. package/dist/utils/audit-logger.d.ts.map +1 -1
  110. package/dist/utils/audit-logger.js +53 -4
  111. package/dist/utils/audit-logger.js.map +1 -1
  112. package/dist/utils/crypto.d.ts.map +1 -1
  113. package/dist/utils/crypto.js +8 -15
  114. package/dist/utils/crypto.js.map +1 -1
  115. package/dist/utils/file-permissions.d.ts +85 -0
  116. package/dist/utils/file-permissions.d.ts.map +1 -0
  117. package/dist/utils/file-permissions.js +180 -0
  118. package/dist/utils/file-permissions.js.map +1 -0
  119. package/dist/utils/settings-manager.d.ts.map +1 -1
  120. package/dist/utils/settings-manager.js +6 -11
  121. package/dist/utils/settings-manager.js.map +1 -1
  122. package/docs/COMPLIANCE-SPEC.md +1452 -0
  123. package/package.json +30 -4
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Compliance Dashboard
3
+ *
4
+ * Provides a unified view of compliance status across all regulations.
5
+ * Aggregates data from all compliance components for reporting.
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ import type { IncidentType, IncidentSeverity, IncidentStatus } from "./types.js";
10
+ /**
11
+ * Dashboard data structure
12
+ */
13
+ export interface DashboardData {
14
+ generated_at: string;
15
+ overall_status: "compliant" | "at_risk" | "non_compliant";
16
+ health: HealthSummary;
17
+ gdpr: GDPRDashboard;
18
+ soc2: SOC2Dashboard;
19
+ cssf: CSSFDashboard;
20
+ security: SecurityDashboard;
21
+ recent_activity: RecentActivity;
22
+ }
23
+ /**
24
+ * Health summary
25
+ */
26
+ interface HealthSummary {
27
+ status: "healthy" | "degraded" | "unhealthy" | "unknown";
28
+ uptime_seconds: number;
29
+ uptime_formatted: string;
30
+ last_check?: string;
31
+ components_up: number;
32
+ components_down: number;
33
+ components_degraded: number;
34
+ }
35
+ /**
36
+ * GDPR compliance dashboard
37
+ */
38
+ interface GDPRDashboard {
39
+ status: "compliant" | "at_risk" | "non_compliant";
40
+ consent: {
41
+ valid_consents: number;
42
+ expired_consents: number;
43
+ total_purposes: number;
44
+ };
45
+ data_inventory: {
46
+ total_categories: number;
47
+ exportable: number;
48
+ erasable: number;
49
+ };
50
+ data_subjects: {
51
+ pending_dsars: number;
52
+ completed_dsars_30d: number;
53
+ pending_erasures: number;
54
+ completed_erasures_30d: number;
55
+ };
56
+ retention: {
57
+ active_policies: number;
58
+ items_due_for_deletion: number;
59
+ last_cleanup?: string;
60
+ };
61
+ }
62
+ /**
63
+ * SOC2 compliance dashboard
64
+ */
65
+ interface SOC2Dashboard {
66
+ status: "compliant" | "at_risk" | "non_compliant";
67
+ availability: {
68
+ current_status: string;
69
+ uptime_percentage: number;
70
+ last_incident?: string;
71
+ };
72
+ security: {
73
+ encryption_enabled: boolean;
74
+ auth_enabled: boolean;
75
+ cert_pinning_enabled: boolean;
76
+ open_incidents: number;
77
+ };
78
+ change_management: {
79
+ changes_30d: number;
80
+ high_impact_changes_30d: number;
81
+ pending_approvals: number;
82
+ };
83
+ logging: {
84
+ audit_enabled: boolean;
85
+ compliance_logging_enabled: boolean;
86
+ integrity_valid: boolean;
87
+ };
88
+ }
89
+ /**
90
+ * CSSF compliance dashboard
91
+ */
92
+ interface CSSFDashboard {
93
+ status: "compliant" | "at_risk" | "non_compliant";
94
+ audit_trail: {
95
+ enabled: boolean;
96
+ retention_years: number;
97
+ total_events: number;
98
+ integrity_valid: boolean;
99
+ };
100
+ incident_response: {
101
+ documented_procedures: boolean;
102
+ open_incidents: number;
103
+ mean_time_to_respond_hours?: number;
104
+ };
105
+ policies: {
106
+ total_policies: number;
107
+ enforced_policies: number;
108
+ due_for_review: number;
109
+ };
110
+ }
111
+ /**
112
+ * Security dashboard
113
+ */
114
+ interface SecurityDashboard {
115
+ status: "secure" | "at_risk" | "compromised";
116
+ incidents: {
117
+ total_incidents: number;
118
+ open_incidents: number;
119
+ by_severity: Record<IncidentSeverity, number>;
120
+ by_status: Record<IncidentStatus, number>;
121
+ by_type: Record<IncidentType, number>;
122
+ };
123
+ alerts: {
124
+ total_24h: number;
125
+ critical_24h: number;
126
+ unacknowledged: number;
127
+ };
128
+ breach_detection: {
129
+ enabled: boolean;
130
+ active_rules: number;
131
+ blocked_patterns: number;
132
+ };
133
+ }
134
+ /**
135
+ * Recent activity
136
+ */
137
+ interface RecentActivity {
138
+ recent_events: Array<{
139
+ timestamp: string;
140
+ type: string;
141
+ description: string;
142
+ severity: string;
143
+ }>;
144
+ recent_changes: Array<{
145
+ timestamp: string;
146
+ component: string;
147
+ setting: string;
148
+ impact: string;
149
+ }>;
150
+ recent_alerts: Array<{
151
+ timestamp: string;
152
+ severity: string;
153
+ title: string;
154
+ acknowledged: boolean;
155
+ }>;
156
+ }
157
+ /**
158
+ * Compliance Dashboard class
159
+ */
160
+ export declare class ComplianceDashboard {
161
+ private static instance;
162
+ private constructor();
163
+ /**
164
+ * Get singleton instance
165
+ */
166
+ static getInstance(): ComplianceDashboard;
167
+ /**
168
+ * Generate full dashboard data
169
+ */
170
+ generateDashboard(): Promise<DashboardData>;
171
+ /**
172
+ * Get health summary
173
+ */
174
+ private getHealthSummary;
175
+ /**
176
+ * Get GDPR dashboard
177
+ */
178
+ private getGDPRDashboard;
179
+ /**
180
+ * Get SOC2 dashboard
181
+ */
182
+ private getSOC2Dashboard;
183
+ /**
184
+ * Get CSSF dashboard
185
+ */
186
+ private getCSSFDashboard;
187
+ /**
188
+ * Get security dashboard
189
+ */
190
+ private getSecurityDashboard;
191
+ /**
192
+ * Get recent activity
193
+ */
194
+ private getRecentActivity;
195
+ /**
196
+ * Get compliance score (0-100)
197
+ */
198
+ getComplianceScore(): Promise<{
199
+ overall: number;
200
+ gdpr: number;
201
+ soc2: number;
202
+ cssf: number;
203
+ breakdown: Record<string, number>;
204
+ }>;
205
+ /**
206
+ * Calculate score from status
207
+ */
208
+ private calculateRegulationScore;
209
+ /**
210
+ * Get compliance summary for CLI display
211
+ */
212
+ getSummaryForCLI(): Promise<string>;
213
+ /**
214
+ * Format compliance status for display
215
+ */
216
+ private formatStatus;
217
+ /**
218
+ * Format health status for display
219
+ */
220
+ private formatHealthStatus;
221
+ /**
222
+ * Format security status for display
223
+ */
224
+ private formatSecurityStatus;
225
+ }
226
+ /**
227
+ * Get the compliance dashboard instance
228
+ */
229
+ export declare function getComplianceDashboard(): ComplianceDashboard;
230
+ /**
231
+ * Generate full dashboard data
232
+ */
233
+ export declare function generateDashboard(): Promise<DashboardData>;
234
+ /**
235
+ * Get compliance score
236
+ */
237
+ export declare function getComplianceScore(): Promise<ReturnType<ComplianceDashboard["getComplianceScore"]>>;
238
+ /**
239
+ * Get CLI summary
240
+ */
241
+ export declare function getDashboardCLI(): Promise<string>;
242
+ export {};
243
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/compliance/dashboard.ts"],"names":[],"mappings":"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"}