opensentinel 3.6.1 → 3.7.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 (197) hide show
  1. package/README.md +12 -0
  2. package/dist/{agent-manager-7N7REQZQ.js → agent-manager-JZ4IM7XI.js} +8 -8
  3. package/dist/{agent-processor-I23VWQY3.js → agent-processor-DDDHC2SO.js} +22 -21
  4. package/dist/{agent-processor-I23VWQY3.js.map → agent-processor-DDDHC2SO.js.map} +1 -1
  5. package/dist/{alerting-4I37GG4U.js → alerting-LK7VVYTX.js} +4 -4
  6. package/dist/alerting-LK7VVYTX.js.map +1 -0
  7. package/dist/analyzer-OTWE3ARE.js +22 -0
  8. package/dist/{archiver-XLRIIXPY.js → archiver-FPGKRP6P.js} +16 -85
  9. package/dist/archiver-FPGKRP6P.js.map +1 -0
  10. package/dist/{audit-logger-AU3TMWKI.js → audit-logger-CI4WZQPD.js} +5 -5
  11. package/dist/bot-VDHBGUVI.js +47 -0
  12. package/dist/{brain-SLA474EU.js → brain-6QTXN4QP.js} +18 -17
  13. package/dist/{chunk-AR34B6XR.js → chunk-2I5QHYG6.js} +3 -3
  14. package/dist/chunk-2I5QHYG6.js.map +1 -0
  15. package/dist/chunk-3AWAWRWB.js +143 -0
  16. package/dist/chunk-3AWAWRWB.js.map +1 -0
  17. package/dist/{chunk-PUNIMPMY.js → chunk-4KIHDIXZ.js} +13 -2
  18. package/dist/chunk-4KIHDIXZ.js.map +1 -0
  19. package/dist/{chunk-GUKKW7JI.js → chunk-4WH6MFEW.js} +2 -2
  20. package/dist/chunk-4WH6MFEW.js.map +1 -0
  21. package/dist/{chunk-M7YLQHFP.js → chunk-56UJS2LA.js} +6 -6
  22. package/dist/{chunk-S4NJJS5C.js → chunk-5BTVJR7R.js} +3 -3
  23. package/dist/{chunk-HKOPRRDJ.js → chunk-5JJTLWOR.js} +3 -3
  24. package/dist/chunk-5JJTLWOR.js.map +1 -0
  25. package/dist/chunk-66SAOZPU.js +236 -0
  26. package/dist/chunk-66SAOZPU.js.map +1 -0
  27. package/dist/chunk-6HGMRR4J.js +113 -0
  28. package/dist/chunk-6HGMRR4J.js.map +1 -0
  29. package/dist/{chunk-BMOUYXLX.js → chunk-6ZNCY2GI.js} +5 -5
  30. package/dist/chunk-7BNFELEK.js +31 -0
  31. package/dist/chunk-7BNFELEK.js.map +1 -0
  32. package/dist/{chunk-KABG5PG3.js → chunk-BBN4VCNK.js} +4 -4
  33. package/dist/chunk-BBN4VCNK.js.map +1 -0
  34. package/dist/{chunk-4YJRBMMA.js → chunk-BNZHWAZC.js} +2 -2
  35. package/dist/{chunk-TAAZB5KN.js → chunk-CWT6CAE5.js} +2 -2
  36. package/dist/{chunk-UWUIJTT4.js → chunk-CZTMGHUC.js} +1 -1
  37. package/dist/chunk-CZTMGHUC.js.map +1 -0
  38. package/dist/chunk-DTISLIMB.js +89 -0
  39. package/dist/chunk-DTISLIMB.js.map +1 -0
  40. package/dist/{chunk-VKMFUIVA.js → chunk-GBVJTRXS.js} +2 -2
  41. package/dist/{chunk-MFK34XSY.js → chunk-GJETKBOY.js} +15 -15
  42. package/dist/chunk-GJETKBOY.js.map +1 -0
  43. package/dist/{chunk-HTF2GIQC.js → chunk-GW6V4D43.js} +2 -2
  44. package/dist/chunk-GW6V4D43.js.map +1 -0
  45. package/dist/{chunk-2RGPWU77.js → chunk-HJSEEFO3.js} +2 -2
  46. package/dist/{chunk-JOA5A3G3.js → chunk-HQZQFEAX.js} +5 -5
  47. package/dist/{chunk-45YXODSB.js → chunk-J4JW73TT.js} +2 -2
  48. package/dist/{chunk-KT7NLIXP.js → chunk-JHYYFPKX.js} +2 -2
  49. package/dist/{chunk-XMCVRVTF.js → chunk-P64EV4YY.js} +1 -1
  50. package/dist/chunk-P64EV4YY.js.map +1 -0
  51. package/dist/chunk-PBOCSGNL.js +84 -0
  52. package/dist/chunk-PBOCSGNL.js.map +1 -0
  53. package/dist/{chunk-H3BOLSTS.js → chunk-PD3CTDO6.js} +2 -2
  54. package/dist/{chunk-6UZPE35A.js → chunk-QPY3WRVM.js} +10 -87
  55. package/dist/chunk-QPY3WRVM.js.map +1 -0
  56. package/dist/{chunk-AD6YEH6U.js → chunk-S2EOIVF4.js} +590 -91
  57. package/dist/chunk-S2EOIVF4.js.map +1 -0
  58. package/dist/chunk-SDLOMKCW.js +213 -0
  59. package/dist/chunk-SDLOMKCW.js.map +1 -0
  60. package/dist/{chunk-7MZN73J2.js → chunk-TKBVW7ZJ.js} +4 -4
  61. package/dist/{chunk-A24GPVLY.js → chunk-V3OKHQUX.js} +5 -5
  62. package/dist/{chunk-NMSHVO5O.js → chunk-WMDVOWN6.js} +4 -4
  63. package/dist/{chunk-643M3AP5.js → chunk-WMFYI7XC.js} +7 -7
  64. package/dist/{chunk-6LTLIYAQ.js → chunk-YEDEAX6Y.js} +3 -3
  65. package/dist/{chunk-NYVBXUGD.js → chunk-ZIBRVA3Y.js} +60 -1
  66. package/dist/chunk-ZIBRVA3Y.js.map +1 -0
  67. package/dist/{chunk-6JY4HNUH.js → chunk-ZMML6T63.js} +361 -24
  68. package/dist/chunk-ZMML6T63.js.map +1 -0
  69. package/dist/{chunk-FFV2SXFD.js → chunk-ZVHG4KF2.js} +4 -4
  70. package/dist/cli.js.map +1 -1
  71. package/dist/commands/setup.js +1 -1
  72. package/dist/commands/start.js +2 -2
  73. package/dist/commands/status.js +1 -1
  74. package/dist/commands/stop.js +1 -1
  75. package/dist/commands/utils.js +1 -1
  76. package/dist/{cost-tracker-EMOIOYH7.js → cost-tracker-KZQSTSE2.js} +2 -2
  77. package/dist/{db-LRIOKQBO.js → db-I7MNG6CL.js} +10 -4
  78. package/dist/{discord-NKR3X4AV.js → discord-6UQHCN27.js} +24 -23
  79. package/dist/{documents-EYIYLZK2.js → documents-PFHSK7SZ.js} +19 -19
  80. package/dist/{email-EAQNULVD.js → email-6OIN4SYL.js} +22 -21
  81. package/dist/email-6OIN4SYL.js.map +1 -0
  82. package/dist/{enhanced-retrieval-OGHT6TS5.js → enhanced-retrieval-JWX2HWU4.js} +7 -6
  83. package/dist/{enhanced-retrieval-OGHT6TS5.js.map → enhanced-retrieval-JWX2HWU4.js.map} +1 -1
  84. package/dist/enrichment-pipeline-7FE5R5ZI.js +14 -0
  85. package/dist/{entity-resolution-4X4JU43O.js → entity-resolution-7Z6STVXX.js} +5 -5
  86. package/dist/{env-CHOFICED.js → env-GN5VHI43.js} +2 -2
  87. package/dist/{error-tracker-SVQSDQDW.js → error-tracker-64DEH3D7.js} +6 -6
  88. package/dist/{github-KGNILDWJ.js → github-DUWSXCNP.js} +4 -4
  89. package/dist/graph-client-NB475AK5.js +17 -0
  90. package/dist/{imessage-V2XNDDHT.js → imessage-DSGSGUZS.js} +19 -18
  91. package/dist/{inbox-summarizer-DKKRYXDR.js → inbox-summarizer-F2KAU72V.js} +19 -18
  92. package/dist/{incident-response-ZTIKUWEO.js → incident-response-E3UGMX5G.js} +5 -5
  93. package/dist/incident-response-E3UGMX5G.js.map +1 -0
  94. package/dist/{knowledge-base-J7PJ7MZ3.js → knowledge-base-5SMMOGQJ.js} +5 -5
  95. package/dist/lib.d.ts +21 -0
  96. package/dist/lib.js +64 -57
  97. package/dist/lib.js.map +1 -1
  98. package/dist/{matrix-XHTR53VQ.js → matrix-WYGEOZL5.js} +18 -17
  99. package/dist/{matrix-XHTR53VQ.js.map → matrix-WYGEOZL5.js.map} +1 -1
  100. package/dist/{mcp-3C2TN67D.js → mcp-DJ2QDA6A.js} +2 -2
  101. package/dist/{metrics-VJDWQWU7.js → metrics-BH3ZLGEV.js} +5 -5
  102. package/dist/{multi-user-S56GUD6L.js → multi-user-XAEMB244.js} +4 -4
  103. package/dist/oauth-UPJYFOVU.js +34 -0
  104. package/dist/{ocr-LGUIPKVZ.js → ocr-UONKTQU7.js} +4 -4
  105. package/dist/{presentations-HXTAMGHT.js → presentations-UOET2FVZ.js} +2 -2
  106. package/dist/{providers-H6YIC3MG.js → providers-2YQ6E3IF.js} +3 -3
  107. package/dist/{scheduler-CA5UNHZV.js → scheduler-6PLLAQI7.js} +21 -20
  108. package/dist/{schema-ALJ67YVG.js → schema-ETY7L2VA.js} +8 -2
  109. package/dist/sharepoint-V5P4Q62L.js +30 -0
  110. package/dist/{signal-X7IQJGRQ.js → signal-7D5EPGVL.js} +19 -18
  111. package/dist/{slack-P2LFUJUQ.js → slack-KSS6YK5Z.js} +23 -22
  112. package/dist/slack-KSS6YK5Z.js.map +1 -0
  113. package/dist/{sms-4VME2HUL.js → sms-CSUCC7HL.js} +3 -3
  114. package/dist/sms-CSUCC7HL.js.map +1 -0
  115. package/dist/{src-S5KX4YEV.js → src-GO7GGW7O.js} +48 -41
  116. package/dist/{src-S5KX4YEV.js.map → src-GO7GGW7O.js.map} +1 -1
  117. package/dist/token-store-SEWRX6RE.js +20 -0
  118. package/dist/token-store-SEWRX6RE.js.map +1 -0
  119. package/dist/{tools-FGPN522P.js → tools-PJZ6RI4P.js} +18 -17
  120. package/dist/tools-PJZ6RI4P.js.map +1 -0
  121. package/dist/{whatsapp-KRPQ4YUX.js → whatsapp-DWXK25V2.js} +19 -18
  122. package/dist/whatsapp-DWXK25V2.js.map +1 -0
  123. package/dist/{word-document-D6N2C47N.js → word-document-AV3YB4L2.js} +2 -2
  124. package/dist/{workflow-store-ZYAYE5P6.js → workflow-store-5Y56GUP7.js} +4 -4
  125. package/drizzle/0002_mushy_master_mold.sql +139 -139
  126. package/drizzle/0003_overjoyed_rhodey.sql +46 -0
  127. package/drizzle/meta/0002_snapshot.json +3636 -3636
  128. package/drizzle/meta/0003_snapshot.json +3946 -0
  129. package/drizzle/meta/_journal.json +7 -0
  130. package/package.json +110 -110
  131. package/dist/alerting-4I37GG4U.js.map +0 -1
  132. package/dist/archiver-XLRIIXPY.js.map +0 -1
  133. package/dist/bot-MU2TJQ3Y.js +0 -46
  134. package/dist/chunk-6JY4HNUH.js.map +0 -1
  135. package/dist/chunk-6UZPE35A.js.map +0 -1
  136. package/dist/chunk-AD6YEH6U.js.map +0 -1
  137. package/dist/chunk-AR34B6XR.js.map +0 -1
  138. package/dist/chunk-GUKKW7JI.js.map +0 -1
  139. package/dist/chunk-HKOPRRDJ.js.map +0 -1
  140. package/dist/chunk-HTF2GIQC.js.map +0 -1
  141. package/dist/chunk-KABG5PG3.js.map +0 -1
  142. package/dist/chunk-MFK34XSY.js.map +0 -1
  143. package/dist/chunk-NYVBXUGD.js.map +0 -1
  144. package/dist/chunk-PUNIMPMY.js.map +0 -1
  145. package/dist/chunk-UWUIJTT4.js.map +0 -1
  146. package/dist/chunk-XMCVRVTF.js.map +0 -1
  147. package/dist/email-EAQNULVD.js.map +0 -1
  148. package/dist/enrichment-pipeline-CMUVBDC7.js +0 -14
  149. package/dist/incident-response-ZTIKUWEO.js.map +0 -1
  150. /package/dist/{agent-manager-7N7REQZQ.js.map → agent-manager-JZ4IM7XI.js.map} +0 -0
  151. /package/dist/{audit-logger-AU3TMWKI.js.map → analyzer-OTWE3ARE.js.map} +0 -0
  152. /package/dist/{bot-MU2TJQ3Y.js.map → audit-logger-CI4WZQPD.js.map} +0 -0
  153. /package/dist/{brain-SLA474EU.js.map → bot-VDHBGUVI.js.map} +0 -0
  154. /package/dist/{cost-tracker-EMOIOYH7.js.map → brain-6QTXN4QP.js.map} +0 -0
  155. /package/dist/{chunk-M7YLQHFP.js.map → chunk-56UJS2LA.js.map} +0 -0
  156. /package/dist/{chunk-S4NJJS5C.js.map → chunk-5BTVJR7R.js.map} +0 -0
  157. /package/dist/{chunk-BMOUYXLX.js.map → chunk-6ZNCY2GI.js.map} +0 -0
  158. /package/dist/{chunk-4YJRBMMA.js.map → chunk-BNZHWAZC.js.map} +0 -0
  159. /package/dist/{chunk-TAAZB5KN.js.map → chunk-CWT6CAE5.js.map} +0 -0
  160. /package/dist/{chunk-VKMFUIVA.js.map → chunk-GBVJTRXS.js.map} +0 -0
  161. /package/dist/{chunk-2RGPWU77.js.map → chunk-HJSEEFO3.js.map} +0 -0
  162. /package/dist/{chunk-JOA5A3G3.js.map → chunk-HQZQFEAX.js.map} +0 -0
  163. /package/dist/{chunk-45YXODSB.js.map → chunk-J4JW73TT.js.map} +0 -0
  164. /package/dist/{chunk-KT7NLIXP.js.map → chunk-JHYYFPKX.js.map} +0 -0
  165. /package/dist/{chunk-H3BOLSTS.js.map → chunk-PD3CTDO6.js.map} +0 -0
  166. /package/dist/{chunk-7MZN73J2.js.map → chunk-TKBVW7ZJ.js.map} +0 -0
  167. /package/dist/{chunk-A24GPVLY.js.map → chunk-V3OKHQUX.js.map} +0 -0
  168. /package/dist/{chunk-NMSHVO5O.js.map → chunk-WMDVOWN6.js.map} +0 -0
  169. /package/dist/{chunk-643M3AP5.js.map → chunk-WMFYI7XC.js.map} +0 -0
  170. /package/dist/{chunk-6LTLIYAQ.js.map → chunk-YEDEAX6Y.js.map} +0 -0
  171. /package/dist/{chunk-FFV2SXFD.js.map → chunk-ZVHG4KF2.js.map} +0 -0
  172. /package/dist/{db-LRIOKQBO.js.map → cost-tracker-KZQSTSE2.js.map} +0 -0
  173. /package/dist/{discord-NKR3X4AV.js.map → db-I7MNG6CL.js.map} +0 -0
  174. /package/dist/{enrichment-pipeline-CMUVBDC7.js.map → discord-6UQHCN27.js.map} +0 -0
  175. /package/dist/{documents-EYIYLZK2.js.map → documents-PFHSK7SZ.js.map} +0 -0
  176. /package/dist/{entity-resolution-4X4JU43O.js.map → enrichment-pipeline-7FE5R5ZI.js.map} +0 -0
  177. /package/dist/{env-CHOFICED.js.map → entity-resolution-7Z6STVXX.js.map} +0 -0
  178. /package/dist/{error-tracker-SVQSDQDW.js.map → env-GN5VHI43.js.map} +0 -0
  179. /package/dist/{imessage-V2XNDDHT.js.map → error-tracker-64DEH3D7.js.map} +0 -0
  180. /package/dist/{github-KGNILDWJ.js.map → github-DUWSXCNP.js.map} +0 -0
  181. /package/dist/{inbox-summarizer-DKKRYXDR.js.map → graph-client-NB475AK5.js.map} +0 -0
  182. /package/dist/{knowledge-base-J7PJ7MZ3.js.map → imessage-DSGSGUZS.js.map} +0 -0
  183. /package/dist/{mcp-3C2TN67D.js.map → inbox-summarizer-F2KAU72V.js.map} +0 -0
  184. /package/dist/{metrics-VJDWQWU7.js.map → knowledge-base-5SMMOGQJ.js.map} +0 -0
  185. /package/dist/{ocr-LGUIPKVZ.js.map → mcp-DJ2QDA6A.js.map} +0 -0
  186. /package/dist/{providers-H6YIC3MG.js.map → metrics-BH3ZLGEV.js.map} +0 -0
  187. /package/dist/{multi-user-S56GUD6L.js.map → multi-user-XAEMB244.js.map} +0 -0
  188. /package/dist/{scheduler-CA5UNHZV.js.map → oauth-UPJYFOVU.js.map} +0 -0
  189. /package/dist/{schema-ALJ67YVG.js.map → ocr-UONKTQU7.js.map} +0 -0
  190. /package/dist/{presentations-HXTAMGHT.js.map → presentations-UOET2FVZ.js.map} +0 -0
  191. /package/dist/{signal-X7IQJGRQ.js.map → providers-2YQ6E3IF.js.map} +0 -0
  192. /package/dist/{slack-P2LFUJUQ.js.map → scheduler-6PLLAQI7.js.map} +0 -0
  193. /package/dist/{sms-4VME2HUL.js.map → schema-ETY7L2VA.js.map} +0 -0
  194. /package/dist/{tools-FGPN522P.js.map → sharepoint-V5P4Q62L.js.map} +0 -0
  195. /package/dist/{whatsapp-KRPQ4YUX.js.map → signal-7D5EPGVL.js.map} +0 -0
  196. /package/dist/{word-document-D6N2C47N.js.map → word-document-AV3YB4L2.js.map} +0 -0
  197. /package/dist/{workflow-store-ZYAYE5P6.js.map → workflow-store-5Y56GUP7.js.map} +0 -0
