opensentinel 3.1.1 → 3.6.1

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 (325) hide show
  1. package/README.md +126 -83
  2. package/dist/agent-manager-7N7REQZQ.js +39 -0
  3. package/dist/agent-processor-I23VWQY3.js +280 -0
  4. package/dist/agent-processor-I23VWQY3.js.map +1 -0
  5. package/dist/agent-types-2T4PXLFQ.js +12 -0
  6. package/dist/alerting-4I37GG4U.js +699 -0
  7. package/dist/alerting-4I37GG4U.js.map +1 -0
  8. package/dist/analysis-agent-JWN2GXYE.js +288 -0
  9. package/dist/analysis-agent-JWN2GXYE.js.map +1 -0
  10. package/dist/{archiver-AVNBYCKQ.js → archiver-XLRIIXPY.js} +86 -17
  11. package/dist/archiver-XLRIIXPY.js.map +1 -0
  12. package/dist/{audit-logger-OBPR7CRO.js → audit-logger-AU3TMWKI.js} +6 -5
  13. package/dist/{auth-UOX5K2BE.js → auth-PH5IHISW.js} +2 -2
  14. package/dist/{autonomy-ZXDBDQUJ.js → autonomy-N7W5XPLX.js} +4 -3
  15. package/dist/autonomy-N7W5XPLX.js.map +1 -0
  16. package/dist/{aws-s3-Q4LLZZPD.js → aws-s3-QZMURYXB.js} +2 -2
  17. package/dist/{backup-restore-PZ7CYYB7.js → backup-restore-72OQTZO3.js} +2 -2
  18. package/dist/{blocks-R3PODY47.js → blocks-YOWOESDD.js} +4 -4
  19. package/dist/bot-MU2TJQ3Y.js +46 -0
  20. package/dist/brain-SLA474EU.js +65 -0
  21. package/dist/{camera-monitor-M5CYKUU4.js → camera-monitor-LHTUWHEL.js} +2 -2
  22. package/dist/{charts-V7ARZNKF.js → charts-FJ32GQK7.js} +2 -2
  23. package/dist/{chunk-6PMVAAA7.js → chunk-2RGPWU77.js} +3 -3
  24. package/dist/{chunk-TVEWKIK3.js → chunk-2WTKTG2C.js} +2 -2
  25. package/dist/{chunk-MXAPLSJ5.js → chunk-45YXODSB.js} +2 -2
  26. package/dist/{chunk-SJSUSJ47.js → chunk-4YJRBMMA.js} +2 -2
  27. package/dist/chunk-643M3AP5.js +564 -0
  28. package/dist/chunk-643M3AP5.js.map +1 -0
  29. package/dist/{chunk-766ASQWE.js → chunk-6JY4HNUH.js} +2413 -2368
  30. package/dist/chunk-6JY4HNUH.js.map +1 -0
  31. package/dist/chunk-6LTLIYAQ.js +194 -0
  32. package/dist/chunk-6LTLIYAQ.js.map +1 -0
  33. package/dist/chunk-6UZPE35A.js +724 -0
  34. package/dist/chunk-6UZPE35A.js.map +1 -0
  35. package/dist/chunk-6W6PTJFT.js +181 -0
  36. package/dist/chunk-6W6PTJFT.js.map +1 -0
  37. package/dist/chunk-7MZN73J2.js +162 -0
  38. package/dist/chunk-7MZN73J2.js.map +1 -0
  39. package/dist/{chunk-SVAPX2XN.js → chunk-A24GPVLY.js} +9 -7
  40. package/dist/{chunk-SVAPX2XN.js.map → chunk-A24GPVLY.js.map} +1 -1
  41. package/dist/chunk-AD6YEH6U.js +3408 -0
  42. package/dist/chunk-AD6YEH6U.js.map +1 -0
  43. package/dist/chunk-ADTDYJO7.js +265 -0
  44. package/dist/chunk-ADTDYJO7.js.map +1 -0
  45. package/dist/{chunk-WRAKK6K6.js → chunk-AR34B6XR.js} +5 -3
  46. package/dist/{chunk-WRAKK6K6.js.map → chunk-AR34B6XR.js.map} +1 -1
  47. package/dist/chunk-BMOUYXLX.js +418 -0
  48. package/dist/chunk-BMOUYXLX.js.map +1 -0
  49. package/dist/chunk-C6PELIHS.js +60 -0
  50. package/dist/chunk-C6PELIHS.js.map +1 -0
  51. package/dist/{chunk-MQJ2ECQT.js → chunk-CUPEENUY.js} +3 -3
  52. package/dist/{chunk-RZ4YESBG.js → chunk-DOYGMNMK.js} +1 -1
  53. package/dist/chunk-DOYGMNMK.js.map +1 -0
  54. package/dist/chunk-FFV2SXFD.js +380 -0
  55. package/dist/chunk-FFV2SXFD.js.map +1 -0
  56. package/dist/{chunk-EVE7MIIY.js → chunk-GUKKW7JI.js} +15 -16
  57. package/dist/chunk-GUKKW7JI.js.map +1 -0
  58. package/dist/{chunk-66OJ3WB4.js → chunk-H3BOLSTS.js} +2 -2
  59. package/dist/chunk-HKOPRRDJ.js +1021 -0
  60. package/dist/chunk-HKOPRRDJ.js.map +1 -0
  61. package/dist/{chunk-BXZ6EA52.js → chunk-HTF2GIQC.js} +57 -3
  62. package/dist/chunk-HTF2GIQC.js.map +1 -0
  63. package/dist/{chunk-TYAGMJNV.js → chunk-JOA5A3G3.js} +5 -5
  64. package/dist/{chunk-OCVQGBJK.js → chunk-KABG5PG3.js} +6 -4
  65. package/dist/{chunk-OCVQGBJK.js.map → chunk-KABG5PG3.js.map} +1 -1
  66. package/dist/{chunk-VEHFVBLI.js → chunk-KT7NLIXP.js} +2 -2
  67. package/dist/chunk-LFDXEYYB.js +150 -0
  68. package/dist/chunk-LFDXEYYB.js.map +1 -0
  69. package/dist/{chunk-I6BDYQIG.js → chunk-M7YLQHFP.js} +6 -6
  70. package/dist/chunk-M7YLQHFP.js.map +1 -0
  71. package/dist/{chunk-AYUKPTSM.js → chunk-MFK34XSY.js} +96 -218
  72. package/dist/chunk-MFK34XSY.js.map +1 -0
  73. package/dist/chunk-MIC5IBQF.js +386 -0
  74. package/dist/chunk-MIC5IBQF.js.map +1 -0
  75. package/dist/{chunk-4UOE5TUZ.js → chunk-NMSHVO5O.js} +4 -4
  76. package/dist/{chunk-XKYRH4FM.js → chunk-NYVBXUGD.js} +13 -32
  77. package/dist/chunk-NYVBXUGD.js.map +1 -0
  78. package/dist/chunk-ODCFS5WD.js +463 -0
  79. package/dist/chunk-ODCFS5WD.js.map +1 -0
  80. package/dist/{chunk-ZLZKF2PM.js → chunk-PUNIMPMY.js} +32 -2
  81. package/dist/chunk-PUNIMPMY.js.map +1 -0
  82. package/dist/chunk-S4NJJS5C.js +37 -0
  83. package/dist/chunk-S4NJJS5C.js.map +1 -0
  84. package/dist/{chunk-NHMBTUMW.js → chunk-TAAZB5KN.js} +2 -2
  85. package/dist/{chunk-BRBWNV65.js → chunk-U2X2J3FI.js} +3 -3
  86. package/dist/chunk-U2X2J3FI.js.map +1 -0
  87. package/dist/{chunk-PLDDJCW6.js → chunk-UP2VWCW5.js} +1 -12
  88. package/dist/{chunk-4GLYY4NN.js → chunk-UWUIJTT4.js} +8 -2
  89. package/dist/chunk-UWUIJTT4.js.map +1 -0
  90. package/dist/{chunk-SPPMCAKG.js → chunk-VKMFUIVA.js} +2 -2
  91. package/dist/chunk-VKMFUIVA.js.map +1 -0
  92. package/dist/chunk-WZAH34TG.js +129 -0
  93. package/dist/chunk-WZAH34TG.js.map +1 -0
  94. package/dist/{chunk-H5RQOFO2.js → chunk-X6Q3K3L2.js} +6 -6
  95. package/dist/chunk-X6Q3K3L2.js.map +1 -0
  96. package/dist/chunk-XTX7EK43.js +134 -0
  97. package/dist/chunk-XTX7EK43.js.map +1 -0
  98. package/dist/chunk-ZIYTHUM5.js +457 -0
  99. package/dist/chunk-ZIYTHUM5.js.map +1 -0
  100. package/dist/chunker-K6WTR62A.js +12 -0
  101. package/dist/cli.js +1 -1
  102. package/dist/{client-ZQSFPMOB.js → client-FOIYPOZQ.js} +5 -6
  103. package/dist/{clipboard-manager-TEO2GEDN.js → clipboard-manager-4SBNESGZ.js} +2 -2
  104. package/dist/coding-agent-DESSU3AC.js +233 -0
  105. package/dist/coding-agent-DESSU3AC.js.map +1 -0
  106. package/dist/commands/setup.js +1 -1
  107. package/dist/commands/start.js +2 -2
  108. package/dist/commands/status.js +1 -1
  109. package/dist/commands/stop.js +1 -1
  110. package/dist/commands/utils.js +1 -1
  111. package/dist/cost-tracker-EMOIOYH7.js +11 -0
  112. package/dist/{cron-explain-HHQKPD3M.js → cron-explain-UOOOYWZZ.js} +2 -2
  113. package/dist/{crypto-4AP47IKC.js → crypto-2VG3RJR2.js} +2 -2
  114. package/dist/{databases-37X4CI2Y.js → databases-XDPMG5AV.js} +4 -4
  115. package/dist/db-LRIOKQBO.js +77 -0
  116. package/dist/discord-NKR3X4AV.js +80 -0
  117. package/dist/documents-EYIYLZK2.js +184 -0
  118. package/dist/documents-EYIYLZK2.js.map +1 -0
  119. package/dist/docx-parser-EXL4TN5E.js +16 -0
  120. package/dist/{email-K7LO2IPB.js → email-EAQNULVD.js} +33 -25
  121. package/dist/{email-K7LO2IPB.js.map → email-EAQNULVD.js.map} +1 -1
  122. package/dist/{enhanced-retrieval-DNLLEM4Z.js → enhanced-retrieval-OGHT6TS5.js} +11 -8
  123. package/dist/{enhanced-retrieval-DNLLEM4Z.js.map → enhanced-retrieval-OGHT6TS5.js.map} +1 -1
  124. package/dist/enrichment-pipeline-CMUVBDC7.js +14 -0
  125. package/dist/{entity-resolution-Y3IUWEAT.js → entity-resolution-4X4JU43O.js} +6 -5
  126. package/dist/env-CHOFICED.js +12 -0
  127. package/dist/error-tracker-SVQSDQDW.js +32 -0
  128. package/dist/finnhub-X7ZMQSXF.js +178 -0
  129. package/dist/finnhub-X7ZMQSXF.js.map +1 -0
  130. package/dist/fred-TMUF3J2V.js +203 -0
  131. package/dist/fred-TMUF3J2V.js.map +1 -0
  132. package/dist/github-KGNILDWJ.js +833 -0
  133. package/dist/github-KGNILDWJ.js.map +1 -0
  134. package/dist/{google-workspace-DKWUVNGC.js → google-workspace-TSZPZK5G.js} +2 -2
  135. package/dist/{hash-tool-ULQYD7B5.js → hash-tool-ENAB5LWH.js} +2 -2
  136. package/dist/{heartbeat-monitor-GCISLXI3.js → heartbeat-monitor-KRDYTDBF.js} +2 -2
  137. package/dist/hooks-N4MIFBVM.js +14 -0
  138. package/dist/{image-generation-OSU7FP6F.js → image-generation-MDE6AVQO.js} +2 -2
  139. package/dist/imessage-V2XNDDHT.js +43 -0
  140. package/dist/inbox-summarizer-DKKRYXDR.js +55 -0
  141. package/dist/{incident-response-C5J7Q6DT.js → incident-response-ZTIKUWEO.js} +8 -6
  142. package/dist/{incident-response-C5J7Q6DT.js.map → incident-response-ZTIKUWEO.js.map} +1 -1
  143. package/dist/{inventory-manager-352OHXWD.js → inventory-manager-C67BSZM6.js} +2 -2
  144. package/dist/{jira-GSGDBMIG.js → jira-PAGZWUBJ.js} +2 -2
  145. package/dist/{json-tool-QE2SYHEG.js → json-tool-4FK5RNER.js} +2 -2
  146. package/dist/{key-rotation-DPHU4ZTB.js → key-rotation-WCC5FOYS.js} +2 -2
  147. package/dist/knowledge-base-J7PJ7MZ3.js +46 -0
  148. package/dist/lib.d.ts +73 -1
  149. package/dist/lib.js +86 -76
  150. package/dist/lib.js.map +1 -1
  151. package/dist/{mailchimp-KKNF6QJ7.js → mailchimp-ZFYDC44J.js} +2 -2
  152. package/dist/{matrix-QVHG76I7.js → matrix-XHTR53VQ.js} +29 -21
  153. package/dist/{matrix-QVHG76I7.js.map → matrix-XHTR53VQ.js.map} +1 -1
  154. package/dist/{mcp-3JI6W7ZE.js → mcp-3C2TN67D.js} +3 -3
  155. package/dist/metrics-VJDWQWU7.js +25 -0
  156. package/dist/{microsoft365-UCBKJHNX.js → microsoft365-6G2IJMWC.js} +2 -2
  157. package/dist/multi-user-S56GUD6L.js +411 -0
  158. package/dist/multi-user-S56GUD6L.js.map +1 -0
  159. package/dist/{ocr-AC7NPX33.js → ocr-LGUIPKVZ.js} +6 -4
  160. package/dist/{ollama-BOAMSPLJ.js → ollama-J7CU45WT.js} +2 -2
  161. package/dist/osint-agent-RL5XPBRQ.js +189 -0
  162. package/dist/osint-agent-RL5XPBRQ.js.map +1 -0
  163. package/dist/{pages-MI523RB7.js → pages-XDE7JRCA.js} +5 -5
  164. package/dist/{pair-JDFTERIK.js → pair-YZJFQUU5.js} +2 -2
  165. package/dist/{pairing-IFQYCPNS.js → pairing-77N47RAT.js} +2 -2
  166. package/dist/{pdf-ALQVOEJR.js → pdf-67HGXCFJ.js} +3 -3
  167. package/dist/pdf-parser-YLMTTYHL.js +14 -0
  168. package/dist/{presentations-DSV5IHG5.js → presentations-HXTAMGHT.js} +3 -3
  169. package/dist/presentations-HXTAMGHT.js.map +1 -0
  170. package/dist/{prometheus-JNT2BD4L.js → prometheus-YETCZO4I.js} +2 -2
  171. package/dist/{providers-J4LYPHDR.js → providers-H6YIC3MG.js} +6 -4
  172. package/dist/{qr-code-WIX4PB4U.js → qr-code-6WZJHRKL.js} +2 -2
  173. package/dist/{quickbooks-XB4NII2S.js → quickbooks-N675W7IK.js} +2 -2
  174. package/dist/{regex-tool-W4ABRKGK.js → regex-tool-6Q63LQ7B.js} +2 -2
  175. package/dist/regex-tool-6Q63LQ7B.js.map +1 -0
  176. package/dist/research-agent-WCRSY3UZ.js +168 -0
  177. package/dist/research-agent-WCRSY3UZ.js.map +1 -0
  178. package/dist/risk-engine-YKCPT5D5.js +10 -0
  179. package/dist/risk-engine-YKCPT5D5.js.map +1 -0
  180. package/dist/scheduler-CA5UNHZV.js +73 -0
  181. package/dist/scheduler-CA5UNHZV.js.map +1 -0
  182. package/dist/schema-ALJ67YVG.js +72 -0
  183. package/dist/schema-ALJ67YVG.js.map +1 -0
  184. package/dist/{search-BCLBO5E3.js → search-GMLKBHSW.js} +4 -4
  185. package/dist/search-GMLKBHSW.js.map +1 -0
  186. package/dist/{sendgrid-RNXCAFKM.js → sendgrid-QGJIVPWV.js} +2 -2
  187. package/dist/{shopify-NCXYJB4R.js → shopify-ON2PAU27.js} +2 -2
  188. package/dist/signal-X7IQJGRQ.js +43 -0
  189. package/dist/signal-X7IQJGRQ.js.map +1 -0
  190. package/dist/slack-P2LFUJUQ.js +85 -0
  191. package/dist/slack-P2LFUJUQ.js.map +1 -0
  192. package/dist/{sms-M3JIOTCW.js → sms-4VME2HUL.js} +4 -4
  193. package/dist/sms-4VME2HUL.js.map +1 -0
  194. package/dist/{src-VYUE6LRA.js → src-S5KX4YEV.js} +179 -48
  195. package/dist/src-S5KX4YEV.js.map +1 -0
  196. package/dist/{stocks-XXWBPOCU.js → stocks-4M4HZWZS.js} +2 -2
  197. package/dist/stocks-4M4HZWZS.js.map +1 -0
  198. package/dist/text-extractor-OAUBAW5P.js +12 -0
  199. package/dist/text-extractor-OAUBAW5P.js.map +1 -0
  200. package/dist/{text-transform-6SGUA5Z4.js → text-transform-HCLCUDFZ.js} +2 -2
  201. package/dist/text-transform-HCLCUDFZ.js.map +1 -0
  202. package/dist/tools-FGPN522P.js +46 -0
  203. package/dist/tools-FGPN522P.js.map +1 -0
  204. package/dist/{tunnel-IWMXUML4.js → tunnel-XOUVVRAK.js} +4 -2
  205. package/dist/tunnel-XOUVVRAK.js.map +1 -0
  206. package/dist/{twilio-53GEW5JT.js → twilio-3L7DUNYQ.js} +2 -2
  207. package/dist/{unit-converter-ZYXMEZOE.js → unit-converter-LYPAHU64.js} +2 -2
  208. package/dist/unit-converter-LYPAHU64.js.map +1 -0
  209. package/dist/whatsapp-KRPQ4YUX.js +43 -0
  210. package/dist/whatsapp-KRPQ4YUX.js.map +1 -0
  211. package/dist/{word-document-7B6SJMAY.js → word-document-D6N2C47N.js} +4 -4
  212. package/dist/word-document-D6N2C47N.js.map +1 -0
  213. package/dist/workflow-store-ZYAYE5P6.js +373 -0
  214. package/dist/workflow-store-ZYAYE5P6.js.map +1 -0
  215. package/dist/writing-agent-VDGLNOGO.js +243 -0
  216. package/dist/writing-agent-VDGLNOGO.js.map +1 -0
  217. package/dist/{xero-QYO66D45.js → xero-UHAHVYSD.js} +2 -2
  218. package/dist/{zapier-webhook-TBZ5YF2A.js → zapier-webhook-NIELLTXR.js} +2 -2
  219. package/package.json +11 -1
  220. package/dist/archiver-AVNBYCKQ.js.map +0 -1
  221. package/dist/autonomy-ZXDBDQUJ.js.map +0 -1
  222. package/dist/bot-QRARP4UN.js +0 -36
  223. package/dist/brain-7XLLM3KC.js +0 -56
  224. package/dist/chunk-4GLYY4NN.js.map +0 -1
  225. package/dist/chunk-766ASQWE.js.map +0 -1
  226. package/dist/chunk-AYUKPTSM.js.map +0 -1
  227. package/dist/chunk-BRBWNV65.js.map +0 -1
  228. package/dist/chunk-BXZ6EA52.js.map +0 -1
  229. package/dist/chunk-EVE7MIIY.js.map +0 -1
  230. package/dist/chunk-H5RQOFO2.js.map +0 -1
  231. package/dist/chunk-I6BDYQIG.js.map +0 -1
  232. package/dist/chunk-IZJMVV7O.js +0 -347
  233. package/dist/chunk-IZJMVV7O.js.map +0 -1
  234. package/dist/chunk-O7IH7JTI.js +0 -1898
  235. package/dist/chunk-O7IH7JTI.js.map +0 -1
  236. package/dist/chunk-RZ4YESBG.js.map +0 -1
  237. package/dist/chunk-SPPMCAKG.js.map +0 -1
  238. package/dist/chunk-VRD5CYRL.js +0 -1568
  239. package/dist/chunk-VRD5CYRL.js.map +0 -1
  240. package/dist/chunk-XKYRH4FM.js.map +0 -1
  241. package/dist/chunk-ZLZKF2PM.js.map +0 -1
  242. package/dist/discord-B3HUPGQ6.js +0 -70
  243. package/dist/dist-UISMLMFN.js +0 -21847
  244. package/dist/dist-UISMLMFN.js.map +0 -1
  245. package/dist/enrichment-pipeline-MNHNW65K.js +0 -13
  246. package/dist/env-IWXUVTCB.js +0 -12
  247. package/dist/imessage-NGA2XF2V.js +0 -35
  248. package/dist/inbox-summarizer-NRI4S7IF.js +0 -47
  249. package/dist/presentations-DSV5IHG5.js.map +0 -1
  250. package/dist/scheduler-VK4WFERV.js +0 -63
  251. package/dist/signal-6CGDFYL2.js +0 -35
  252. package/dist/slack-IZQWIKOH.js +0 -75
  253. package/dist/src-VYUE6LRA.js.map +0 -1
  254. package/dist/tools-2RLEI2N6.js +0 -38
  255. package/dist/tunnel-IWMXUML4.js.map +0 -1
  256. package/dist/whatsapp-LFX6YKCM.js +0 -35
  257. package/dist/word-document-7B6SJMAY.js.map +0 -1
  258. /package/dist/{audit-logger-OBPR7CRO.js.map → agent-manager-7N7REQZQ.js.map} +0 -0
  259. /package/dist/{auth-UOX5K2BE.js.map → agent-types-2T4PXLFQ.js.map} +0 -0
  260. /package/dist/{backup-restore-PZ7CYYB7.js.map → audit-logger-AU3TMWKI.js.map} +0 -0
  261. /package/dist/{blocks-R3PODY47.js.map → auth-PH5IHISW.js.map} +0 -0
  262. /package/dist/{aws-s3-Q4LLZZPD.js.map → aws-s3-QZMURYXB.js.map} +0 -0
  263. /package/dist/{bot-QRARP4UN.js.map → backup-restore-72OQTZO3.js.map} +0 -0
  264. /package/dist/{brain-7XLLM3KC.js.map → blocks-YOWOESDD.js.map} +0 -0
  265. /package/dist/{chunk-PLDDJCW6.js.map → bot-MU2TJQ3Y.js.map} +0 -0
  266. /package/dist/{client-ZQSFPMOB.js.map → brain-SLA474EU.js.map} +0 -0
  267. /package/dist/{camera-monitor-M5CYKUU4.js.map → camera-monitor-LHTUWHEL.js.map} +0 -0
  268. /package/dist/{charts-V7ARZNKF.js.map → charts-FJ32GQK7.js.map} +0 -0
  269. /package/dist/{chunk-6PMVAAA7.js.map → chunk-2RGPWU77.js.map} +0 -0
  270. /package/dist/{chunk-TVEWKIK3.js.map → chunk-2WTKTG2C.js.map} +0 -0
  271. /package/dist/{chunk-MXAPLSJ5.js.map → chunk-45YXODSB.js.map} +0 -0
  272. /package/dist/{chunk-SJSUSJ47.js.map → chunk-4YJRBMMA.js.map} +0 -0
  273. /package/dist/{chunk-MQJ2ECQT.js.map → chunk-CUPEENUY.js.map} +0 -0
  274. /package/dist/{chunk-66OJ3WB4.js.map → chunk-H3BOLSTS.js.map} +0 -0
  275. /package/dist/{chunk-TYAGMJNV.js.map → chunk-JOA5A3G3.js.map} +0 -0
  276. /package/dist/{chunk-VEHFVBLI.js.map → chunk-KT7NLIXP.js.map} +0 -0
  277. /package/dist/{chunk-4UOE5TUZ.js.map → chunk-NMSHVO5O.js.map} +0 -0
  278. /package/dist/{chunk-NHMBTUMW.js.map → chunk-TAAZB5KN.js.map} +0 -0
  279. /package/dist/{clipboard-manager-TEO2GEDN.js.map → chunk-UP2VWCW5.js.map} +0 -0
  280. /package/dist/{cron-explain-HHQKPD3M.js.map → chunker-K6WTR62A.js.map} +0 -0
  281. /package/dist/{crypto-4AP47IKC.js.map → client-FOIYPOZQ.js.map} +0 -0
  282. /package/dist/{databases-37X4CI2Y.js.map → clipboard-manager-4SBNESGZ.js.map} +0 -0
  283. /package/dist/{discord-B3HUPGQ6.js.map → cost-tracker-EMOIOYH7.js.map} +0 -0
  284. /package/dist/{enrichment-pipeline-MNHNW65K.js.map → cron-explain-UOOOYWZZ.js.map} +0 -0
  285. /package/dist/{entity-resolution-Y3IUWEAT.js.map → crypto-2VG3RJR2.js.map} +0 -0
  286. /package/dist/{env-IWXUVTCB.js.map → databases-XDPMG5AV.js.map} +0 -0
  287. /package/dist/{hash-tool-ULQYD7B5.js.map → db-LRIOKQBO.js.map} +0 -0
  288. /package/dist/{heartbeat-monitor-GCISLXI3.js.map → discord-NKR3X4AV.js.map} +0 -0
  289. /package/dist/{imessage-NGA2XF2V.js.map → docx-parser-EXL4TN5E.js.map} +0 -0
  290. /package/dist/{inbox-summarizer-NRI4S7IF.js.map → enrichment-pipeline-CMUVBDC7.js.map} +0 -0
  291. /package/dist/{inventory-manager-352OHXWD.js.map → entity-resolution-4X4JU43O.js.map} +0 -0
  292. /package/dist/{json-tool-QE2SYHEG.js.map → env-CHOFICED.js.map} +0 -0
  293. /package/dist/{key-rotation-DPHU4ZTB.js.map → error-tracker-SVQSDQDW.js.map} +0 -0
  294. /package/dist/{google-workspace-DKWUVNGC.js.map → google-workspace-TSZPZK5G.js.map} +0 -0
  295. /package/dist/{mcp-3JI6W7ZE.js.map → hash-tool-ENAB5LWH.js.map} +0 -0
  296. /package/dist/{ocr-AC7NPX33.js.map → heartbeat-monitor-KRDYTDBF.js.map} +0 -0
  297. /package/dist/{ollama-BOAMSPLJ.js.map → hooks-N4MIFBVM.js.map} +0 -0
  298. /package/dist/{image-generation-OSU7FP6F.js.map → image-generation-MDE6AVQO.js.map} +0 -0
  299. /package/dist/{pages-MI523RB7.js.map → imessage-V2XNDDHT.js.map} +0 -0
  300. /package/dist/{pairing-IFQYCPNS.js.map → inbox-summarizer-DKKRYXDR.js.map} +0 -0
  301. /package/dist/{pdf-ALQVOEJR.js.map → inventory-manager-C67BSZM6.js.map} +0 -0
  302. /package/dist/{jira-GSGDBMIG.js.map → jira-PAGZWUBJ.js.map} +0 -0
  303. /package/dist/{prometheus-JNT2BD4L.js.map → json-tool-4FK5RNER.js.map} +0 -0
  304. /package/dist/{providers-J4LYPHDR.js.map → key-rotation-WCC5FOYS.js.map} +0 -0
  305. /package/dist/{qr-code-WIX4PB4U.js.map → knowledge-base-J7PJ7MZ3.js.map} +0 -0
  306. /package/dist/{mailchimp-KKNF6QJ7.js.map → mailchimp-ZFYDC44J.js.map} +0 -0
  307. /package/dist/{regex-tool-W4ABRKGK.js.map → mcp-3C2TN67D.js.map} +0 -0
  308. /package/dist/{scheduler-VK4WFERV.js.map → metrics-VJDWQWU7.js.map} +0 -0
  309. /package/dist/{microsoft365-UCBKJHNX.js.map → microsoft365-6G2IJMWC.js.map} +0 -0
  310. /package/dist/{search-BCLBO5E3.js.map → ocr-LGUIPKVZ.js.map} +0 -0
  311. /package/dist/{signal-6CGDFYL2.js.map → ollama-J7CU45WT.js.map} +0 -0
  312. /package/dist/{slack-IZQWIKOH.js.map → pages-XDE7JRCA.js.map} +0 -0
  313. /package/dist/{pair-JDFTERIK.js.map → pair-YZJFQUU5.js.map} +0 -0
  314. /package/dist/{sms-M3JIOTCW.js.map → pairing-77N47RAT.js.map} +0 -0
  315. /package/dist/{stocks-XXWBPOCU.js.map → pdf-67HGXCFJ.js.map} +0 -0
  316. /package/dist/{text-transform-6SGUA5Z4.js.map → pdf-parser-YLMTTYHL.js.map} +0 -0
  317. /package/dist/{tools-2RLEI2N6.js.map → prometheus-YETCZO4I.js.map} +0 -0
  318. /package/dist/{unit-converter-ZYXMEZOE.js.map → providers-H6YIC3MG.js.map} +0 -0
  319. /package/dist/{whatsapp-LFX6YKCM.js.map → qr-code-6WZJHRKL.js.map} +0 -0
  320. /package/dist/{quickbooks-XB4NII2S.js.map → quickbooks-N675W7IK.js.map} +0 -0
  321. /package/dist/{sendgrid-RNXCAFKM.js.map → sendgrid-QGJIVPWV.js.map} +0 -0
  322. /package/dist/{shopify-NCXYJB4R.js.map → shopify-ON2PAU27.js.map} +0 -0
  323. /package/dist/{twilio-53GEW5JT.js.map → twilio-3L7DUNYQ.js.map} +0 -0
  324. /package/dist/{xero-QYO66D45.js.map → xero-UHAHVYSD.js.map} +0 -0
  325. /package/dist/{zapier-webhook-TBZ5YF2A.js.map → zapier-webhook-NIELLTXR.js.map} +0 -0
