@pan-sec/notebooklm-mcp 2026.3.3 → 2026.4.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 (466) hide show
  1. package/dist/auth/auth-manager.d.ts +0 -1
  2. package/dist/auth/auth-manager.js +0 -1
  3. package/dist/auth/mcp-auth.d.ts +0 -1
  4. package/dist/auth/mcp-auth.js +0 -1
  5. package/dist/compliance/alert-manager.d.ts +6 -2
  6. package/dist/compliance/alert-manager.js +40 -10
  7. package/dist/compliance/breach-detection.d.ts +0 -1
  8. package/dist/compliance/breach-detection.js +0 -1
  9. package/dist/compliance/change-log.d.ts +13 -1
  10. package/dist/compliance/change-log.js +82 -16
  11. package/dist/compliance/compliance-logger.d.ts +29 -3
  12. package/dist/compliance/compliance-logger.js +90 -27
  13. package/dist/compliance/compliance-tools.d.ts +0 -1
  14. package/dist/compliance/compliance-tools.js +0 -1
  15. package/dist/compliance/consent-manager.d.ts +0 -1
  16. package/dist/compliance/consent-manager.js +0 -1
  17. package/dist/compliance/dashboard.d.ts +4 -3
  18. package/dist/compliance/dashboard.js +11 -8
  19. package/dist/compliance/data-classification.d.ts +0 -1
  20. package/dist/compliance/data-classification.js +0 -1
  21. package/dist/compliance/data-erasure.d.ts +0 -1
  22. package/dist/compliance/data-erasure.js +0 -1
  23. package/dist/compliance/data-export.d.ts +0 -1
  24. package/dist/compliance/data-export.js +0 -1
  25. package/dist/compliance/data-inventory.d.ts +0 -1
  26. package/dist/compliance/data-inventory.js +0 -1
  27. package/dist/compliance/dsar-handler.d.ts +0 -1
  28. package/dist/compliance/dsar-handler.js +0 -1
  29. package/dist/compliance/evidence-collector.d.ts +0 -1
  30. package/dist/compliance/evidence-collector.js +4 -2
  31. package/dist/compliance/health-monitor.d.ts +0 -1
  32. package/dist/compliance/health-monitor.js +0 -1
  33. package/dist/compliance/incident-manager.d.ts +0 -1
  34. package/dist/compliance/incident-manager.js +0 -1
  35. package/dist/compliance/index.d.ts +0 -1
  36. package/dist/compliance/index.js +0 -1
  37. package/dist/compliance/policy-docs.d.ts +0 -1
  38. package/dist/compliance/policy-docs.js +0 -1
  39. package/dist/compliance/privacy-notice-text.d.ts +0 -1
  40. package/dist/compliance/privacy-notice-text.js +0 -1
  41. package/dist/compliance/privacy-notice.d.ts +0 -1
  42. package/dist/compliance/privacy-notice.js +0 -1
  43. package/dist/compliance/report-generator.d.ts +7 -1
  44. package/dist/compliance/report-generator.js +116 -34
  45. package/dist/compliance/retention-engine.d.ts +0 -1
  46. package/dist/compliance/retention-engine.js +0 -1
  47. package/dist/compliance/siem-exporter.d.ts +26 -2
  48. package/dist/compliance/siem-exporter.js +89 -24
  49. package/dist/compliance/types.d.ts +0 -1
  50. package/dist/compliance/types.js +0 -1
  51. package/dist/config.d.ts +0 -1
  52. package/dist/config.js +2 -3
  53. package/dist/errors.d.ts +0 -1
  54. package/dist/errors.js +0 -1
  55. package/dist/events/event-emitter.d.ts +9 -1
  56. package/dist/events/event-emitter.js +47 -8
  57. package/dist/events/event-types.d.ts +0 -1
  58. package/dist/events/event-types.js +8 -2
  59. package/dist/gemini/gemini-client.d.ts +0 -1
  60. package/dist/gemini/gemini-client.js +237 -45
  61. package/dist/gemini/index.d.ts +0 -1
  62. package/dist/gemini/index.js +0 -1
  63. package/dist/gemini/pdf-chunker.d.ts +0 -1
  64. package/dist/gemini/pdf-chunker.js +60 -35
  65. package/dist/gemini/types.d.ts +0 -1
  66. package/dist/gemini/types.js +0 -1
  67. package/dist/index.d.ts +0 -1
  68. package/dist/index.js +60 -7
  69. package/dist/library/notebook-library.d.ts +30 -2
  70. package/dist/library/notebook-library.js +345 -85
  71. package/dist/library/types.d.ts +0 -1
  72. package/dist/library/types.js +0 -1
  73. package/dist/logging/index.d.ts +0 -1
  74. package/dist/logging/index.js +0 -1
  75. package/dist/logging/query-logger.d.ts +20 -1
  76. package/dist/logging/query-logger.js +104 -21
  77. package/dist/notebook-creation/audio-manager.d.ts +0 -1
  78. package/dist/notebook-creation/audio-manager.js +111 -20
  79. package/dist/notebook-creation/browser-options.d.ts +0 -1
  80. package/dist/notebook-creation/browser-options.js +0 -1
  81. package/dist/notebook-creation/data-table-manager.d.ts +7 -1
  82. package/dist/notebook-creation/data-table-manager.js +59 -3
  83. package/dist/notebook-creation/dom-scripts.d.ts +0 -1
  84. package/dist/notebook-creation/dom-scripts.js +0 -1
  85. package/dist/notebook-creation/errors.d.ts +0 -1
  86. package/dist/notebook-creation/errors.js +0 -1
  87. package/dist/notebook-creation/index.d.ts +0 -1
  88. package/dist/notebook-creation/index.js +0 -1
  89. package/dist/notebook-creation/notebook-creator.d.ts +9 -1
  90. package/dist/notebook-creation/notebook-creator.js +50 -1
  91. package/dist/notebook-creation/notebook-nav.d.ts +0 -1
  92. package/dist/notebook-creation/notebook-nav.js +21 -6
  93. package/dist/notebook-creation/notebook-sync.d.ts +14 -2
  94. package/dist/notebook-creation/notebook-sync.js +124 -35
  95. package/dist/notebook-creation/selectors.d.ts +0 -1
  96. package/dist/notebook-creation/selectors.js +6 -4
  97. package/dist/notebook-creation/source-manager.d.ts +29 -2
  98. package/dist/notebook-creation/source-manager.js +0 -0
  99. package/dist/notebook-creation/types.d.ts +0 -1
  100. package/dist/notebook-creation/types.js +0 -1
  101. package/dist/notebook-creation/video-manager.d.ts +0 -1
  102. package/dist/notebook-creation/video-manager.js +91 -15
  103. package/dist/observability/metrics.d.ts +0 -1
  104. package/dist/observability/metrics.js +0 -1
  105. package/dist/quota/index.d.ts +0 -1
  106. package/dist/quota/index.js +0 -1
  107. package/dist/quota/quota-manager.d.ts +59 -4
  108. package/dist/quota/quota-manager.js +195 -46
  109. package/dist/resources/resource-handlers.d.ts +0 -1
  110. package/dist/resources/resource-handlers.js +33 -3
  111. package/dist/session/browser-session.d.ts +0 -1
  112. package/dist/session/browser-session.js +0 -1
  113. package/dist/session/session-manager.d.ts +0 -1
  114. package/dist/session/session-manager.js +0 -1
  115. package/dist/session/session-timeout.d.ts +0 -1
  116. package/dist/session/session-timeout.js +0 -1
  117. package/dist/session/shared-context-manager.d.ts +0 -1
  118. package/dist/session/shared-context-manager.js +0 -1
  119. package/dist/tools/annotations.d.ts +0 -1
  120. package/dist/tools/annotations.js +0 -1
  121. package/dist/tools/definitions/ask-question.d.ts +6 -3
  122. package/dist/tools/definitions/ask-question.js +12 -8
  123. package/dist/tools/definitions/chat-history.d.ts +0 -1
  124. package/dist/tools/definitions/chat-history.js +1 -1
  125. package/dist/tools/definitions/data-tables.d.ts +0 -1
  126. package/dist/tools/definitions/data-tables.js +4 -1
  127. package/dist/tools/definitions/gemini.d.ts +0 -1
  128. package/dist/tools/definitions/gemini.js +14 -7
  129. package/dist/tools/definitions/notebook-management.d.ts +0 -1
  130. package/dist/tools/definitions/notebook-management.js +7 -2
  131. package/dist/tools/definitions/query-history.d.ts +0 -1
  132. package/dist/tools/definitions/query-history.js +0 -1
  133. package/dist/tools/definitions/session-management.d.ts +0 -1
  134. package/dist/tools/definitions/session-management.js +0 -1
  135. package/dist/tools/definitions/system.d.ts +0 -1
  136. package/dist/tools/definitions/system.js +32 -12
  137. package/dist/tools/definitions/video.d.ts +0 -1
  138. package/dist/tools/definitions/video.js +6 -3
  139. package/dist/tools/definitions.d.ts +0 -1
  140. package/dist/tools/definitions.js +0 -1
  141. package/dist/tools/handlers/ask-question.d.ts +0 -1
  142. package/dist/tools/handlers/ask-question.js +47 -18
  143. package/dist/tools/handlers/audio-video.d.ts +0 -1
  144. package/dist/tools/handlers/audio-video.js +0 -1
  145. package/dist/tools/handlers/auth.d.ts +0 -1
  146. package/dist/tools/handlers/auth.js +0 -1
  147. package/dist/tools/handlers/error-utils.d.ts +0 -1
  148. package/dist/tools/handlers/error-utils.js +0 -1
  149. package/dist/tools/handlers/gemini.d.ts +0 -1
  150. package/dist/tools/handlers/gemini.js +0 -1
  151. package/dist/tools/handlers/index.d.ts +0 -1
  152. package/dist/tools/handlers/index.js +0 -1
  153. package/dist/tools/handlers/notebook-creation.d.ts +0 -1
  154. package/dist/tools/handlers/notebook-creation.js +16 -1
  155. package/dist/tools/handlers/notebook-management.d.ts +0 -1
  156. package/dist/tools/handlers/notebook-management.js +7 -2
  157. package/dist/tools/handlers/session-management.d.ts +0 -1
  158. package/dist/tools/handlers/session-management.js +0 -1
  159. package/dist/tools/handlers/system.d.ts +0 -1
  160. package/dist/tools/handlers/system.js +0 -1
  161. package/dist/tools/handlers/types.d.ts +0 -1
  162. package/dist/tools/handlers/types.js +0 -1
  163. package/dist/tools/handlers/webhooks.d.ts +0 -1
  164. package/dist/tools/handlers/webhooks.js +0 -1
  165. package/dist/tools/icons.d.ts +0 -1
  166. package/dist/tools/icons.js +0 -1
  167. package/dist/tools/index.d.ts +0 -1
  168. package/dist/tools/index.js +0 -1
  169. package/dist/types.d.ts +0 -1
  170. package/dist/types.js +0 -1
  171. package/dist/utils/audit-logger.d.ts +11 -1
  172. package/dist/utils/audit-logger.js +189 -21
  173. package/dist/utils/cleanup-manager.d.ts +0 -1
  174. package/dist/utils/cleanup-manager.js +0 -1
  175. package/dist/utils/cli-handler.d.ts +0 -1
  176. package/dist/utils/cli-handler.js +0 -1
  177. package/dist/utils/crypto.d.ts +18 -9
  178. package/dist/utils/crypto.js +93 -28
  179. package/dist/utils/file-lock.d.ts +15 -1
  180. package/dist/utils/file-lock.js +67 -59
  181. package/dist/utils/file-permissions.d.ts +0 -1
  182. package/dist/utils/file-permissions.js +35 -7
  183. package/dist/utils/logger.d.ts +0 -1
  184. package/dist/utils/logger.js +0 -1
  185. package/dist/utils/page-utils.d.ts +0 -1
  186. package/dist/utils/page-utils.js +32 -28
  187. package/dist/utils/response-validator.d.ts +0 -1
  188. package/dist/utils/response-validator.js +18 -15
  189. package/dist/utils/secrets-scanner.d.ts +0 -1
  190. package/dist/utils/secrets-scanner.js +32 -7
  191. package/dist/utils/secure-memory.d.ts +34 -16
  192. package/dist/utils/secure-memory.js +40 -25
  193. package/dist/utils/security.d.ts +0 -1
  194. package/dist/utils/security.js +66 -39
  195. package/dist/utils/settings-manager.d.ts +9 -1
  196. package/dist/utils/settings-manager.js +45 -2
  197. package/dist/utils/stealth-utils.d.ts +0 -1
  198. package/dist/utils/stealth-utils.js +11 -9
  199. package/dist/webhooks/index.d.ts +0 -1
  200. package/dist/webhooks/index.js +0 -1
  201. package/dist/webhooks/types.d.ts +0 -1
  202. package/dist/webhooks/types.js +0 -1
  203. package/dist/webhooks/webhook-dispatcher.d.ts +0 -1
  204. package/dist/webhooks/webhook-dispatcher.js +0 -1
  205. package/package.json +5 -4
  206. package/dist/auth/auth-manager.d.ts.map +0 -1
  207. package/dist/auth/auth-manager.js.map +0 -1
  208. package/dist/auth/mcp-auth.d.ts.map +0 -1
  209. package/dist/auth/mcp-auth.js.map +0 -1
  210. package/dist/compliance/alert-manager.d.ts.map +0 -1
  211. package/dist/compliance/alert-manager.js.map +0 -1
  212. package/dist/compliance/breach-detection.d.ts.map +0 -1
  213. package/dist/compliance/breach-detection.js.map +0 -1
  214. package/dist/compliance/change-log.d.ts.map +0 -1
  215. package/dist/compliance/change-log.js.map +0 -1
  216. package/dist/compliance/compliance-logger.d.ts.map +0 -1
  217. package/dist/compliance/compliance-logger.js.map +0 -1
  218. package/dist/compliance/compliance-tools.d.ts.map +0 -1
  219. package/dist/compliance/compliance-tools.js.map +0 -1
  220. package/dist/compliance/consent-manager.d.ts.map +0 -1
  221. package/dist/compliance/consent-manager.js.map +0 -1
  222. package/dist/compliance/dashboard.d.ts.map +0 -1
  223. package/dist/compliance/dashboard.js.map +0 -1
  224. package/dist/compliance/data-classification.d.ts.map +0 -1
  225. package/dist/compliance/data-classification.js.map +0 -1
  226. package/dist/compliance/data-erasure.d.ts.map +0 -1
  227. package/dist/compliance/data-erasure.js.map +0 -1
  228. package/dist/compliance/data-export.d.ts.map +0 -1
  229. package/dist/compliance/data-export.js.map +0 -1
  230. package/dist/compliance/data-inventory.d.ts.map +0 -1
  231. package/dist/compliance/data-inventory.js.map +0 -1
  232. package/dist/compliance/dsar-handler.d.ts.map +0 -1
  233. package/dist/compliance/dsar-handler.js.map +0 -1
  234. package/dist/compliance/evidence-collector.d.ts.map +0 -1
  235. package/dist/compliance/evidence-collector.js.map +0 -1
  236. package/dist/compliance/health-monitor.d.ts.map +0 -1
  237. package/dist/compliance/health-monitor.js.map +0 -1
  238. package/dist/compliance/incident-manager.d.ts.map +0 -1
  239. package/dist/compliance/incident-manager.js.map +0 -1
  240. package/dist/compliance/index.d.ts.map +0 -1
  241. package/dist/compliance/index.js.map +0 -1
  242. package/dist/compliance/policy-docs.d.ts.map +0 -1
  243. package/dist/compliance/policy-docs.js.map +0 -1
  244. package/dist/compliance/privacy-notice-text.d.ts.map +0 -1
  245. package/dist/compliance/privacy-notice-text.js.map +0 -1
  246. package/dist/compliance/privacy-notice.d.ts.map +0 -1
  247. package/dist/compliance/privacy-notice.js.map +0 -1
  248. package/dist/compliance/report-generator.d.ts.map +0 -1
  249. package/dist/compliance/report-generator.js.map +0 -1
  250. package/dist/compliance/retention-engine.d.ts.map +0 -1
  251. package/dist/compliance/retention-engine.js.map +0 -1
  252. package/dist/compliance/siem-exporter.d.ts.map +0 -1
  253. package/dist/compliance/siem-exporter.js.map +0 -1
  254. package/dist/compliance/types.d.ts.map +0 -1
  255. package/dist/compliance/types.js.map +0 -1
  256. package/dist/config.d.ts.map +0 -1
  257. package/dist/config.js.map +0 -1
  258. package/dist/errors.d.ts.map +0 -1
  259. package/dist/errors.js.map +0 -1
  260. package/dist/events/event-emitter.d.ts.map +0 -1
  261. package/dist/events/event-emitter.js.map +0 -1
  262. package/dist/events/event-types.d.ts.map +0 -1
  263. package/dist/events/event-types.js.map +0 -1
  264. package/dist/gemini/gemini-client.d.ts.map +0 -1
  265. package/dist/gemini/gemini-client.js.map +0 -1
  266. package/dist/gemini/index.d.ts.map +0 -1
  267. package/dist/gemini/index.js.map +0 -1
  268. package/dist/gemini/pdf-chunker.d.ts.map +0 -1
  269. package/dist/gemini/pdf-chunker.js.map +0 -1
  270. package/dist/gemini/types.d.ts.map +0 -1
  271. package/dist/gemini/types.js.map +0 -1
  272. package/dist/index.d.ts.map +0 -1
  273. package/dist/index.js.map +0 -1
  274. package/dist/library/notebook-library.d.ts.map +0 -1
  275. package/dist/library/notebook-library.js.map +0 -1
  276. package/dist/library/types.d.ts.map +0 -1
  277. package/dist/library/types.js.map +0 -1
  278. package/dist/logging/index.d.ts.map +0 -1
  279. package/dist/logging/index.js.map +0 -1
  280. package/dist/logging/query-logger.d.ts.map +0 -1
  281. package/dist/logging/query-logger.js.map +0 -1
  282. package/dist/notebook-creation/audio-manager.d.ts.map +0 -1
  283. package/dist/notebook-creation/audio-manager.js.map +0 -1
  284. package/dist/notebook-creation/browser-options.d.ts.map +0 -1
  285. package/dist/notebook-creation/browser-options.js.map +0 -1
  286. package/dist/notebook-creation/data-table-manager.d.ts.map +0 -1
  287. package/dist/notebook-creation/data-table-manager.js.map +0 -1
  288. package/dist/notebook-creation/discover-creation-flow.d.ts +0 -2
  289. package/dist/notebook-creation/discover-creation-flow.d.ts.map +0 -1
  290. package/dist/notebook-creation/discover-creation-flow.js +0 -177
  291. package/dist/notebook-creation/discover-creation-flow.js.map +0 -1
  292. package/dist/notebook-creation/discover-quota.d.ts +0 -2
  293. package/dist/notebook-creation/discover-quota.d.ts.map +0 -1
  294. package/dist/notebook-creation/discover-quota.js +0 -194
  295. package/dist/notebook-creation/discover-quota.js.map +0 -1
  296. package/dist/notebook-creation/discover-source-dialog.d.ts +0 -8
  297. package/dist/notebook-creation/discover-source-dialog.d.ts.map +0 -1
  298. package/dist/notebook-creation/discover-source-dialog.js +0 -134
  299. package/dist/notebook-creation/discover-source-dialog.js.map +0 -1
  300. package/dist/notebook-creation/discover-sources.d.ts +0 -8
  301. package/dist/notebook-creation/discover-sources.d.ts.map +0 -1
  302. package/dist/notebook-creation/discover-sources.js +0 -272
  303. package/dist/notebook-creation/discover-sources.js.map +0 -1
  304. package/dist/notebook-creation/discover-text-input.d.ts +0 -7
  305. package/dist/notebook-creation/discover-text-input.d.ts.map +0 -1
  306. package/dist/notebook-creation/discover-text-input.js +0 -135
  307. package/dist/notebook-creation/discover-text-input.js.map +0 -1
  308. package/dist/notebook-creation/dom-scripts.d.ts.map +0 -1
  309. package/dist/notebook-creation/dom-scripts.js.map +0 -1
  310. package/dist/notebook-creation/errors.d.ts.map +0 -1
  311. package/dist/notebook-creation/errors.js.map +0 -1
  312. package/dist/notebook-creation/index.d.ts.map +0 -1
  313. package/dist/notebook-creation/index.js.map +0 -1
  314. package/dist/notebook-creation/notebook-creator.d.ts.map +0 -1
  315. package/dist/notebook-creation/notebook-creator.js.map +0 -1
  316. package/dist/notebook-creation/notebook-nav.d.ts.map +0 -1
  317. package/dist/notebook-creation/notebook-nav.js.map +0 -1
  318. package/dist/notebook-creation/notebook-sync.d.ts.map +0 -1
  319. package/dist/notebook-creation/notebook-sync.js.map +0 -1
  320. package/dist/notebook-creation/run-discovery.d.ts +0 -11
  321. package/dist/notebook-creation/run-discovery.d.ts.map +0 -1
  322. package/dist/notebook-creation/run-discovery.js +0 -151
  323. package/dist/notebook-creation/run-discovery.js.map +0 -1
  324. package/dist/notebook-creation/selector-discovery.d.ts +0 -65
  325. package/dist/notebook-creation/selector-discovery.d.ts.map +0 -1
  326. package/dist/notebook-creation/selector-discovery.js +0 -414
  327. package/dist/notebook-creation/selector-discovery.js.map +0 -1
  328. package/dist/notebook-creation/selectors.d.ts.map +0 -1
  329. package/dist/notebook-creation/selectors.js.map +0 -1
  330. package/dist/notebook-creation/selectors.ts +0 -112
  331. package/dist/notebook-creation/source-manager.d.ts.map +0 -1
  332. package/dist/notebook-creation/source-manager.js.map +0 -1
  333. package/dist/notebook-creation/test-create.d.ts +0 -8
  334. package/dist/notebook-creation/test-create.d.ts.map +0 -1
  335. package/dist/notebook-creation/test-create.js +0 -72
  336. package/dist/notebook-creation/test-create.js.map +0 -1
  337. package/dist/notebook-creation/types.d.ts.map +0 -1
  338. package/dist/notebook-creation/types.js.map +0 -1
  339. package/dist/notebook-creation/video-manager.d.ts.map +0 -1
  340. package/dist/notebook-creation/video-manager.js.map +0 -1
  341. package/dist/observability/metrics.d.ts.map +0 -1
  342. package/dist/observability/metrics.js.map +0 -1
  343. package/dist/quota/index.d.ts.map +0 -1
  344. package/dist/quota/index.js.map +0 -1
  345. package/dist/quota/quota-manager.d.ts.map +0 -1
  346. package/dist/quota/quota-manager.js.map +0 -1
  347. package/dist/resources/resource-handlers.d.ts.map +0 -1
  348. package/dist/resources/resource-handlers.js.map +0 -1
  349. package/dist/session/browser-session.d.ts.map +0 -1
  350. package/dist/session/browser-session.js.map +0 -1
  351. package/dist/session/session-manager.d.ts.map +0 -1
  352. package/dist/session/session-manager.js.map +0 -1
  353. package/dist/session/session-timeout.d.ts.map +0 -1
  354. package/dist/session/session-timeout.js.map +0 -1
  355. package/dist/session/shared-context-manager.d.ts.map +0 -1
  356. package/dist/session/shared-context-manager.js.map +0 -1
  357. package/dist/tools/annotations.d.ts.map +0 -1
  358. package/dist/tools/annotations.js.map +0 -1
  359. package/dist/tools/definitions/ask-question.d.ts.map +0 -1
  360. package/dist/tools/definitions/ask-question.js.map +0 -1
  361. package/dist/tools/definitions/chat-history.d.ts.map +0 -1
  362. package/dist/tools/definitions/chat-history.js.map +0 -1
  363. package/dist/tools/definitions/data-tables.d.ts.map +0 -1
  364. package/dist/tools/definitions/data-tables.js.map +0 -1
  365. package/dist/tools/definitions/gemini.d.ts.map +0 -1
  366. package/dist/tools/definitions/gemini.js.map +0 -1
  367. package/dist/tools/definitions/notebook-management.d.ts.map +0 -1
  368. package/dist/tools/definitions/notebook-management.js.map +0 -1
  369. package/dist/tools/definitions/query-history.d.ts.map +0 -1
  370. package/dist/tools/definitions/query-history.js.map +0 -1
  371. package/dist/tools/definitions/session-management.d.ts.map +0 -1
  372. package/dist/tools/definitions/session-management.js.map +0 -1
  373. package/dist/tools/definitions/system.d.ts.map +0 -1
  374. package/dist/tools/definitions/system.js.map +0 -1
  375. package/dist/tools/definitions/video.d.ts.map +0 -1
  376. package/dist/tools/definitions/video.js.map +0 -1
  377. package/dist/tools/definitions.d.ts.map +0 -1
  378. package/dist/tools/definitions.js.map +0 -1
  379. package/dist/tools/handlers/ask-question.d.ts.map +0 -1
  380. package/dist/tools/handlers/ask-question.js.map +0 -1
  381. package/dist/tools/handlers/audio-video.d.ts.map +0 -1
  382. package/dist/tools/handlers/audio-video.js.map +0 -1
  383. package/dist/tools/handlers/auth.d.ts.map +0 -1
  384. package/dist/tools/handlers/auth.js.map +0 -1
  385. package/dist/tools/handlers/error-utils.d.ts.map +0 -1
  386. package/dist/tools/handlers/error-utils.js.map +0 -1
  387. package/dist/tools/handlers/gemini.d.ts.map +0 -1
  388. package/dist/tools/handlers/gemini.js.map +0 -1
  389. package/dist/tools/handlers/index.d.ts.map +0 -1
  390. package/dist/tools/handlers/index.js.map +0 -1
  391. package/dist/tools/handlers/notebook-creation.d.ts.map +0 -1
  392. package/dist/tools/handlers/notebook-creation.js.map +0 -1
  393. package/dist/tools/handlers/notebook-management.d.ts.map +0 -1
  394. package/dist/tools/handlers/notebook-management.js.map +0 -1
  395. package/dist/tools/handlers/session-management.d.ts.map +0 -1
  396. package/dist/tools/handlers/session-management.js.map +0 -1
  397. package/dist/tools/handlers/system.d.ts.map +0 -1
  398. package/dist/tools/handlers/system.js.map +0 -1
  399. package/dist/tools/handlers/types.d.ts.map +0 -1
  400. package/dist/tools/handlers/types.js.map +0 -1
  401. package/dist/tools/handlers/webhooks.d.ts.map +0 -1
  402. package/dist/tools/handlers/webhooks.js.map +0 -1
  403. package/dist/tools/handlers.d.ts +0 -666
  404. package/dist/tools/handlers.d.ts.map +0 -1
  405. package/dist/tools/handlers.js +0 -2929
  406. package/dist/tools/handlers.js.map +0 -1
  407. package/dist/tools/icons.d.ts.map +0 -1
  408. package/dist/tools/icons.js.map +0 -1
  409. package/dist/tools/index.d.ts.map +0 -1
  410. package/dist/tools/index.js.map +0 -1
  411. package/dist/types.d.ts.map +0 -1
  412. package/dist/types.js.map +0 -1
  413. package/dist/utils/audit-logger.d.ts.map +0 -1
  414. package/dist/utils/audit-logger.js.map +0 -1
  415. package/dist/utils/cert-pinning.d.ts +0 -97
  416. package/dist/utils/cert-pinning.d.ts.map +0 -1
  417. package/dist/utils/cert-pinning.js +0 -328
  418. package/dist/utils/cert-pinning.js.map +0 -1
  419. package/dist/utils/cleanup-manager.d.ts.map +0 -1
  420. package/dist/utils/cleanup-manager.js.map +0 -1
  421. package/dist/utils/cli-handler.d.ts.map +0 -1
  422. package/dist/utils/cli-handler.js.map +0 -1
  423. package/dist/utils/crypto.d.ts.map +0 -1
  424. package/dist/utils/crypto.js.map +0 -1
  425. package/dist/utils/file-lock.d.ts.map +0 -1
  426. package/dist/utils/file-lock.js.map +0 -1
  427. package/dist/utils/file-permissions.d.ts.map +0 -1
  428. package/dist/utils/file-permissions.js.map +0 -1
  429. package/dist/utils/logger.d.ts.map +0 -1
  430. package/dist/utils/logger.js.map +0 -1
  431. package/dist/utils/page-utils.d.ts.map +0 -1
  432. package/dist/utils/page-utils.js.map +0 -1
  433. package/dist/utils/response-validator.d.ts.map +0 -1
  434. package/dist/utils/response-validator.js.map +0 -1
  435. package/dist/utils/secrets-scanner.d.ts.map +0 -1
  436. package/dist/utils/secrets-scanner.js.map +0 -1
  437. package/dist/utils/secure-memory.d.ts.map +0 -1
  438. package/dist/utils/secure-memory.js.map +0 -1
  439. package/dist/utils/security.d.ts.map +0 -1
  440. package/dist/utils/security.js.map +0 -1
  441. package/dist/utils/settings-manager.d.ts.map +0 -1
  442. package/dist/utils/settings-manager.js.map +0 -1
  443. package/dist/utils/stealth-utils.d.ts.map +0 -1
  444. package/dist/utils/stealth-utils.js.map +0 -1
  445. package/dist/utils/tool-validation.d.ts +0 -93
  446. package/dist/utils/tool-validation.d.ts.map +0 -1
  447. package/dist/utils/tool-validation.js +0 -277
  448. package/dist/utils/tool-validation.js.map +0 -1
  449. package/dist/webhooks/index.d.ts.map +0 -1
  450. package/dist/webhooks/index.js.map +0 -1
  451. package/dist/webhooks/types.d.ts.map +0 -1
  452. package/dist/webhooks/types.js.map +0 -1
  453. package/dist/webhooks/webhook-dispatcher.d.ts.map +0 -1
  454. package/dist/webhooks/webhook-dispatcher.js.map +0 -1
  455. package/docs/COMPLIANCE-SPEC.md +0 -1452
  456. package/docs/MCP-DIRECTORY-LISTINGS.md +0 -91
  457. package/docs/SECURITY-FORK-OPPORTUNITIES.md +0 -79
  458. package/docs/SECURITY_IMPLEMENTATION_PLAN.md +0 -437
  459. package/docs/archive/ISSUES-legacy-2026-04-24.md +0 -644
  460. package/docs/configuration.md +0 -94
  461. package/docs/dependency-risk.md +0 -25
  462. package/docs/improvement-sprint-2026.2.10.md +0 -210
  463. package/docs/testing-runbook.md +0 -166
  464. package/docs/tools.md +0 -34
  465. package/docs/troubleshooting.md +0 -59
  466. package/docs/usage-guide.md +0 -246