@@ -2,13 +2,13 @@ import {
2
2
  reviewPullRequest,
3
3
  securityScan,
4
4
  summarizeChanges
5
- } from "./chunk-HKOPRRDJ.js";
5
+ } from "./chunk-5JJTLWOR.js";
6
6
  import {
7
7
  TFIDFProvider,
8
8
  buildMemoryContext,
9
9
  searchMemories,
10
10
  storeMemory
11
- } from "./chunk-6UZPE35A.js";
11
+ } from "./chunk-QPY3WRVM.js";
12
12
  import {
13
13
  hookManager,
14
14
  soulHookManager
@@ -46,7 +46,7 @@ import {
46
46
  sendMMS,
47
47
  sendSMS,
48
48
  validateTwilioSignature
49
- } from "./chunk-2RGPWU77.js";
49
+ } from "./chunk-HJSEEFO3.js";
50
50
  import {
51
51
  client_exports,
52
52
  init_client,
@@ -60,15 +60,15 @@ import {
60
60
  cancelAgent,
61
61
  getAgent,
62
62
  spawnAgent
63
- } from "./chunk-643M3AP5.js";
63
+ } from "./chunk-WMFYI7XC.js";
64
64
  import {
65
65
  metric
66
- } from "./chunk-6LTLIYAQ.js";
66
+ } from "./chunk-YEDEAX6Y.js";
67
67
  import {
68
68
  MODEL_TIERS,
69
69
  costTracker,
70
70
  modelRouter
71
- } from "./chunk-BMOUYXLX.js";
71
+ } from "./chunk-6ZNCY2GI.js";
72
72
  import {
73
73
  CryptoClient
74
74
  } from "./chunk-6KONMXQ6.js";