@@ -0,0 +1,724 @@
1
+ import {
2
+ db
3
+ } from "./chunk-S4NJJS5C.js";
4
+ import {
5
+ env
6
+ } from "./chunk-PUNIMPMY.js";
7
+ import {
8
+ archivedMemories,
9
+ memories
10
+ } from "./chunk-NYVBXUGD.js";
11
+
12
+ // src/core/embeddings/provider.ts
13
+ var AbstractEmbeddingProvider = class {
14
+ async embedSingle(text) {
15
+ const [embedding] = await this.embed([text]);
16
+ return embedding;
17
+ }
18
+ };
19
+ var OpenAIEmbeddingProvider = class _OpenAIEmbeddingProvider extends AbstractEmbeddingProvider {
20
+ name = "openai";
21
+ dimensions;
22
+ apiKey;
23
+ model;
24
+ static MODEL_DIMENSIONS = {
25
+ "text-embedding-3-small": 1536,
26
+ "text-embedding-3-large": 3072,
27
+ "text-embedding-ada-002": 1536
28
+ };
29
+ constructor(apiKey, model = "text-embedding-3-small") {
30
+ super();
31
+ this.apiKey = apiKey;
32
+ this.model = model;
33
+ this.dimensions = _OpenAIEmbeddingProvider.MODEL_DIMENSIONS[model] ?? 1536;
34
+ }
35
+ async embed(texts) {
36
+ const response = await fetch("https://api.openai.com/v1/embeddings", {
37
+ method: "POST",
38
+ headers: {
39
+ Authorization: `Bearer ${this.apiKey}`,
40
+ "Content-Type": "application/json"
41
+ },
42
+ body: JSON.stringify({ input: texts, model: this.model })
43
+ });
44
+ if (!response.ok) {
45
+ throw new Error(`OpenAI embedding failed: ${response.status}`);
46
+ }
47
+ const data = await response.json();
48
+ return data.data.map((d) => d.embedding);
49
+ }
50
+ };
51
+ var HuggingFaceEmbeddingProvider = class extends AbstractEmbeddingProvider {
52
+ name = "huggingface";
53
+ dimensions;
54
+ accessToken;
55
+ model;
56
+ batchSize;
57
+ constructor(accessToken, model = "sentence-transformers/all-MiniLM-L6-v2", dimensions = 384, batchSize = 32) {
58
+ super();
59
+ this.accessToken = accessToken;
60
+ this.model = model;
61
+ this.dimensions = dimensions;
62
+ this.batchSize = batchSize;
63
+ }
64
+ async embed(texts) {
65
+ const allEmbeddings = [];
66
+ for (let i = 0; i < texts.length; i += this.batchSize) {
67
+ const batch = texts.slice(i, i + this.batchSize);
68
+ const embeddings = await this.embedBatch(batch);
69
+ allEmbeddings.push(...embeddings);
70
+ }
71
+ return allEmbeddings;
72
+ }
73
+ async embedBatch(texts, retries = 3) {
74
+ const url = `https://api-inference.huggingface.co/pipeline/feature-extraction/${this.model}`;
75
+ for (let attempt = 0; attempt < retries; attempt++) {
76
+ const response = await fetch(url, {
77
+ method: "POST",
78
+ headers: {
79
+ Authorization: `Bearer ${this.accessToken}`,
80
+ "Content-Type": "application/json"
81
+ },
82
+ body: JSON.stringify({
83
+ inputs: texts,
84
+ options: { wait_for_model: true }
85
+ })
86
+ });
87
+ if (response.status === 429) {
88
+ const delay = Math.pow(2, attempt) * 1e3;
89
+ await new Promise((r) => setTimeout(r, delay));
90
+ continue;
91
+ }
92
+ if (response.status === 503) {
93
+ const delay = Math.pow(2, attempt) * 2e3;
94
+ await new Promise((r) => setTimeout(r, delay));
95
+ continue;
96
+ }
97
+ if (!response.ok) {
98
+ const body = await response.text().catch(() => "");
99
+ throw new Error(
100
+ `HuggingFace embedding failed: ${response.status} ${body}`
101
+ );
102
+ }
103
+ const data = await response.json();
104
+ return this.processResponse(data, texts.length);
105
+ }
106
+ throw new Error(
107
+ `HuggingFace embedding failed after ${retries} retries`
108
+ );
109
+ }
110
+ /**
111
+ * HuggingFace returns different shapes depending on the model:
112
+ * - Sentence-level: number[][] (one embedding per input)
113
+ * - Token-level: number[][][] (one embedding per token per input, needs mean pooling)
114
+ */
115
+ processResponse(data, expectedCount) {
116
+ if (!Array.isArray(data) || data.length === 0) {
117
+ throw new Error("HuggingFace returned empty response");
118
+ }
119
+ if (typeof data[0][0] === "number") {
120
+ return data.map((v) => this.l2Normalize(v));
121
+ }
122
+ if (Array.isArray(data[0][0])) {
123
+ return data.map(
124
+ (tokenEmbeddings) => this.l2Normalize(this.meanPool(tokenEmbeddings))
125
+ );
126
+ }
127
+ throw new Error(
128
+ `Unexpected HuggingFace response shape: ${typeof data[0][0]}`
129
+ );
130
+ }
131
+ meanPool(tokenEmbeddings) {
132
+ if (tokenEmbeddings.length === 0) return [];
133
+ const dims = tokenEmbeddings[0].length;
134
+ const result = new Array(dims).fill(0);
135
+ for (const token of tokenEmbeddings) {
136
+ for (let i = 0; i < dims; i++) {
137
+ result[i] += token[i];
138
+ }
139
+ }
140
+ const count = tokenEmbeddings.length;
141
+ for (let i = 0; i < dims; i++) {
142
+ result[i] /= count;
143
+ }
144
+ return result;
145
+ }
146
+ l2Normalize(vector) {
147
+ const norm = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
148
+ if (norm === 0) return vector;
149
+ return vector.map((v) => v / norm);
150
+ }
151
+ };
152
+ var TFIDFProvider = class extends AbstractEmbeddingProvider {
153
+ name = "tfidf";
154
+ dimensions = 256;
155
+ vocabulary = /* @__PURE__ */ new Map();
156
+ idf = /* @__PURE__ */ new Map();
157
+ docCount = 0;
158
+ tokenize(text) {
159
+ return text.toLowerCase().replace(/[^\w\s]/g, " ").split(/\s+/).filter((t) => t.length > 1);
160
+ }
161
+ buildVocabulary(documents) {
162
+ this.docCount = documents.length;
163
+ const docFreq = /* @__PURE__ */ new Map();
164
+ for (const doc of documents) {
165
+ const tokens = new Set(this.tokenize(doc));
166
+ for (const token of tokens) {
167
+ docFreq.set(token, (docFreq.get(token) || 0) + 1);
168
+ }
169
+ }
170
+ const sorted = Array.from(docFreq.entries()).sort((a, b) => b[1] - a[1]).slice(0, this.dimensions);
171
+ sorted.forEach(([term, df], i) => {
172
+ this.vocabulary.set(term, i);
173
+ this.idf.set(term, Math.log(this.docCount / (1 + df)));
174
+ });
175
+ }
176
+ async embed(texts) {
177
+ if (this.vocabulary.size === 0) {
178
+ this.buildVocabulary(texts);
179
+ }
180
+ return texts.map((text) => {
181
+ const tokens = this.tokenize(text);
182
+ const tf = /* @__PURE__ */ new Map();
183
+ for (const token of tokens) {
184
+ tf.set(token, (tf.get(token) || 0) + 1);
185
+ }
186
+ const vector = new Array(this.dimensions).fill(0);
187
+ for (const [term, freq] of tf) {
188
+ const idx = this.vocabulary.get(term);
189
+ if (idx !== void 0) {
190
+ const tfidf = freq / tokens.length * (this.idf.get(term) || 1);
191
+ vector[idx] = tfidf;
192
+ }
193
+ }
194
+ const norm = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
195
+ if (norm > 0) {
196
+ for (let i = 0; i < vector.length; i++) {
197
+ vector[i] /= norm;
198
+ }
199
+ }
200
+ return vector;
201
+ });
202
+ }
203
+ };
204
+
205
+ // src/core/embeddings/adapter.ts
206
+ var DimensionAdapter = class {
207
+ providerDimensions;
208
+ dbDimensions;
209
+ constructor(providerDimensions, dbDimensions) {
210
+ this.providerDimensions = providerDimensions;
211
+ this.dbDimensions = dbDimensions;
212
+ }
213
+ needsAdaptation() {
214
+ return this.providerDimensions !== this.dbDimensions;
215
+ }
216
+ adapt(embedding) {
217
+ if (embedding.length === this.dbDimensions) return embedding;
218
+ if (embedding.length < this.dbDimensions) {
219
+ const padded = new Array(this.dbDimensions).fill(0);
220
+ for (let i = 0; i < embedding.length; i++) {
221
+ padded[i] = embedding[i];
222
+ }
223
+ return padded;
224
+ }
225
+ return embedding.slice(0, this.dbDimensions);
226
+ }
227
+ adaptBatch(embeddings) {
228
+ if (!this.needsAdaptation()) return embeddings;
229
+ return embeddings.map((e) => this.adapt(e));
230
+ }
231
+ getProviderDimensions() {
232
+ return this.providerDimensions;
233
+ }
234
+ getDbDimensions() {
235
+ return this.dbDimensions;
236
+ }
237
+ };
238
+
239
+ // src/core/embeddings/registry.ts
240
+ var MODEL_DIMENSIONS = {
241
+ // OpenAI
242
+ "text-embedding-3-small": 1536,
243
+ "text-embedding-3-large": 3072,
244
+ "text-embedding-ada-002": 1536,
245
+ // HuggingFace sentence-transformers
246
+ "sentence-transformers/all-MiniLM-L6-v2": 384,
247
+ "sentence-transformers/all-mpnet-base-v2": 768,
248
+ "sentence-transformers/all-MiniLM-L12-v2": 384,
249
+ "sentence-transformers/paraphrase-MiniLM-L6-v2": 384,
250
+ // BAAI
251
+ "BAAI/bge-small-en-v1.5": 384,
252
+ "BAAI/bge-base-en-v1.5": 768,
253
+ "BAAI/bge-large-en-v1.5": 1024
254
+ };
255
+ var EmbeddingRegistry = class {
256
+ provider = null;
257
+ adapter = null;
258
+ config = null;
259
+ initialize(provider, config) {
260
+ this.provider = provider;
261
+ this.config = config;
262
+ this.adapter = new DimensionAdapter(
263
+ provider.dimensions,
264
+ config.dbDimensions
265
+ );
266
+ if (this.adapter.needsAdaptation()) {
267
+ const action = provider.dimensions < config.dbDimensions ? "zero-padded" : "truncated";
268
+ console.log(
269
+ `[Embeddings] Provider: ${provider.name} (${provider.dimensions} dims, ${action} to ${config.dbDimensions})`
270
+ );
271
+ } else {
272
+ console.log(
273
+ `[Embeddings] Provider: ${provider.name} (${provider.dimensions} dims)`
274
+ );
275
+ }
276
+ }
277
+ isInitialized() {
278
+ return this.provider !== null;
279
+ }
280
+ getProvider() {
281
+ if (!this.provider) {
282
+ throw new Error(
283
+ "[Embeddings] Not initialized. Call initializeEmbeddings() first."
284
+ );
285
+ }
286
+ return this.provider;
287
+ }
288
+ getAdapter() {
289
+ if (!this.adapter) {
290
+ throw new Error(
291
+ "[Embeddings] Not initialized. Call initializeEmbeddings() first."
292
+ );
293
+ }
294
+ return this.adapter;
295
+ }
296
+ getConfig() {
297
+ if (!this.config) {
298
+ throw new Error(
299
+ "[Embeddings] Not initialized. Call initializeEmbeddings() first."
300
+ );
301
+ }
302
+ return this.config;
303
+ }
304
+ getDimensions() {
305
+ return this.getProvider().dimensions;
306
+ }
307
+ getDbDimensions() {
308
+ return this.getConfig().dbDimensions;
309
+ }
310
+ static resolveModelDimensions(model, explicitDimensions) {
311
+ return explicitDimensions ?? MODEL_DIMENSIONS[model] ?? 384;
312
+ }
313
+ };
314
+ var embeddingRegistry = new EmbeddingRegistry();
315
+
316
+ // src/core/embeddings/index.ts
317
+ var _initPromise = null;
318
+ async function initializeEmbeddings() {
319
+ if (embeddingRegistry.isInitialized()) return;
320
+ const providerType = env.EMBEDDING_PROVIDER || "openai";
321
+ const model = env.EMBEDDING_MODEL;
322
+ const explicitDimensions = env.EMBEDDING_DIMENSIONS;
323
+ const dbDimensions = env.EMBEDDING_DB_DIMENSIONS ?? 1536;
324
+ let provider;
325
+ switch (providerType) {
326
+ case "huggingface": {
327
+ const token = env.HUGGINGFACE_ACCESS_TOKEN;
328
+ if (!token) {
329
+ throw new Error(
330
+ "[Embeddings] HUGGINGFACE_ACCESS_TOKEN required for huggingface provider"
331
+ );
332
+ }
333
+ const hfModel = model || "sentence-transformers/all-MiniLM-L6-v2";
334
+ const dims = EmbeddingRegistry.resolveModelDimensions(
335
+ hfModel,
336
+ explicitDimensions
337
+ );
338
+ const batchSize = env.EMBEDDING_BATCH_SIZE ?? 32;
339
+ provider = new HuggingFaceEmbeddingProvider(
340
+ token,
341
+ hfModel,
342
+ dims,
343
+ batchSize
344
+ );
345
+ break;
346
+ }
347
+ case "tfidf": {
348
+ provider = new TFIDFProvider();
349
+ console.log("[Embeddings] Using TF-IDF fallback (no API required)");
350
+ break;
351
+ }
352
+ case "openai":
353
+ default: {
354
+ const apiKey = env.OPENAI_API_KEY;
355
+ if (!apiKey) {
356
+ console.warn(
357
+ "[Embeddings] OPENAI_API_KEY not set, falling back to TF-IDF"
358
+ );
359
+ provider = new TFIDFProvider();
360
+ break;
361
+ }
362
+ const oaiModel = model || "text-embedding-3-small";
363
+ provider = new OpenAIEmbeddingProvider(apiKey, oaiModel);
364
+ break;
365
+ }
366
+ }
367
+ embeddingRegistry.initialize(provider, {
368
+ provider: providerType,
369
+ model,
370
+ dimensions: provider.dimensions,
371
+ dbDimensions
372
+ });
373
+ }
374
+ async function ensureInitialized() {
375
+ if (embeddingRegistry.isInitialized()) return;
376
+ if (!_initPromise) {
377
+ _initPromise = initializeEmbeddings();
378
+ }
379
+ await _initPromise;
380
+ }
381
+ async function generateEmbedding(text) {
382
+ await ensureInitialized();
383
+ const provider = embeddingRegistry.getProvider();
384
+ const adapter = embeddingRegistry.getAdapter();
385
+ const raw = await provider.embedSingle(text);
386
+ return adapter.adapt(raw);
387
+ }
388
+
389
+ // src/core/memory.ts
390
+ import { eq, desc, sql } from "drizzle-orm";
391
+ import OpenAI from "openai";
392
+
393
+ // src/core/security/field-encryption.ts
394
+ import { createCipheriv, createDecipheriv, randomBytes } from "crypto";
395
+ var ALGORITHM = "aes-256-gcm";
396
+ var IV_LENGTH = 16;
397
+ var TAG_LENGTH = 16;
398
+ var KEY_LENGTH = 32;
399
+ var CURRENT_KEY_VERSION = 1;
400
+ var _masterKey = null;
401
+ function getMasterKey() {
402
+ if (_masterKey) return _masterKey;
403
+ const keyBase64 = env.ENCRYPTION_MASTER_KEY;
404
+ if (keyBase64) {
405
+ const key = Buffer.from(keyBase64, "base64");
406
+ if (key.length !== KEY_LENGTH) {
407
+ throw new Error(
408
+ `ENCRYPTION_MASTER_KEY must be ${KEY_LENGTH} bytes (${KEY_LENGTH * 4 / 3} base64 chars). Got ${key.length} bytes.`
409
+ );
410
+ }
411
+ _masterKey = key;
412
+ return _masterKey;
413
+ }
414
+ if (env.NODE_ENV === "production") {
415
+ throw new Error(
416
+ `ENCRYPTION_MASTER_KEY is required in production for SOC 2 compliance. Generate one with: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"`
417
+ );
418
+ }
419
+ console.warn("[field-encryption] No ENCRYPTION_MASTER_KEY set \u2014 using ephemeral key (dev only)");
420
+ _masterKey = randomBytes(KEY_LENGTH);
421
+ return _masterKey;
422
+ }
423
+ function encryptField(plaintext) {
424
+ if (plaintext === null || plaintext === void 0) return null;
425
+ const key = getMasterKey();
426
+ const iv = randomBytes(IV_LENGTH);
427
+ const cipher = createCipheriv(ALGORITHM, key, iv);
428
+ const encrypted = Buffer.concat([
429
+ cipher.update(plaintext, "utf8"),
430
+ cipher.final()
431
+ ]);
432
+ const tag = cipher.getAuthTag();
433
+ const combined = Buffer.concat([
434
+ Buffer.from([CURRENT_KEY_VERSION]),
435
+ iv,
436
+ tag,
437
+ encrypted
438
+ ]);
439
+ return combined.toString("base64");
440
+ }
441
+ function decryptField(encryptedBase64) {
442
+ if (encryptedBase64 === null || encryptedBase64 === void 0) return null;
443
+ const combined = Buffer.from(encryptedBase64, "base64");
444
+ if (combined.length < 1 + IV_LENGTH + TAG_LENGTH + 1) {
445
+ throw new Error("Encrypted data too short");
446
+ }
447
+ const keyVersion = combined[0];
448
+ if (keyVersion !== CURRENT_KEY_VERSION) {
449
+ throw new Error(`Unsupported encryption key version: ${keyVersion}`);
450
+ }
451
+ const iv = combined.subarray(1, 1 + IV_LENGTH);
452
+ const tag = combined.subarray(1 + IV_LENGTH, 1 + IV_LENGTH + TAG_LENGTH);
453
+ const ciphertext = combined.subarray(1 + IV_LENGTH + TAG_LENGTH);
454
+ const key = getMasterKey();
455
+ const decipher = createDecipheriv(ALGORITHM, key, iv);
456
+ decipher.setAuthTag(tag);
457
+ const decrypted = Buffer.concat([
458
+ decipher.update(ciphertext),
459
+ decipher.final()
460
+ ]);
461
+ return decrypted.toString("utf8");
462
+ }
463
+ function isEncryptionAvailable() {
464
+ try {
465
+ getMasterKey();
466
+ return true;
467
+ } catch {
468
+ return false;
469
+ }
470
+ }
471
+
472
+ // src/core/memory.ts
473
+ var _openai = null;
474
+ function getOpenAI() {
475
+ if (!_openai) {
476
+ _openai = new OpenAI({ apiKey: env.OPENAI_API_KEY });
477
+ }
478
+ return _openai;
479
+ }
480
+ var openai = new Proxy({}, {
481
+ get(_target, prop) {
482
+ const instance = getOpenAI();
483
+ const value = instance[prop];
484
+ if (typeof value === "function") {
485
+ return value.bind(instance);
486
+ }
487
+ return value;
488
+ }
489
+ });
490
+ async function generateEmbedding2(text) {
491
+ return generateEmbedding(text);
492
+ }
493
+ async function storeMemory(memory) {
494
+ const embedding = await generateEmbedding2(memory.content);
495
+ const shouldEncrypt = isEncryptionAvailable();
496
+ const contentForDb = shouldEncrypt ? encryptField(memory.content) : memory.content;
497
+ const [stored] = await db.insert(memories).values({
498
+ ...memory,
499
+ content: contentForDb,
500
+ encrypted: shouldEncrypt,
501
+ embedding,
502
+ provenance: memory.provenance || `${memory.source || "unknown"}:auto`
503
+ }).returning();
504
+ try {
505
+ await db.execute(sql`
506
+ UPDATE memories
507
+ SET search_vector = to_tsvector('english', ${memory.content})
508
+ WHERE id = ${stored.id}
509
+ `);
510
+ } catch {
511
+ }
512
+ return { ...stored, content: memory.content };
513
+ }
514
+ async function updateMemory(id, updates) {
515
+ const setClauses = [];
516
+ if (updates.content) {
517
+ const newEmbedding = await generateEmbedding2(updates.content);
518
+ setClauses.push(sql`content = ${updates.content}`);
519
+ setClauses.push(sql`embedding = ${JSON.stringify(newEmbedding)}::vector`);
520
+ setClauses.push(sql`search_vector = to_tsvector('english', ${updates.content})`);
521
+ }
522
+ if (updates.type) {
523
+ setClauses.push(sql`type = ${updates.type}`);
524
+ }
525
+ if (updates.importance !== void 0) {
526
+ setClauses.push(sql`importance = ${updates.importance}`);
527
+ }
528
+ if (setClauses.length === 0) return null;
529
+ const result = await db.execute(sql`
530
+ UPDATE memories
531
+ SET ${sql.join(setClauses, sql`, `)}
532
+ WHERE id = ${id}
533
+ RETURNING *
534
+ `);
535
+ return result[0] || null;
536
+ }
537
+ async function deleteMemory(id) {
538
+ const result = await db.execute(sql`
539
+ SELECT * FROM memories WHERE id = ${id}
540
+ `);
541
+ const memory = result[0];
542
+ if (!memory) return false;
543
+ await db.insert(archivedMemories).values({
544
+ originalMemoryId: memory.id,
545
+ userId: memory.user_id,
546
+ type: memory.type,
547
+ content: memory.content,
548
+ reason: "user_request",
549
+ originalCreatedAt: memory.created_at
550
+ });
551
+ await db.execute(sql`DELETE FROM memories WHERE id = ${id}`);
552
+ return true;
553
+ }
554
+ async function exportMemories(userId, format = "markdown") {
555
+ const mems = await db.select().from(memories).where(userId ? eq(memories.userId, userId) : void 0).orderBy(desc(memories.createdAt));
556
+ for (const m of mems) {
557
+ if (m.encrypted) {
558
+ try {
559
+ m.content = decryptField(m.content) ?? m.content;
560
+ } catch {
561
+ }
562
+ }
563
+ }
564
+ if (format === "json") {
565
+ return JSON.stringify(
566
+ mems.map((m) => ({
567
+ id: m.id,
568
+ type: m.type,
569
+ content: m.content,
570
+ importance: m.importance,
571
+ source: m.source,
572
+ provenance: m.provenance,
573
+ createdAt: m.createdAt
574
+ })),
575
+ null,
576
+ 2
577
+ );
578
+ }
579
+ const lines = [
580
+ "# Memories Export",
581
+ `Exported: ${(/* @__PURE__ */ new Date()).toISOString()}`,
582
+ `Total: ${mems.length} memories`,
583
+ ""
584
+ ];
585
+ for (const m of mems) {
586
+ lines.push(`## [${m.type}] (Importance: ${m.importance}/10)`);
587
+ lines.push(m.content);
588
+ lines.push(`_Source: ${m.source || "unknown"} | Created: ${m.createdAt.toISOString()}_`);
589
+ lines.push("");
590
+ }
591
+ return lines.join("\n");
592
+ }
593
+ async function searchMemories(query, userId, limit = 5) {
594
+ const queryEmbedding = await generateEmbedding2(query);
595
+ const results = await db.execute(sql`
596
+ SELECT
597
+ id, user_id, type, content, importance, source, provenance, metadata,
598
+ last_accessed, created_at,
599
+ 1 - (embedding <=> ${JSON.stringify(queryEmbedding)}::vector) as similarity
600
+ FROM memories
601
+ ${userId ? sql`WHERE user_id = ${userId}` : sql``}
602
+ ORDER BY embedding <=> ${JSON.stringify(queryEmbedding)}::vector
603
+ LIMIT ${limit}
604
+ `);
605
+ const rows = results;
606
+ const memoryIds = rows.map((r) => r.id);
607
+ if (memoryIds.length > 0) {
608
+ await db.execute(sql`
609
+ UPDATE memories
610
+ SET last_accessed = NOW()
611
+ WHERE id = ANY(${memoryIds}::uuid[])
612
+ `);
613
+ }
614
+ for (const row of rows) {
615
+ if (row.encrypted) {
616
+ try {
617
+ row.content = decryptField(row.content) ?? row.content;
618
+ } catch {
619
+ }
620
+ }
621
+ }
622
+ return rows;
623
+ }
624
+ async function getMemoryById(id) {
625
+ const result = await db.execute(sql`
626
+ SELECT * FROM memories WHERE id = ${id}
627
+ `);
628
+ const row = result[0] || null;
629
+ if (row && row.encrypted) {
630
+ try {
631
+ row.content = decryptField(row.content) ?? row.content;
632
+ } catch {
633
+ }
634
+ }
635
+ return row;
636
+ }
637
+ async function extractMemories(content, userId) {
638
+ const extractionPrompt = `Analyze this text and extract any important facts that should be remembered about the user or their preferences. Return a JSON array of objects with "content" (the fact), "type" (semantic/episodic/procedural), and "importance" (1-10).
639
+
640
+ Text: "${content}"
641
+
642
+ Return only the JSON array, no other text. If no memorable facts, return [].`;
643
+ try {
644
+ const response = await openai.chat.completions.create({
645
+ model: "gpt-4o-mini",
646
+ messages: [{ role: "user", content: extractionPrompt }],
647
+ response_format: { type: "json_object" }
648
+ });
649
+ const extracted = JSON.parse(
650
+ response.choices[0].message.content || '{"memories":[]}'
651
+ );
652
+ const memoriesToStore = extracted.memories || extracted || [];
653
+ const storedMemories = [];
654
+ for (const mem of memoriesToStore) {
655
+ if (mem.content && mem.content.length > 5) {
656
+ const stored = await storeMemory({
657
+ userId,
658
+ content: mem.content,
659
+ type: mem.type || "semantic",
660
+ importance: mem.importance || 5,
661
+ source: "conversation",
662
+ provenance: "extraction:auto"
663
+ });
664
+ storedMemories.push(stored);
665
+ }
666
+ }
667
+ return storedMemories;
668
+ } catch (error) {
669
+ console.error("Error extracting memories:", error);
670
+ return [];
671
+ }
672
+ }
673
+ async function buildMemoryContext(query, userId, conversationHistory) {
674
+ const anyAdvancedEnabled = env.HYDE_ENABLED || env.RERANK_ENABLED || env.MULTISTEP_RAG_ENABLED || env.RETRIEVAL_CACHE_ENABLED || env.CONTEXTUAL_QUERY_ENABLED;
675
+ if (anyAdvancedEnabled) {
676
+ try {
677
+ const { enhancedRetrieve } = await import("./enhanced-retrieval-OGHT6TS5.js");
678
+ const result = await enhancedRetrieve(query, { userId, limit: 5, conversationHistory });
679
+ if (result.results.length === 0) {
680
+ return "";
681
+ }
682
+ const memoryStrings2 = result.results.map((m) => {
683
+ const provenance = m.provenance ? ` [${m.provenance}]` : "";
684
+ const score = m.rerankScore != null ? `rerank: ${m.rerankScore}/10` : `relevance: ${((m.similarity || 0) * 100).toFixed(0)}%`;
685
+ return `- [${m.type}] ${m.content} (${score})${provenance}`;
686
+ });
687
+ return `
688
+
689
+ Relevant memories about the user:
690
+ ${memoryStrings2.join("\n")}`;
691
+ } catch {
692
+ }
693
+ }
694
+ const relevantMemories = await searchMemories(query, userId, 5);
695
+ if (relevantMemories.length === 0) {
696
+ return "";
697
+ }
698
+ const memoryStrings = relevantMemories.map(
699
+ (m) => {
700
+ const provenance = m.provenance ? ` [${m.provenance}]` : "";
701
+ return `- [${m.type}] ${m.content} (relevance: ${(m.similarity * 100).toFixed(0)}%)${provenance}`;
702
+ }
703
+ );
704
+ return `
705
+
706
+ Relevant memories about the user:
707
+ ${memoryStrings.join("\n")}`;
708
+ }
709
+
710
+ export {
711
+ TFIDFProvider,
712
+ decryptField,
713
+ initializeEmbeddings,
714
+ generateEmbedding2 as generateEmbedding,
715
+ storeMemory,
716
+ updateMemory,
717
+ deleteMemory,
718
+ exportMemories,
719
+ searchMemories,
720
+ getMemoryById,
721
+ extractMemories,
722
+ buildMemoryContext
723
+ };
724
+ //# sourceMappingURL=chunk-6UZPE35A.js.map