@@ -82,4 +82,3 @@ export declare function exportUserDataToFile(outputPath: string, options?: Parti
82
82
  * Export user data to string
83
83
  */
84
84
  export declare function exportUserDataToString(options?: Partial<ExportOptions>): Promise<string>;
85
- //# sourceMappingURL=data-export.d.ts.map
@@ -402,4 +402,3 @@ export async function exportUserDataToFile(outputPath, options = {}) {
402
402
  export async function exportUserDataToString(options = {}) {
403
403
  return getDataExporter().exportToString(options);
404
404
  }
405
- //# sourceMappingURL=data-export.js.map
@@ -133,4 +133,3 @@ export declare function getExportableData(): Promise<DataInventoryEntry[]>;
133
133
  * Get erasable data entries
134
134
  */
135
135
  export declare function getErasableData(): Promise<DataInventoryEntry[]>;
136
- //# sourceMappingURL=data-inventory.d.ts.map
@@ -333,4 +333,3 @@ export async function getExportableData() {
333
333
  export async function getErasableData() {
334
334
  return getDataInventory().getErasable();
335
335
  }
336
- //# sourceMappingURL=data-inventory.js.map
@@ -126,4 +126,3 @@ export declare function handleDSAR(type?: DSARRequest["type"]): Promise<DSARResp
126
126
  */
127
127
  export declare function getDSARSummary(): Promise<ReturnType<DSARHandler["getSummaryResponse"]>>;
128
128
  export {};
129
- //# sourceMappingURL=dsar-handler.d.ts.map
@@ -381,4 +381,3 @@ export async function handleDSAR(type = "access") {
381
381
  export async function getDSARSummary() {
382
382
  return getDSARHandler().getSummaryResponse();
383
383
  }
384
- //# sourceMappingURL=dsar-handler.js.map
@@ -184,4 +184,3 @@ export declare function verifyEvidence(evidencePackage: EvidencePackage): {
184
184
  * List saved evidence packages
185
185
  */
186
186
  export declare function listEvidencePackages(): ReturnType<EvidenceCollector["listPackages"]>;
187
- //# sourceMappingURL=evidence-collector.d.ts.map
@@ -189,7 +189,10 @@ export class EvidenceCollector {
189
189
  legal_basis: c.legal_basis,
190
190
  granted_at: c.granted_at,
191
191
  expires_at: c.expires_at,
192
- is_valid: c.is_valid,
192
+ // Validity is derived from existing fields: granted (record exists),
193
+ // not revoked, and not past its optional expiry.
194
+ is_valid: !c.revoked &&
195
+ (!c.expires_at || new Date(c.expires_at) > new Date()),
193
196
  revoked: c.revoked,
194
197
  })),
195
198
  };
@@ -657,4 +660,3 @@ export function verifyEvidence(evidencePackage) {
657
660
  export function listEvidencePackages() {
658
661
  return getEvidenceCollector().listPackages();
659
662
  }
660
- //# sourceMappingURL=evidence-collector.js.map
@@ -108,4 +108,3 @@ export declare function getHealthStatus(): ReturnType<HealthMonitor["getStatus"]
108
108
  * Get last health metrics
109
109
  */
110
110
  export declare function getLastHealthMetrics(): HealthMetrics | null;
111
- //# sourceMappingURL=health-monitor.d.ts.map
@@ -512,4 +512,3 @@ export function getHealthStatus() {
512
512
  export function getLastHealthMetrics() {
513
513
  return getHealthMonitor().getLastMetrics();
514
514
  }
515
- //# sourceMappingURL=health-monitor.js.map
@@ -128,4 +128,3 @@ export declare function updateIncidentStatus(incidentId: string, status: Inciden
128
128
  * Get incident statistics
129
129
  */
130
130
  export declare function getIncidentStatistics(): Promise<ReturnType<IncidentManager["getStatistics"]>>;
131
- //# sourceMappingURL=incident-manager.d.ts.map
@@ -417,4 +417,3 @@ export async function updateIncidentStatus(incidentId, status, notes) {
417
417
  export async function getIncidentStatistics() {
418
418
  return getIncidentManager().getStatistics();
419
419
  }
420
- //# sourceMappingURL=incident-manager.js.map
@@ -29,4 +29,3 @@ export type { ReportType, ReportFormat, GeneratedReport, ReportOptions } from ".
29
29
  export { EvidenceCollector, getEvidenceCollector, collectEvidence, collectAndSaveEvidence, collectRegulationEvidence, verifyEvidence, listEvidencePackages, } from "./evidence-collector.js";
30
30
  export type { EvidenceType, EvidenceItem, EvidencePackage, CollectionOptions } from "./evidence-collector.js";
31
31
  export { getComplianceTools, handleComplianceToolCall, } from "./compliance-tools.js";
32
- //# sourceMappingURL=index.d.ts.map
@@ -32,4 +32,3 @@ export { ComplianceDashboard, getComplianceDashboard, generateDashboard, getComp
32
32
  export { ReportGenerator, getReportGenerator, generateReport, generateAndSaveReport, listReports, } from "./report-generator.js";
33
33
  export { EvidenceCollector, getEvidenceCollector, collectEvidence, collectAndSaveEvidence, collectRegulationEvidence, verifyEvidence, listEvidencePackages, } from "./evidence-collector.js";
34
34
  export { getComplianceTools, handleComplianceToolCall, } from "./compliance-tools.js";
35
- //# sourceMappingURL=index.js.map
@@ -105,4 +105,3 @@ export declare function getPoliciesByRegulation(regulation: string): Promise<Pol
105
105
  * Get policy summary
106
106
  */
107
107
  export declare function getPolicySummary(): Promise<ReturnType<PolicyDocManager["getPolicySummary"]>>;
108
- //# sourceMappingURL=policy-docs.d.ts.map
@@ -464,4 +464,3 @@ export async function getPoliciesByRegulation(regulation) {
464
464
  export async function getPolicySummary() {
465
465
  return getPolicyDocManager().getPolicySummary();
466
466
  }
467
- //# sourceMappingURL=policy-docs.js.map
@@ -55,4 +55,3 @@ export declare function getProcessingAgreement(): {
55
55
  security_measures: string[];
56
56
  breach_notification: string;
57
57
  };
58
- //# sourceMappingURL=privacy-notice-text.d.ts.map
@@ -157,4 +157,3 @@ export function getProcessingAgreement() {
157
157
  breach_notification: "In the unlikely event of a data breach, we will notify affected users within 72 hours as required by GDPR.",
158
158
  };
159
159
  }
160
- //# sourceMappingURL=privacy-notice-text.js.map
@@ -125,4 +125,3 @@ export declare function getPrivacyNotice(): ReturnType<typeof getPrivacyNoticeSt
125
125
  */
126
126
  export declare function getPrivacyNoticeCLIText(): string;
127
127
  export {};
128
- //# sourceMappingURL=privacy-notice.d.ts.map
@@ -249,4 +249,3 @@ export function getPrivacyNotice() {
249
249
  export function getPrivacyNoticeCLIText() {
250
250
  return getPrivacyNoticeManager().getCLINotice();
251
251
  }
252
- //# sourceMappingURL=privacy-notice.js.map
@@ -115,6 +115,13 @@ export declare class ReportGenerator {
115
115
  * Convert to CSV format (flattened)
116
116
  */
117
117
  private toCSV;
118
+ /**
119
+ * Quote a CSV cell and neutralize formula injection.
120
+ * If the value begins with =, +, -, @, tab, or CR it is prefixed with a
121
+ * single quote so spreadsheet apps (Excel/Sheets) treat it as text rather
122
+ * than a formula. Embedded double-quotes are doubled per RFC 4180.
123
+ */
124
+ private csvSafeCell;
118
125
  /**
119
126
  * Flatten nested object
120
127
  */
@@ -165,4 +172,3 @@ export declare function generateAndSaveReport(reportType: ReportType, options?:
165
172
  */
166
173
  export declare function listReports(): ReturnType<ReportGenerator["listGeneratedReports"]>;
167
174
  export {};
168
- //# sourceMappingURL=report-generator.d.ts.map
@@ -149,10 +149,42 @@ export class ReportGenerator {
149
149
  const dataInventory = getDataInventory();
150
150
  const dsarHandler = getDSARHandler();
151
151
  const retentionEngine = getRetentionEngine();
152
+ const dashboard = getComplianceDashboard();
152
153
  const consents = await consentManager.getActiveConsents();
153
154
  const inventory = await dataInventory.getAll();
154
155
  const dsarSummary = await dsarHandler.getStatistics();
155
156
  const retentionStatus = await retentionEngine.getStatus();
157
+ const dashboardData = await dashboard.generateDashboard();
158
+ // Derive per-consent validity from real fields (mirrors evidence-collector):
159
+ // a consent is valid only if it is not revoked and not past its optional expiry.
160
+ const now = new Date();
161
+ const consentRows = consents.map((c) => {
162
+ const valid = !c.revoked && (!c.expires_at || new Date(c.expires_at) > now);
163
+ return {
164
+ purpose: c.purposes.join(", "),
165
+ legal_basis: c.legal_basis,
166
+ granted: c.granted_at,
167
+ valid,
168
+ };
169
+ });
170
+ const validConsents = consentRows.filter(c => c.valid).length;
171
+ // Build compliance verdict from real signals rather than hardcoding "compliant".
172
+ const gaps = [];
173
+ const recommendations = [];
174
+ const invalidConsents = consents.length - validConsents;
175
+ if (invalidConsents > 0) {
176
+ gaps.push(`${invalidConsents} consent record(s) are revoked or expired (Article 6 legal basis).`);
177
+ recommendations.push("Re-obtain or retire invalid consent records.");
178
+ }
179
+ if (dsarSummary.pending_requests > 0) {
180
+ gaps.push(`${dsarSummary.pending_requests} data subject request(s) pending (Articles 15/17).`);
181
+ recommendations.push("Process pending DSARs within the 30-day deadline.");
182
+ }
183
+ if (dashboardData.gdpr.status === "non_compliant") {
184
+ gaps.push("GDPR dashboard status is non-compliant.");
185
+ }
186
+ // Compliant only when the dashboard agrees and no concrete gaps were found.
187
+ const gdprCompliant = dashboardData.gdpr.status === "compliant" && gaps.length === 0;
156
188
  const report = {
157
189
  title: "GDPR Compliance Audit Report",
158
190
  regulation: "General Data Protection Regulation (EU) 2016/679",
@@ -165,13 +197,8 @@ export class ReportGenerator {
165
197
  article_6_legal_basis: {
166
198
  description: "Lawfulness of Processing",
167
199
  consent_records: consents.length,
168
- valid_consents: consents.length, // All active consents are valid
169
- consents: consents.map((c) => ({
170
- purpose: c.purposes.join(", "),
171
- legal_basis: c.legal_basis,
172
- granted: c.granted_at,
173
- valid: true,
174
- })),
200
+ valid_consents: validConsents, // Derived: not revoked and not expired
201
+ consents: consentRows,
175
202
  },
176
203
  article_15_17_access_erasure: {
177
204
  description: "Data Subject Access and Erasure Rights",
@@ -190,9 +217,10 @@ export class ReportGenerator {
190
217
  status: retentionStatus,
191
218
  },
192
219
  compliance_status: {
193
- compliant: true,
194
- gaps: [],
195
- recommendations: [],
220
+ compliant: gdprCompliant,
221
+ status: dashboardData.gdpr.status,
222
+ gaps,
223
+ recommendations,
196
224
  },
197
225
  };
198
226
  return this.formatOutput(report, format);
@@ -228,7 +256,10 @@ export class ReportGenerator {
228
256
  principle: "CC7 - System Operations",
229
257
  controls: {
230
258
  health_monitoring: true,
259
+ // Availability % is not measured (no downtime accounting); expose the
260
+ // raw value (null) and the measurement flag rather than a fake figure.
231
261
  uptime_percentage: dashboardData.soc2.availability.uptime_percentage,
262
+ uptime_percentage_measured: dashboardData.soc2.availability.uptime_percentage_measured,
232
263
  status: dashboardData.health.status,
233
264
  },
234
265
  status: dashboardData.health.status === "healthy" ? "Met" : "Partially Met",
@@ -286,11 +317,29 @@ export class ReportGenerator {
286
317
  const complianceLogger = getComplianceLogger();
287
318
  const policyManager = getPolicyDocManager();
288
319
  const incidentManager = getIncidentManager();
320
+ const dashboard = getComplianceDashboard();
289
321
  const loggerStats = await complianceLogger.getStats();
290
322
  const integrity = await complianceLogger.verifyIntegrity();
291
323
  const policies = await policyManager.getAllPolicies();
292
324
  const policySummary = await policyManager.getPolicySummary();
293
325
  const incidentStats = await incidentManager.getStatistics();
326
+ const dashboardData = await dashboard.generateDashboard();
327
+ // Derive the overall CSSF verdict from real signals rather than hardcoding.
328
+ const cssfGaps = [];
329
+ if (!loggerStats.enabled)
330
+ cssfGaps.push("Compliance audit logging is disabled (Section 4.3 audit trail).");
331
+ if (!integrity.valid)
332
+ cssfGaps.push("Audit log hash-chain integrity verification failed (tamper evidence).");
333
+ if (policySummary.due_for_review > 0)
334
+ cssfGaps.push(`${policySummary.due_for_review} policy/policies are overdue for review (Section 3 IT governance).`);
335
+ if (incidentStats.open_incidents > 0)
336
+ cssfGaps.push(`${incidentStats.open_incidents} security incident(s) open (Section 5 incident management).`);
337
+ // Map dashboard status to the report's verbal verdict.
338
+ const cssfOverall = dashboardData.cssf.status === "compliant"
339
+ ? "Compliant"
340
+ : dashboardData.cssf.status === "at_risk"
341
+ ? "At Risk"
342
+ : "Non-Compliant";
294
343
  const report = {
295
344
  title: "CSSF Compliance Audit Report",
296
345
  regulation: "CSSF Circular 20/750 - IT Risk Management",
@@ -314,7 +363,8 @@ export class ReportGenerator {
314
363
  total_incidents: incidentStats.total_incidents,
315
364
  },
316
365
  statistics: incidentStats,
317
- status: "Compliant",
366
+ // Open incidents indicate active remediation rather than a clean control.
367
+ status: incidentStats.open_incidents > 0 ? "At Risk" : "Compliant",
318
368
  },
319
369
  policy_management: {
320
370
  circular_reference: "Section 3 - IT Governance",
@@ -335,8 +385,8 @@ export class ReportGenerator {
335
385
  status: policySummary.due_for_review === 0 ? "Compliant" : "At Risk",
336
386
  },
337
387
  compliance_status: {
338
- overall: "Compliant",
339
- gaps: [],
388
+ overall: cssfOverall,
389
+ gaps: cssfGaps,
340
390
  recommendations: [],
341
391
  },
342
392
  };
@@ -391,6 +441,7 @@ export class ReportGenerator {
391
441
  total_24h: dashboardData.security.alerts.total_24h,
392
442
  critical_24h: dashboardData.security.alerts.critical_24h,
393
443
  unacknowledged: dashboardData.security.alerts.unacknowledged,
444
+ unacknowledged_tracked: dashboardData.security.alerts.unacknowledged_tracked,
394
445
  },
395
446
  recommendations: [],
396
447
  };
@@ -533,27 +584,47 @@ export class ReportGenerator {
533
584
  * Generate full audit report
534
585
  */
535
586
  async generateFullAudit(from, to, format) {
536
- const [gdpr, soc2, cssf, security, incidents, dsar, retention, changes] = await Promise.all([
537
- this.generateGDPRAudit(from, to, "json"),
538
- this.generateSOC2Audit(from, to, "json"),
539
- this.generateCSSFAudit(from, to, "json"),
540
- this.generateSecurityAudit(from, to, "json"),
541
- this.generateIncidentReport(from, to, "json"),
542
- this.generateDSARReport(from, to, "json"),
543
- this.generateRetentionReport(from, to, "json"),
544
- this.generateChangeManagementReport(from, to, "json"),
545
- ]);
587
+ // Generate each sub-report independently so a single failure degrades that
588
+ // one section instead of opaquely sinking the whole audit (L47). Sub-reports
589
+ // are produced as JSON strings then parsed back into objects; a rejected
590
+ // section is replaced with an explicit error placeholder.
591
+ const sections = [
592
+ { key: "gdpr_audit", gen: () => this.generateGDPRAudit(from, to, "json") },
593
+ { key: "soc2_audit", gen: () => this.generateSOC2Audit(from, to, "json") },
594
+ { key: "cssf_audit", gen: () => this.generateCSSFAudit(from, to, "json") },
595
+ { key: "security_audit", gen: () => this.generateSecurityAudit(from, to, "json") },
596
+ { key: "incident_report", gen: () => this.generateIncidentReport(from, to, "json") },
597
+ { key: "dsar_report", gen: () => this.generateDSARReport(from, to, "json") },
598
+ { key: "retention_report", gen: () => this.generateRetentionReport(from, to, "json") },
599
+ { key: "change_management", gen: () => this.generateChangeManagementReport(from, to, "json") },
600
+ ];
601
+ const results = await Promise.allSettled(sections.map(s => s.gen()));
546
602
  const report = {
547
603
  title: "Comprehensive Compliance Audit Report",
548
604
  period: { from: from.toISOString(), to: to.toISOString() },
549
- gdpr_audit: JSON.parse(gdpr),
550
- soc2_audit: JSON.parse(soc2),
551
- cssf_audit: JSON.parse(cssf),
552
- security_audit: JSON.parse(security),
553
- incident_report: JSON.parse(incidents),
554
- dsar_report: JSON.parse(dsar),
555
- retention_report: JSON.parse(retention),
556
- change_management: JSON.parse(changes),
605
+ };
606
+ const failedSections = [];
607
+ results.forEach((result, i) => {
608
+ const key = sections[i].key;
609
+ if (result.status === "fulfilled") {
610
+ try {
611
+ report[key] = JSON.parse(result.value);
612
+ }
613
+ catch (err) {
614
+ failedSections.push(key);
615
+ report[key] = { error: `Failed to parse section: ${err instanceof Error ? err.message : String(err)}` };
616
+ }
617
+ }
618
+ else {
619
+ failedSections.push(key);
620
+ const reason = result.reason;
621
+ report[key] = { error: `Failed to generate section: ${reason instanceof Error ? reason.message : String(reason)}` };
622
+ }
623
+ });
624
+ // Surface partial-failure so an incomplete audit is never mistaken for a clean one.
625
+ report.generation_status = {
626
+ complete: failedSections.length === 0,
627
+ failed_sections: failedSections,
557
628
  };
558
629
  return this.formatOutput(report, format);
559
630
  }
@@ -608,11 +679,23 @@ export class ReportGenerator {
608
679
  const lines = [];
609
680
  lines.push("Key,Value");
610
681
  for (const [key, value] of Object.entries(flattened)) {
611
- const escapedValue = String(value).replace(/"/g, '""');
612
- lines.push(`"${key}","${escapedValue}"`);
682
+ lines.push(`${this.csvSafeCell(key)},${this.csvSafeCell(value)}`);
613
683
  }
614
684
  return lines.join("\n");
615
685
  }
686
+ /**
687
+ * Quote a CSV cell and neutralize formula injection.
688
+ * If the value begins with =, +, -, @, tab, or CR it is prefixed with a
689
+ * single quote so spreadsheet apps (Excel/Sheets) treat it as text rather
690
+ * than a formula. Embedded double-quotes are doubled per RFC 4180.
691
+ */
692
+ csvSafeCell(value) {
693
+ let str = String(value);
694
+ if (/^[=+\-@\t\r]/.test(str)) {
695
+ str = `'${str}`;
696
+ }
697
+ return `"${str.replace(/"/g, '""')}"`;
698
+ }
616
699
  /**
617
700
  * Flatten nested object
618
701
  */
@@ -829,4 +912,3 @@ export async function generateAndSaveReport(reportType, options) {
829
912
  export function listReports() {
830
913
  return getReportGenerator().listGeneratedReports();
831
914
  }
832
- //# sourceMappingURL=report-generator.js.map
@@ -127,4 +127,3 @@ export declare function getRetentionPolicies(): Promise<RetentionPolicy[]>;
127
127
  */
128
128
  export declare function getRetentionStatus(): Promise<ReturnType<RetentionEngine["getStatus"]>>;
129
129
  export {};
130
- //# sourceMappingURL=retention-engine.d.ts.map
@@ -521,4 +521,3 @@ export async function getRetentionPolicies() {
521
521
  export async function getRetentionStatus() {
522
522
  return getRetentionEngine().getStatus();
523
523
  }
524
- //# sourceMappingURL=retention-engine.js.map
@@ -29,6 +29,8 @@ export declare class SIEMExporter {
29
29
  private flushTimer;
30
30
  private isExporting;
31
31
  private failedDir;
32
+ private droppedEvents;
33
+ private lastDropWarning;
32
34
  private constructor();
33
35
  /**
34
36
  * Get singleton instance
@@ -86,7 +88,13 @@ export declare class SIEMExporter {
86
88
  */
87
89
  private formatSyslog;
88
90
  /**
89
- * Export event as syslog
91
+ * Export event as syslog over UDP.
92
+ *
93
+ * NOTE: UDP syslog is best-effort. A successful send only means the datagram
94
+ * was handed to the OS — it does NOT confirm delivery to the collector. A
95
+ * `settled` guard ensures the socket is closed and the promise resolves exactly
96
+ * once (the send callback and the safety timeout previously raced, double-closing
97
+ * and double-resolving), and the timeout is cleared as soon as the callback fires.
90
98
  */
91
99
  private exportSyslog;
92
100
  /**
@@ -109,6 +117,21 @@ export declare class SIEMExporter {
109
117
  * Escape CEF extension value
110
118
  */
111
119
  private escapeExtension;
120
+ /**
121
+ * Escape a LEEF key or value. LEEF is tab-delimited and newline-terminated,
122
+ * so tabs/newlines/carriage-returns (and the `=` separator) must be neutralized
123
+ * to prevent attribute- or record-injection into the SIEM.
124
+ */
125
+ private escapeLeef;
126
+ /**
127
+ * Escape a CEF header component (pipe-delimited). Backslash first, then pipe.
128
+ */
129
+ private escapeCefHeader;
130
+ /**
131
+ * Strip C0 control characters (CR/LF/tab/etc.) from free-text fields so a
132
+ * crafted value cannot terminate or forge a syslog/LEEF record.
133
+ */
134
+ private sanitizeFreeText;
112
135
  /**
113
136
  * Save failed event for later retry
114
137
  */
@@ -127,6 +150,8 @@ export declare class SIEMExporter {
127
150
  enabled: boolean;
128
151
  format: SIEMFormat;
129
152
  queue_size: number;
153
+ queue_max_size: number;
154
+ dropped_events: number;
130
155
  endpoint_configured: boolean;
131
156
  syslog_configured: boolean;
132
157
  };
@@ -147,4 +172,3 @@ export declare function flushSIEM(): Promise<{
147
172
  failed: number;
148
173
  }>;
149
174
  export {};
150
- //# sourceMappingURL=siem-exporter.d.ts.map
@@ -86,6 +86,10 @@ export class SIEMExporter {
86
86
  flushTimer = null;
87
87
  isExporting = false;
88
88
  failedDir;
89
+ // Count of events dropped on queue overflow (e.g. during a SIEM outage). Without
90
+ // this, a backed-up queue silently sheds compliance events (L50).
91
+ droppedEvents = 0;
92
+ lastDropWarning = 0;
89
93
  constructor() {
90
94
  this.config = getSIEMConfig();
91
95
  const config = CONFIG;
@@ -157,8 +161,19 @@ export class SIEMExporter {
157
161
  }
158
162
  // Check queue size
159
163
  if (this.eventQueue.length >= this.config.queue_max_size) {
160
- // Drop oldest event
161
- this.eventQueue.shift();
164
+ // Queue full (likely a SIEM outage). Persist the oldest event to the failed
165
+ // dir before dropping it so it is not silently lost, then count + warn.
166
+ const dropped = this.eventQueue.shift();
167
+ this.droppedEvents++;
168
+ if (dropped) {
169
+ await this.saveFailedEvent(dropped);
170
+ }
171
+ // Throttle the warning to at most once per minute to avoid log flooding.
172
+ const now = Date.now();
173
+ if (now - this.lastDropWarning > 60000) {
174
+ this.lastDropWarning = now;
175
+ log.warning(`siem-exporter: queue full (max ${this.config.queue_max_size}); dropped oldest event (total dropped: ${this.droppedEvents}). Overflow persisted to ${this.failedDir}.`);
176
+ }
162
177
  }
163
178
  this.eventQueue.push(event);
164
179
  // Flush if batch size reached
@@ -225,8 +240,8 @@ export class SIEMExporter {
225
240
  "Pantheon Security",
226
241
  "NotebookLM MCP",
227
242
  "1.5.1",
228
- event.event_type,
229
- event.event_name,
243
+ this.escapeCefHeader(event.event_type),
244
+ this.escapeCefHeader(event.event_name),
230
245
  cefSeverity.toString(),
231
246
  ].join("|");
232
247
  // Add extension fields
@@ -258,18 +273,19 @@ export class SIEMExporter {
258
273
  "Pantheon Security",
259
274
  "NotebookLM MCP",
260
275
  "1.5.1",
261
- event.event_type,
276
+ this.escapeLeef(event.event_type),
262
277
  ].join("|");
263
- // Add attributes
278
+ // Add attributes — every key and value is LEEF-escaped so a crafted
279
+ // field cannot inject forged attributes or records via tab/newline.
264
280
  const attributes = [];
265
- attributes.push(`cat=${event.event_name}`);
281
+ attributes.push(`cat=${this.escapeLeef(event.event_name)}`);
266
282
  attributes.push(`sev=${SYSLOG_SEVERITY[event.severity]}`);
267
- attributes.push(`msg=${event.message}`);
268
- attributes.push(`src=${event.source}`);
269
- attributes.push(`devTime=${event.timestamp}`);
283
+ attributes.push(`msg=${this.escapeLeef(event.message)}`);
284
+ attributes.push(`src=${this.escapeLeef(event.source)}`);
285
+ attributes.push(`devTime=${this.escapeLeef(event.timestamp)}`);
270
286
  if (event.details) {
271
287
  for (const [key, value] of Object.entries(event.details)) {
272
- attributes.push(`${key}=${String(value)}`);
288
+ attributes.push(`${this.escapeLeef(key)}=${this.escapeLeef(String(value))}`);
273
289
  }
274
290
  }
275
291
  return `${leef}\t${attributes.join("\t")}`;
@@ -292,10 +308,18 @@ export class SIEMExporter {
292
308
  const procId = process.pid.toString();
293
309
  const msgId = event.event_type;
294
310
  // RFC 5424 format
295
- return `<${priority}>1 ${timestamp} ${hostname} ${appName} ${procId} ${msgId} - ${event.message}`;
311
+ // Strip C0 control chars (CR/LF etc.) so message cannot inject a forged record.
312
+ const safeMessage = this.sanitizeFreeText(event.message);
313
+ return `<${priority}>1 ${timestamp} ${hostname} ${appName} ${procId} ${msgId} - ${safeMessage}`;
296
314
  }
297
315
  /**
298
- * Export event as syslog
316
+ * Export event as syslog over UDP.
317
+ *
318
+ * NOTE: UDP syslog is best-effort. A successful send only means the datagram
319
+ * was handed to the OS — it does NOT confirm delivery to the collector. A
320
+ * `settled` guard ensures the socket is closed and the promise resolves exactly
321
+ * once (the send callback and the safety timeout previously raced, double-closing
322
+ * and double-resolving), and the timeout is cleared as soon as the callback fires.
299
323
  */
300
324
  async exportSyslog(event) {
301
325
  if (!this.config.syslog_host) {
@@ -305,21 +329,32 @@ export class SIEMExporter {
305
329
  return new Promise((resolve) => {
306
330
  const client = dgram.createSocket("udp4");
307
331
  const buffer = Buffer.from(syslogMessage);
308
- client.send(buffer, 0, buffer.length, this.config.syslog_port || 514, this.config.syslog_host, (err) => {
309
- client.close();
310
- resolve(!err);
311
- });
312
- // Timeout
313
- setTimeout(() => {
332
+ let settled = false;
333
+ let timer = null;
334
+ const finish = (result) => {
335
+ if (settled)
336
+ return;
337
+ settled = true;
338
+ if (timer) {
339
+ clearTimeout(timer);
340
+ timer = null;
341
+ }
314
342
  try {
315
343
  client.close();
316
344
  }
317
345
  catch (err) {
318
- log.debug(`siem-exporter: close TCP client on timeout: ${err instanceof Error ? err.message : String(err)}`);
319
- // Ignore
346
+ log.debug(`siem-exporter: close UDP client: ${err instanceof Error ? err.message : String(err)}`);
347
+ // Ignore — socket may already be closed.
320
348
  }
321
- resolve(false);
322
- }, 5000);
349
+ resolve(result);
350
+ };
351
+ client.on("error", () => finish(false));
352
+ client.send(buffer, 0, buffer.length, this.config.syslog_port || 514, this.config.syslog_host,
353
+ // Best-effort: !err means the datagram was accepted by the OS, not that
354
+ // the collector received it.
355
+ (err) => finish(!err));
356
+ // Safety timeout in case the send callback never fires.
357
+ timer = setTimeout(() => finish(false), 5000);
323
358
  });
324
359
  }
325
360
  /**
@@ -423,6 +458,35 @@ export class SIEMExporter {
423
458
  .replace(/\n/g, "\\n")
424
459
  .replace(/\r/g, "\\r");
425
460
  }
461
+ /**
462
+ * Escape a LEEF key or value. LEEF is tab-delimited and newline-terminated,
463
+ * so tabs/newlines/carriage-returns (and the `=` separator) must be neutralized
464
+ * to prevent attribute- or record-injection into the SIEM.
465
+ */
466
+ escapeLeef(value) {
467
+ return String(value)
468
+ .replace(/\\/g, "\\\\")
469
+ .replace(/=/g, "\\=")
470
+ .replace(/\t/g, " ")
471
+ .replace(/\r?\n/g, " ")
472
+ .replace(/[\x00-\x1f\x7f]/g, " ");
473
+ }
474
+ /**
475
+ * Escape a CEF header component (pipe-delimited). Backslash first, then pipe.
476
+ */
477
+ escapeCefHeader(value) {
478
+ return String(value)
479
+ .replace(/\\/g, "\\\\")
480
+ .replace(/\|/g, "\\|")
481
+ .replace(/[\r\n]+/g, " ");
482
+ }
483
+ /**
484
+ * Strip C0 control characters (CR/LF/tab/etc.) from free-text fields so a
485
+ * crafted value cannot terminate or forge a syslog/LEEF record.
486
+ */
487
+ sanitizeFreeText(value) {
488
+ return String(value).replace(/[\x00-\x1f\x7f]/g, " ");
489
+ }
426
490
  /**
427
491
  * Save failed event for later retry
428
492
  */
@@ -493,6 +557,8 @@ export class SIEMExporter {
493
557
  enabled: this.config.enabled,
494
558
  format: this.config.format,
495
559
  queue_size: this.eventQueue.length,
560
+ queue_max_size: this.config.queue_max_size,
561
+ dropped_events: this.droppedEvents,
496
562
  endpoint_configured: !!this.config.endpoint,
497
563
  syslog_configured: !!this.config.syslog_host,
498
564
  };
@@ -530,4 +596,3 @@ export async function exportToSIEM(eventType, eventName, severity, message, sour
530
596
  export async function flushSIEM() {
531
597
  return getSIEMExporter().flush();
532
598
  }
533
- //# sourceMappingURL=siem-exporter.js.map