@@ -92,26 +92,26 @@ import {
92
92
  getCommunities,
93
93
  getNeighbors,
94
94
  runCustomCypher
95
- } from "./chunk-A24GPVLY.js";
95
+ } from "./chunk-V3OKHQUX.js";
96
96
  import {
97
97
  findDuplicates,
98
98
  mergeEntities,
99
99
  resolveEntity
100
- } from "./chunk-AR34B6XR.js";
100
+ } from "./chunk-2I5QHYG6.js";
101
101
  import {
102
102
  executeMCPTool,
103
103
  isMCPTool,
104
104
  mcpToolsToAnthropicTools
105
- } from "./chunk-UWUIJTT4.js";
105
+ } from "./chunk-CZTMGHUC.js";
106
106
  import {
107
107
  analyzeImage,
108
108
  analyzeImageBuffer,
109
109
  extractStructuredData,
110
110
  performOCR
111
- } from "./chunk-GUKKW7JI.js";
111
+ } from "./chunk-4WH6MFEW.js";
112
112
  import {
113
113
  providerRegistry
114
- } from "./chunk-HTF2GIQC.js";
114
+ } from "./chunk-GW6V4D43.js";
115
115
  import {
116
116
  generatePDF
117
117
  } from "./chunk-DOYGMNMK.js";
@@ -124,13 +124,13 @@ import {
124
124
  } from "./chunk-CQ4JURG7.js";
125
125
  import {
126
126
  audit
127
- } from "./chunk-KABG5PG3.js";
127
+ } from "./chunk-BBN4VCNK.js";
128
128
  import {
129
129
  db
130
- } from "./chunk-S4NJJS5C.js";
130
+ } from "./chunk-5BTVJR7R.js";
131
131
  import {
132
132
  env
133
- } from "./chunk-PUNIMPMY.js";
133
+ } from "./chunk-4KIHDIXZ.js";
134
134
  import {
135
135
  achievements,
136
136
  conversations,
@@ -143,7 +143,7 @@ import {
143
143
  toolLogs,
144
144
  usagePatterns,
145
145
  userAchievements
146
- } from "./chunk-NYVBXUGD.js";
146
+ } from "./chunk-ZIBRVA3Y.js";
147
147
  import {
148
148
  __esm,
149
149
  __export,
@@ -26572,7 +26572,7 @@ var TOOLS = [
26572
26572
  },
26573
26573
  {
26574
26574
  name: "generate_spreadsheet",
26575
- description: "Generate a spreadsheet (Excel or CSV) from data",
26575
+ description: "Create a local Excel (.xlsx) or CSV spreadsheet from structured data (2D array or array of objects). Returns a file path the user can download. Use for queries like 'create an Excel with Q2 sales data', 'make a CSV of my contacts', 'build a spreadsheet with these columns'.",
26576
26576
  input_schema: {
26577
26577
  type: "object",
26578
26578
  properties: {
@@ -28777,7 +28777,7 @@ var TOOLS = [
28777
28777
  },
28778
28778
  {
28779
28779
  name: "generate_word_document",
28780
- description: "Generate a Word (.docx) document with formatted content including headings, paragraphs, lists, tables, and images.",
28780
+ description: "Create a local Word (.docx) document with formatted content including headings, paragraphs, lists, tables, and images. Content is passed as markdown and converted. Use for queries like 'create a Word doc about X', 'draft a letter in Word', 'write a memo'.",
28781
28781
  input_schema: {
28782
28782
  type: "object",
28783
28783
  properties: {
@@ -28818,7 +28818,7 @@ var TOOLS = [
28818
28818
  },
28819
28819
  {
28820
28820
  name: "parse_document",
28821
- description: "Parse and extract text from uploaded documents. Supports PDF, DOCX, TXT, MD, HTML, CSV, JSON, XML, YAML.",
28821
+ description: "Read a local document file and extract its text (for summarising, analysing, question-answering). Supports PDF, DOCX (Word), TXT, MD, HTML, CSV, JSON, XML, YAML. For Excel/XLSX files use analyze_spreadsheet instead. Use this for queries like 'analyze my document', 'summarize this PDF', 'what does this Word doc say'.",
28822
28822
  input_schema: {
28823
28823
  type: "object",
28824
28824
  properties: {
@@ -28828,6 +28828,18 @@ var TOOLS = [
28828
28828
  required: ["file_path"]
28829
28829
  }
28830
28830
  },
28831
+ {
28832
+ name: "analyze_spreadsheet",
28833
+ description: "Read a local Excel (.xlsx) or CSV spreadsheet and return its contents as structured text (sheet names, headers, rows). Claude can then summarise, spot anomalies, flag PII, answer questions about the data, etc. Use for queries like 'analyze my spreadsheet', 'summarize this xlsx', 'find anomalies in this Excel', 'pull PII from this CSV'.",
28834
+ input_schema: {
28835
+ type: "object",
28836
+ properties: {
28837
+ file_path: { type: "string", description: "Path to the .xlsx or .csv file" },
28838
+ max_rows_per_sheet: { type: "number", description: "Cap rows returned per sheet (default 500)" }
28839
+ },
28840
+ required: ["file_path"]
28841
+ }
28842
+ },
28831
28843
  {
28832
28844
  name: "key_rotation",
28833
28845
  description: "Rotate encryption keys and security credentials. Generate new keys, check rotation status, and re-encrypt stored data.",
@@ -28987,6 +28999,71 @@ var TOOLS = [
28987
28999
  },
28988
29000
  required: ["action"]
28989
29001
  }
29002
+ },
29003
+ // ---------------------------------------------------------------------
29004
+ // Microsoft 365 / Graph — chat-callable
29005
+ // Requires the user to have connected M365 first via the dashboard.
29006
+ // ---------------------------------------------------------------------
29007
+ {
29008
+ name: "m365_list_inbox",
29009
+ description: "List the latest emails from the user's Outlook inbox via Microsoft Graph. Requires Microsoft 365 to be connected via the dashboard. Use this when the user asks something like 'list my emails' or 'show my inbox' or 'any new Microsoft mail'.",
29010
+ input_schema: {
29011
+ type: "object",
29012
+ properties: {
29013
+ top: { type: "number", description: "Number of messages to return (default 10, max 50)" },
29014
+ unreadOnly: { type: "boolean", description: "Only return unread messages" },
29015
+ search: { type: "string", description: "Free-text search term (sender, subject, body)" }
29016
+ }
29017
+ }
29018
+ },
29019
+ {
29020
+ name: "m365_analyze_email",
29021
+ description: "Analyze a specific email for phishing, business-email-compromise, and credential-harvest risk. Uses Claude with a security analyst prompt. Returns risk score 0-100, category (Safe/Suspicious/Phishing), signals detected, and recommended actions. Pass either a graphMessageId (preferred \u2014 full message is fetched via Graph) OR raw subject+sender+body.",
29022
+ input_schema: {
29023
+ type: "object",
29024
+ properties: {
29025
+ graphMessageId: { type: "string", description: "Microsoft Graph message id \u2014 fetched and analyzed" },
29026
+ subject: { type: "string", description: "Email subject (if not using graphMessageId)" },
29027
+ sender: { type: "string", description: "Sender email or display (if not using graphMessageId)" },
29028
+ body: { type: "string", description: "Email body text (if not using graphMessageId)" }
29029
+ }
29030
+ }
29031
+ },
29032
+ {
29033
+ name: "m365_list_sharepoint_sites",
29034
+ description: "List SharePoint sites the user has access to via Microsoft Graph. Returns site id, name, description, and webUrl. Requires Microsoft 365 connected. Use for queries like 'what SharePoint sites do I have', 'find the Finance SharePoint site', etc.",
29035
+ input_schema: {
29036
+ type: "object",
29037
+ properties: {
29038
+ search: { type: "string", description: "Optional search term to filter sites by name" },
29039
+ top: { type: "number", description: "Max sites to return (default 25)" }
29040
+ }
29041
+ }
29042
+ },
29043
+ {
29044
+ name: "m365_list_sharepoint_files",
29045
+ description: "List files in a SharePoint site's default document library (Shared Documents). Returns file id, name, size, mimeType, and webUrl. Pass siteId from m365_list_sharepoint_sites.",
29046
+ input_schema: {
29047
+ type: "object",
29048
+ properties: {
29049
+ siteId: { type: "string", description: "SharePoint site id (from m365_list_sharepoint_sites)" },
29050
+ search: { type: "string", description: "Optional search term to filter files" },
29051
+ top: { type: "number", description: "Max items to return (default 25)" }
29052
+ },
29053
+ required: ["siteId"]
29054
+ }
29055
+ },
29056
+ {
29057
+ name: "m365_analyze_sharepoint_file",
29058
+ description: "Analyze a SharePoint/OneDrive file for risk (PII, phishing payload, credential-harvest content, policy violations). Extracts text from .docx/.xlsx/.pdf/.txt/.csv/.html and sends to Claude. Pass driveId + itemId \u2014 both come from m365_list_sharepoint_files response (item.parentReference.driveId + item.id).",
29059
+ input_schema: {
29060
+ type: "object",
29061
+ properties: {
29062
+ driveId: { type: "string", description: "Microsoft Graph drive id" },
29063
+ itemId: { type: "string", description: "Microsoft Graph drive item id (file id)" }
29064
+ },
29065
+ required: ["driveId", "itemId"]
29066
+ }
28990
29067
  }
28991
29068
  ];
28992
29069
  var mcpRegistry = null;
@@ -31223,7 +31300,7 @@ async function executeTool(name, input) {
31223
31300
  }
31224
31301
  case "message_status": {
31225
31302
  if (!input.message_sid) return { success: false, result: null, error: "'message_sid' required" };
31226
- const { getMessageStatus: getMessageStatus2 } = await import("./sms-4VME2HUL.js");
31303
+ const { getMessageStatus: getMessageStatus2 } = await import("./sms-CSUCC7HL.js");
31227
31304
  const result = await getMessageStatus2(input.message_sid);
31228
31305
  return { success: result.success, result: result.success ? { sid: result.messageSid, status: result.status } : null, error: result.error };
31229
31306
  }
@@ -32443,7 +32520,7 @@ async function executeTool(name, input) {
32443
32520
  }
32444
32521
  // ===== NEW TOOLS (v3.1.0) =====
32445
32522
  case "ocr_tesseract": {
32446
- const { ocrWithTesseract } = await import("./ocr-LGUIPKVZ.js");
32523
+ const { ocrWithTesseract } = await import("./ocr-UONKTQU7.js");
32447
32524
  const result = await ocrWithTesseract(input.file_path, input.language);
32448
32525
  return { success: result.success, result: result.text || result.error, error: result.error };
32449
32526
  }
@@ -32458,7 +32535,7 @@ async function executeTool(name, input) {
32458
32535
  return withDownloadUrl({ success: result.success, filePath: result.filePath, error: result.error });
32459
32536
  }
32460
32537
  case "generate_word_document": {
32461
- const { generateWordDocument } = await import("./word-document-D6N2C47N.js");
32538
+ const { generateWordDocument } = await import("./word-document-AV3YB4L2.js");
32462
32539
  const elements = typeof input.content === "string" ? JSON.parse(input.content) : input.content || [];
32463
32540
  const opts = { title: input.title };
32464
32541
  if (input.template) opts.template = input.template;
@@ -32466,7 +32543,7 @@ async function executeTool(name, input) {
32466
32543
  return withDownloadUrl({ success: result.success, filePath: result.filePath, error: result.error });
32467
32544
  }
32468
32545
  case "generate_presentation": {
32469
- const { generatePresentation } = await import("./presentations-HXTAMGHT.js");
32546
+ const { generatePresentation } = await import("./presentations-UOET2FVZ.js");
32470
32547
  const slides = typeof input.slides === "string" ? JSON.parse(input.slides) : input.slides;
32471
32548
  const result = await generatePresentation(slides, input.filename, {
32472
32549
  theme: input.theme
@@ -32482,7 +32559,7 @@ async function executeTool(name, input) {
32482
32559
  return withDownloadUrl({ success: result.success, filePath: result.url || result.filePath, error: result.error });
32483
32560
  }
32484
32561
  case "parse_document": {
32485
- const { parseDocument } = await import("./documents-EYIYLZK2.js");
32562
+ const { parseDocument } = await import("./documents-PFHSK7SZ.js");
32486
32563
  const result = await parseDocument(input.file_path, input.format);
32487
32564
  const text3 = result.text || "";
32488
32565
  return {
@@ -32495,6 +32572,82 @@ async function executeTool(name, input) {
32495
32572
  }
32496
32573
  };
32497
32574
  }
32575
+ case "analyze_spreadsheet": {
32576
+ const path4 = input.file_path;
32577
+ if (!path4) {
32578
+ return { success: false, result: null, error: "file_path is required" };
32579
+ }
32580
+ const maxRows = typeof input.max_rows_per_sheet === "number" ? input.max_rows_per_sheet : 500;
32581
+ const { readFile: readFile4 } = await import("fs/promises");
32582
+ const { extname: extname2 } = await import("path");
32583
+ const ext = extname2(path4).toLowerCase();
32584
+ try {
32585
+ if (ext === ".csv") {
32586
+ const raw = await readFile4(path4, "utf8");
32587
+ const lines = raw.split(/\r?\n/).slice(0, maxRows + 1);
32588
+ return {
32589
+ success: true,
32590
+ result: {
32591
+ format: "csv",
32592
+ rowCount: lines.length,
32593
+ truncated: raw.split(/\r?\n/).length > maxRows + 1,
32594
+ text: lines.join("\n")
32595
+ }
32596
+ };
32597
+ }
32598
+ if (ext !== ".xlsx") {
32599
+ return {
32600
+ success: false,
32601
+ result: null,
32602
+ error: `Unsupported extension ${ext}. Use .xlsx or .csv.`
32603
+ };
32604
+ }
32605
+ const buf = await readFile4(path4);
32606
+ const ExcelJS = await import("exceljs");
32607
+ const wb = new ExcelJS.default.Workbook();
32608
+ await wb.xlsx.load(buf);
32609
+ const sheets = [];
32610
+ wb.eachSheet((sheet) => {
32611
+ const rows = [];
32612
+ let i = 0;
32613
+ sheet.eachRow((row) => {
32614
+ if (i >= maxRows) return;
32615
+ const cells = [];
32616
+ row.eachCell({ includeEmpty: true }, (c) => {
32617
+ cells.push(c.value == null ? "" : String(c.value));
32618
+ });
32619
+ rows.push(cells);
32620
+ i++;
32621
+ });
32622
+ sheets.push({
32623
+ name: sheet.name,
32624
+ rowCount: sheet.rowCount,
32625
+ truncated: sheet.rowCount > maxRows,
32626
+ rows
32627
+ });
32628
+ });
32629
+ const textBlob = sheets.map(
32630
+ (s) => `# Sheet: ${s.name} (${s.rowCount} rows${s.truncated ? ", truncated" : ""})
32631
+ ` + s.rows.map((r) => r.join(" ")).join("\n")
32632
+ ).join("\n\n");
32633
+ return {
32634
+ success: true,
32635
+ result: {
32636
+ format: "xlsx",
32637
+ sheetCount: sheets.length,
32638
+ sheets,
32639
+ text: textBlob.length > 5e4 ? textBlob.slice(0, 5e4) + "\n...[truncated]" : textBlob,
32640
+ truncated: textBlob.length > 5e4
32641
+ }
32642
+ };
32643
+ } catch (err) {
32644
+ return {
32645
+ success: false,
32646
+ result: null,
32647
+ error: err instanceof Error ? err.message : String(err)
32648
+ };
32649
+ }
32650
+ }
32498
32651
  case "key_rotation": {
32499
32652
  const keyRotation = await import("./key-rotation-WCC5FOYS.js");
32500
32653
  switch (input.action) {
@@ -32614,6 +32767,190 @@ async function executeTool(name, input) {
32614
32767
  });
32615
32768
  return { success: result.success, result: result.entry || result.entries || result.error, error: result.error };
32616
32769
  }
32770
+ // -------------------------------------------------------------------
32771
+ // Microsoft 365 / Graph — chat-callable
32772
+ // Uses the "local" user key since tool execution doesn't currently
32773
+ // carry the authenticated user context through to this switch.
32774
+ // -------------------------------------------------------------------
32775
+ case "m365_list_inbox": {
32776
+ const { getAccessToken: getAccessToken3 } = await import("./token-store-SEWRX6RE.js");
32777
+ const { listMessages } = await import("./graph-client-NB475AK5.js");
32778
+ const { isM365Configured } = await import("./oauth-UPJYFOVU.js");
32779
+ if (!isM365Configured()) {
32780
+ return { success: false, result: null, error: "Microsoft 365 is not configured. Set M365_CLIENT_ID and M365_CLIENT_SECRET in .env." };
32781
+ }
32782
+ const token = await getAccessToken3("local");
32783
+ const result = await listMessages(token, {
32784
+ top: typeof input.top === "number" ? input.top : 10,
32785
+ unreadOnly: input.unreadOnly === true,
32786
+ search: typeof input.search === "string" ? input.search : void 0
32787
+ });
32788
+ const slim = (result.value || []).map((m) => ({
32789
+ id: m.id,
32790
+ subject: m.subject,
32791
+ from: m.from?.emailAddress?.address,
32792
+ receivedDateTime: m.receivedDateTime,
32793
+ isRead: m.isRead,
32794
+ preview: m.bodyPreview
32795
+ }));
32796
+ return { success: true, result: { count: slim.length, messages: slim } };
32797
+ }
32798
+ case "m365_analyze_email": {
32799
+ const { isM365Configured } = await import("./oauth-UPJYFOVU.js");
32800
+ const { analyzeEmail, persistAnalysis } = await import("./analyzer-OTWE3ARE.js");
32801
+ let analysisInput = null;
32802
+ let inputId;
32803
+ if (typeof input.graphMessageId === "string" && input.graphMessageId) {
32804
+ if (!isM365Configured()) {
32805
+ return { success: false, result: null, error: "Microsoft 365 is not configured." };
32806
+ }
32807
+ const { getAccessToken: getAccessToken3 } = await import("./token-store-SEWRX6RE.js");
32808
+ const { getMessage, stripHtml } = await import("./graph-client-NB475AK5.js");
32809
+ const token = await getAccessToken3("local");
32810
+ const msg = await getMessage(token, input.graphMessageId);
32811
+ const bodyText = msg.body?.contentType === "html" ? stripHtml(msg.body.content || "") : msg.body?.content || msg.bodyPreview || "";
32812
+ analysisInput = {
32813
+ subject: msg.subject || "(no subject)",
32814
+ sender: msg.from?.emailAddress?.address || "unknown",
32815
+ body: bodyText
32816
+ };
32817
+ inputId = input.graphMessageId;
32818
+ } else if (input.subject && input.sender) {
32819
+ analysisInput = {
32820
+ subject: String(input.subject),
32821
+ sender: String(input.sender),
32822
+ body: typeof input.body === "string" ? input.body : void 0
32823
+ };
32824
+ } else {
32825
+ return {
32826
+ success: false,
32827
+ result: null,
32828
+ error: "Either graphMessageId or subject+sender is required"
32829
+ };
32830
+ }
32831
+ const result = await analyzeEmail(analysisInput);
32832
+ try {
32833
+ await persistAnalysis({
32834
+ userKey: "local",
32835
+ input: analysisInput,
32836
+ inputId,
32837
+ inputType: "email",
32838
+ result
32839
+ });
32840
+ } catch {
32841
+ }
32842
+ return { success: true, result };
32843
+ }
32844
+ case "m365_list_sharepoint_sites": {
32845
+ const { isM365Configured } = await import("./oauth-UPJYFOVU.js");
32846
+ const { getAccessToken: getAccessToken3 } = await import("./token-store-SEWRX6RE.js");
32847
+ const { listSites: listSites2 } = await import("./sharepoint-V5P4Q62L.js");
32848
+ if (!isM365Configured()) {
32849
+ return { success: false, result: null, error: "Microsoft 365 is not configured." };
32850
+ }
32851
+ const token = await getAccessToken3("local");
32852
+ const sites2 = await listSites2(token, {
32853
+ search: typeof input.search === "string" ? input.search : void 0,
32854
+ top: typeof input.top === "number" ? input.top : 25
32855
+ });
32856
+ return {
32857
+ success: true,
32858
+ result: {
32859
+ count: sites2.length,
32860
+ sites: sites2.map((s) => ({
32861
+ id: s.id,
32862
+ name: s.displayName || s.name,
32863
+ description: s.description,
32864
+ webUrl: s.webUrl
32865
+ }))
32866
+ }
32867
+ };
32868
+ }
32869
+ case "m365_list_sharepoint_files": {
32870
+ const { isM365Configured } = await import("./oauth-UPJYFOVU.js");
32871
+ const { getAccessToken: getAccessToken3 } = await import("./token-store-SEWRX6RE.js");
32872
+ const { getDefaultDrive, listDriveRoot } = await import("./sharepoint-V5P4Q62L.js");
32873
+ if (!isM365Configured()) {
32874
+ return { success: false, result: null, error: "Microsoft 365 is not configured." };
32875
+ }
32876
+ if (!input.siteId) {
32877
+ return { success: false, result: null, error: "siteId is required" };
32878
+ }
32879
+ const token = await getAccessToken3("local");
32880
+ const drive = await getDefaultDrive(token, input.siteId);
32881
+ const items2 = await listDriveRoot(token, drive.id, {
32882
+ search: typeof input.search === "string" ? input.search : void 0,
32883
+ top: typeof input.top === "number" ? input.top : 25
32884
+ });
32885
+ return {
32886
+ success: true,
32887
+ result: {
32888
+ driveId: drive.id,
32889
+ driveName: drive.name,
32890
+ count: items2.length,
32891
+ items: items2.map((i) => ({
32892
+ id: i.id,
32893
+ name: i.name,
32894
+ isFolder: !!i.folder,
32895
+ size: i.size,
32896
+ mimeType: i.file?.mimeType,
32897
+ webUrl: i.webUrl,
32898
+ lastModified: i.lastModifiedDateTime
32899
+ }))
32900
+ }
32901
+ };
32902
+ }
32903
+ case "m365_analyze_sharepoint_file": {
32904
+ const { isM365Configured } = await import("./oauth-UPJYFOVU.js");
32905
+ const { getAccessToken: getAccessToken3 } = await import("./token-store-SEWRX6RE.js");
32906
+ const { getDriveItem, extractTextFromDriveItem } = await import("./sharepoint-V5P4Q62L.js");
32907
+ const { analyzeEmail, persistAnalysis } = await import("./analyzer-OTWE3ARE.js");
32908
+ if (!isM365Configured()) {
32909
+ return { success: false, result: null, error: "Microsoft 365 is not configured." };
32910
+ }
32911
+ if (!input.driveId || !input.itemId) {
32912
+ return { success: false, result: null, error: "driveId and itemId are required" };
32913
+ }
32914
+ const token = await getAccessToken3("local");
32915
+ const item = await getDriveItem(token, input.driveId, input.itemId);
32916
+ const extracted = await extractTextFromDriveItem(
32917
+ token,
32918
+ input.driveId,
32919
+ input.itemId,
32920
+ item
32921
+ );
32922
+ if (!extracted.text || extracted.text.trim().length === 0) {
32923
+ return {
32924
+ success: false,
32925
+ result: { extractedFrom: extracted.extractedFrom, byteLength: extracted.byteLength },
32926
+ error: `No text could be extracted (${extracted.extractedFrom})`
32927
+ };
32928
+ }
32929
+ const analysisInput = {
32930
+ subject: item.name || "(unnamed file)",
32931
+ sender: item.parentReference?.path || "sharepoint",
32932
+ body: extracted.text.slice(0, 16e3)
32933
+ };
32934
+ const result = await analyzeEmail(analysisInput);
32935
+ try {
32936
+ await persistAnalysis({
32937
+ userKey: "local",
32938
+ input: analysisInput,
32939
+ inputId: `${input.driveId}:${input.itemId}`,
32940
+ inputType: "file",
32941
+ result
32942
+ });
32943
+ } catch {
32944
+ }
32945
+ return {
32946
+ success: true,
32947
+ result: {
32948
+ ...result,
32949
+ file: { name: item.name, size: item.size, mimeType: item.file?.mimeType, webUrl: item.webUrl },
32950
+ extractedFrom: extracted.extractedFrom
32951
+ }
32952
+ };
32953
+ }
32617
32954
  default:
32618
32955
  return { success: false, result: null, error: `Unknown tool: ${name}` };
32619
32956
  }
@@ -32662,4 +32999,4 @@ export {
32662
32999
  streamChat,
32663
33000
  streamChatWithTools
32664
33001
  };
32665
- //# sourceMappingURL=chunk-6JY4HNUH.js.map
33002
+ //# sourceMappingURL=chunk-ZMML6T63.js.map