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,457 @@
1
+ // src/integrations/documents/chunker.ts
2
+ var DEFAULT_OPTIONS = {
3
+ chunkSize: 1e3,
4
+ chunkOverlap: 200,
5
+ minChunkSize: 100,
6
+ maxChunkSize: 2e3,
7
+ respectSentences: true,
8
+ respectParagraphs: true,
9
+ preserveSections: true,
10
+ strategy: "semantic"
11
+ };
12
+ function chunkText(text, options = {}) {
13
+ const opts = { ...DEFAULT_OPTIONS, ...options };
14
+ if (!text || text.trim().length === 0) {
15
+ return [];
16
+ }
17
+ switch (opts.strategy) {
18
+ case "fixed":
19
+ return fixedSizeChunking(text, opts);
20
+ case "sentence":
21
+ return sentenceChunking(text, opts);
22
+ case "paragraph":
23
+ return paragraphChunking(text, opts);
24
+ case "recursive":
25
+ return recursiveChunking(text, opts);
26
+ case "semantic":
27
+ default:
28
+ return semanticChunking(text, opts);
29
+ }
30
+ }
31
+ function fixedSizeChunking(text, opts) {
32
+ const chunks = [];
33
+ let startOffset = 0;
34
+ let index = 0;
35
+ while (startOffset < text.length) {
36
+ let endOffset = Math.min(startOffset + opts.chunkSize, text.length);
37
+ if (endOffset - startOffset > opts.maxChunkSize) {
38
+ endOffset = startOffset + opts.maxChunkSize;
39
+ }
40
+ const content = text.slice(startOffset, endOffset);
41
+ const hasOverlapFromPrevious = index > 0;
42
+ chunks.push(createChunk(index, content, startOffset, endOffset, {
43
+ startsAtSentence: false,
44
+ endsAtSentence: false,
45
+ hasOverlapFromPrevious,
46
+ hasOverlapToNext: endOffset < text.length
47
+ }));
48
+ const nextStart = endOffset - opts.chunkOverlap;
49
+ startOffset = Math.max(nextStart, startOffset + opts.minChunkSize);
50
+ index++;
51
+ }
52
+ return chunks;
53
+ }
54
+ function sentenceChunking(text, opts) {
55
+ const sentences = splitIntoSentences(text);
56
+ const chunks = [];
57
+ let currentChunk = "";
58
+ let currentStart = 0;
59
+ let index = 0;
60
+ let textOffset = 0;
61
+ for (let i = 0; i < sentences.length; i++) {
62
+ const sentence = sentences[i];
63
+ const potentialChunk = currentChunk + sentence;
64
+ if (potentialChunk.length > opts.maxChunkSize && currentChunk.length > 0) {
65
+ const endOffset = textOffset;
66
+ chunks.push(createChunk(index, currentChunk.trim(), currentStart, endOffset, {
67
+ startsAtSentence: true,
68
+ endsAtSentence: true,
69
+ hasOverlapFromPrevious: index > 0,
70
+ hasOverlapToNext: true
71
+ }));
72
+ const overlapSentences = getOverlapSentences(
73
+ sentences.slice(0, i),
74
+ opts.chunkOverlap
75
+ );
76
+ currentChunk = overlapSentences + sentence;
77
+ currentStart = endOffset - overlapSentences.length;
78
+ index++;
79
+ } else if (potentialChunk.length >= opts.chunkSize && currentChunk.length >= opts.minChunkSize) {
80
+ currentChunk = potentialChunk;
81
+ textOffset += sentence.length;
82
+ const endOffset = textOffset;
83
+ chunks.push(createChunk(index, currentChunk.trim(), currentStart, endOffset, {
84
+ startsAtSentence: true,
85
+ endsAtSentence: true,
86
+ hasOverlapFromPrevious: index > 0,
87
+ hasOverlapToNext: i < sentences.length - 1
88
+ }));
89
+ const overlapSentences = getOverlapSentences(
90
+ sentences.slice(0, i + 1),
91
+ opts.chunkOverlap
92
+ );
93
+ currentChunk = overlapSentences;
94
+ currentStart = endOffset - overlapSentences.length;
95
+ index++;
96
+ } else {
97
+ currentChunk = potentialChunk;
98
+ textOffset += sentence.length;
99
+ }
100
+ }
101
+ if (currentChunk.trim().length > 0) {
102
+ chunks.push(createChunk(index, currentChunk.trim(), currentStart, text.length, {
103
+ startsAtSentence: true,
104
+ endsAtSentence: true,
105
+ hasOverlapFromPrevious: index > 0,
106
+ hasOverlapToNext: false
107
+ }));
108
+ }
109
+ return chunks;
110
+ }
111
+ function paragraphChunking(text, opts) {
112
+ const paragraphs = text.split(/\n\s*\n/).filter((p) => p.trim().length > 0);
113
+ const chunks = [];
114
+ let currentChunk = "";
115
+ let currentStart = 0;
116
+ let index = 0;
117
+ let textOffset = 0;
118
+ let paragraphNumber = 0;
119
+ for (let i = 0; i < paragraphs.length; i++) {
120
+ const paragraph = paragraphs[i].trim() + "\n\n";
121
+ paragraphNumber++;
122
+ const potentialChunk = currentChunk + paragraph;
123
+ if (potentialChunk.length > opts.maxChunkSize && currentChunk.length > 0) {
124
+ const endOffset = textOffset;
125
+ chunks.push(createChunk(index, currentChunk.trim(), currentStart, endOffset, {
126
+ paragraphNumber: paragraphNumber - 1,
127
+ startsAtSentence: true,
128
+ endsAtSentence: true,
129
+ hasOverlapFromPrevious: index > 0,
130
+ hasOverlapToNext: true
131
+ }));
132
+ currentChunk = paragraph;
133
+ currentStart = endOffset;
134
+ index++;
135
+ } else if (potentialChunk.length >= opts.chunkSize) {
136
+ currentChunk = potentialChunk;
137
+ textOffset = text.indexOf(paragraph, textOffset) + paragraph.length;
138
+ chunks.push(createChunk(index, currentChunk.trim(), currentStart, textOffset, {
139
+ paragraphNumber,
140
+ startsAtSentence: true,
141
+ endsAtSentence: true,
142
+ hasOverlapFromPrevious: index > 0,
143
+ hasOverlapToNext: i < paragraphs.length - 1
144
+ }));
145
+ currentChunk = "";
146
+ currentStart = textOffset;
147
+ index++;
148
+ } else {
149
+ currentChunk = potentialChunk;
150
+ const idx = text.indexOf(paragraph.trim(), textOffset);
151
+ if (idx >= 0) {
152
+ textOffset = idx + paragraph.trim().length;
153
+ }
154
+ }
155
+ }
156
+ if (currentChunk.trim().length > 0) {
157
+ chunks.push(createChunk(index, currentChunk.trim(), currentStart, text.length, {
158
+ paragraphNumber,
159
+ startsAtSentence: true,
160
+ endsAtSentence: true,
161
+ hasOverlapFromPrevious: index > 0,
162
+ hasOverlapToNext: false
163
+ }));
164
+ }
165
+ return chunks;
166
+ }
167
+ function recursiveChunking(text, opts) {
168
+ const separators = [
169
+ "\n\n\n",
170
+ // Multiple blank lines
171
+ "\n\n",
172
+ // Paragraph break
173
+ "\n",
174
+ // Line break
175
+ ". ",
176
+ // Sentence break
177
+ ", ",
178
+ // Clause break
179
+ " ",
180
+ // Word break
181
+ ""
182
+ // Character break (fallback)
183
+ ];
184
+ return recursiveChunkingSplit(text, separators, opts, 0);
185
+ }
186
+ function recursiveChunkingSplit(text, separators, opts, startOffset) {
187
+ if (text.length <= opts.chunkSize) {
188
+ return [
189
+ createChunk(0, text, startOffset, startOffset + text.length, {
190
+ startsAtSentence: true,
191
+ endsAtSentence: true,
192
+ hasOverlapFromPrevious: false,
193
+ hasOverlapToNext: false
194
+ })
195
+ ];
196
+ }
197
+ const separator = separators[0];
198
+ const nextSeparators = separators.slice(1);
199
+ if (separator === "") {
200
+ return fixedSizeChunking(text, opts);
201
+ }
202
+ const splits = text.split(separator);
203
+ const chunks = [];
204
+ let currentChunk = "";
205
+ let currentOffset = startOffset;
206
+ let chunkIndex = 0;
207
+ for (let i = 0; i < splits.length; i++) {
208
+ const split = splits[i];
209
+ const withSeparator = i < splits.length - 1 ? split + separator : split;
210
+ const potential = currentChunk + withSeparator;
211
+ if (potential.length > opts.chunkSize && currentChunk.length > 0) {
212
+ if (currentChunk.length > opts.maxChunkSize) {
213
+ const subChunks = recursiveChunkingSplit(
214
+ currentChunk,
215
+ nextSeparators,
216
+ opts,
217
+ currentOffset
218
+ );
219
+ subChunks.forEach((c, idx) => {
220
+ c.index = chunkIndex + idx;
221
+ });
222
+ chunks.push(...subChunks);
223
+ chunkIndex += subChunks.length;
224
+ } else {
225
+ chunks.push(
226
+ createChunk(chunkIndex, currentChunk.trim(), currentOffset, currentOffset + currentChunk.length, {
227
+ startsAtSentence: separator.includes("."),
228
+ endsAtSentence: separator.includes("."),
229
+ hasOverlapFromPrevious: chunkIndex > 0,
230
+ hasOverlapToNext: true
231
+ })
232
+ );
233
+ chunkIndex++;
234
+ }
235
+ currentOffset += currentChunk.length;
236
+ currentChunk = withSeparator;
237
+ } else {
238
+ currentChunk = potential;
239
+ }
240
+ }
241
+ if (currentChunk.trim().length > 0) {
242
+ if (currentChunk.length > opts.maxChunkSize) {
243
+ const subChunks = recursiveChunkingSplit(
244
+ currentChunk,
245
+ nextSeparators,
246
+ opts,
247
+ currentOffset
248
+ );
249
+ subChunks.forEach((c, idx) => {
250
+ c.index = chunkIndex + idx;
251
+ });
252
+ chunks.push(...subChunks);
253
+ } else {
254
+ chunks.push(
255
+ createChunk(chunkIndex, currentChunk.trim(), currentOffset, currentOffset + currentChunk.length, {
256
+ startsAtSentence: true,
257
+ endsAtSentence: true,
258
+ hasOverlapFromPrevious: chunkIndex > 0,
259
+ hasOverlapToNext: false
260
+ })
261
+ );
262
+ }
263
+ }
264
+ return chunks;
265
+ }
266
+ function semanticChunking(text, opts) {
267
+ const sections = opts.preserveSections ? splitIntoSections(text) : [{ header: void 0, content: text }];
268
+ const allChunks = [];
269
+ let globalIndex = 0;
270
+ let globalOffset = 0;
271
+ for (const section of sections) {
272
+ const sectionText = section.content;
273
+ const paragraphs = sectionText.split(/\n\s*\n/).filter((p) => p.trim().length > 0);
274
+ let currentChunk = "";
275
+ let chunkStart = globalOffset;
276
+ for (let i = 0; i < paragraphs.length; i++) {
277
+ const paragraph = paragraphs[i].trim();
278
+ if (currentChunk.length + paragraph.length + 2 > opts.maxChunkSize && currentChunk.length > 0) {
279
+ allChunks.push(
280
+ createChunk(globalIndex, currentChunk.trim(), chunkStart, chunkStart + currentChunk.length, {
281
+ sectionHeader: section.header,
282
+ startsAtSentence: true,
283
+ endsAtSentence: true,
284
+ hasOverlapFromPrevious: globalIndex > 0,
285
+ hasOverlapToNext: true
286
+ })
287
+ );
288
+ globalIndex++;
289
+ const overlap = getOverlapText(currentChunk, opts.chunkOverlap);
290
+ chunkStart = chunkStart + currentChunk.length - overlap.length;
291
+ currentChunk = overlap + "\n\n" + paragraph;
292
+ } else if (currentChunk.length + paragraph.length >= opts.chunkSize && currentChunk.length >= opts.minChunkSize) {
293
+ currentChunk += (currentChunk ? "\n\n" : "") + paragraph;
294
+ allChunks.push(
295
+ createChunk(globalIndex, currentChunk.trim(), chunkStart, chunkStart + currentChunk.length, {
296
+ sectionHeader: section.header,
297
+ startsAtSentence: true,
298
+ endsAtSentence: true,
299
+ hasOverlapFromPrevious: globalIndex > 0,
300
+ hasOverlapToNext: i < paragraphs.length - 1
301
+ })
302
+ );
303
+ globalIndex++;
304
+ const overlap = getOverlapText(currentChunk, opts.chunkOverlap);
305
+ chunkStart = chunkStart + currentChunk.length - overlap.length;
306
+ currentChunk = overlap;
307
+ } else {
308
+ currentChunk += (currentChunk ? "\n\n" : "") + paragraph;
309
+ }
310
+ }
311
+ if (currentChunk.trim().length > 0) {
312
+ allChunks.push(
313
+ createChunk(globalIndex, currentChunk.trim(), chunkStart, chunkStart + currentChunk.length, {
314
+ sectionHeader: section.header,
315
+ startsAtSentence: true,
316
+ endsAtSentence: true,
317
+ hasOverlapFromPrevious: globalIndex > 0,
318
+ hasOverlapToNext: false
319
+ })
320
+ );
321
+ globalIndex++;
322
+ }
323
+ globalOffset += section.content.length;
324
+ }
325
+ return allChunks.map((chunk, idx) => ({
326
+ ...chunk,
327
+ index: idx
328
+ }));
329
+ }
330
+ function splitIntoSections(text) {
331
+ const headerPattern = /^(#{1,6}\s+.+|[A-Z][A-Za-z\s]+:\s*$|[A-Z][A-Z\s]{3,}$)/gm;
332
+ const sections = [];
333
+ let lastIndex = 0;
334
+ let lastHeader;
335
+ let match;
336
+ while ((match = headerPattern.exec(text)) !== null) {
337
+ if (lastIndex < match.index) {
338
+ const content = text.slice(lastIndex, match.index);
339
+ if (content.trim().length > 0) {
340
+ sections.push({ header: lastHeader, content });
341
+ }
342
+ }
343
+ lastHeader = match[1].replace(/^#+\s*/, "").trim();
344
+ lastIndex = match.index + match[0].length;
345
+ }
346
+ if (lastIndex < text.length) {
347
+ const content = text.slice(lastIndex);
348
+ if (content.trim().length > 0) {
349
+ sections.push({ header: lastHeader, content });
350
+ }
351
+ }
352
+ if (sections.length === 0) {
353
+ return [{ header: void 0, content: text }];
354
+ }
355
+ return sections;
356
+ }
357
+ function splitIntoSentences(text) {
358
+ const sentenceEnders = /([.!?]+)\s+(?=[A-Z])/g;
359
+ const sentences = [];
360
+ let lastIndex = 0;
361
+ let match;
362
+ while ((match = sentenceEnders.exec(text)) !== null) {
363
+ const endIndex = match.index + match[1].length;
364
+ sentences.push(text.slice(lastIndex, endIndex + 1));
365
+ lastIndex = endIndex + 1;
366
+ }
367
+ if (lastIndex < text.length) {
368
+ const remaining = text.slice(lastIndex);
369
+ if (remaining.trim().length > 0) {
370
+ sentences.push(remaining);
371
+ }
372
+ }
373
+ return sentences;
374
+ }
375
+ function getOverlapSentences(sentences, targetChars) {
376
+ let overlap = "";
377
+ for (let i = sentences.length - 1; i >= 0 && overlap.length < targetChars; i--) {
378
+ overlap = sentences[i] + overlap;
379
+ }
380
+ return overlap;
381
+ }
382
+ function getOverlapText(text, targetChars) {
383
+ if (text.length <= targetChars) {
384
+ return text;
385
+ }
386
+ const lastPart = text.slice(-targetChars * 1.5);
387
+ const sentenceMatch = lastPart.match(/[.!?]\s+/);
388
+ if (sentenceMatch && sentenceMatch.index) {
389
+ return lastPart.slice(sentenceMatch.index + sentenceMatch[0].length);
390
+ }
391
+ const wordMatch = lastPart.match(/\s+/);
392
+ if (wordMatch && wordMatch.index) {
393
+ return lastPart.slice(wordMatch.index + wordMatch[0].length);
394
+ }
395
+ return text.slice(-targetChars);
396
+ }
397
+ function createChunk(index, content, startOffset, endOffset, metadata) {
398
+ const wordCount = content.split(/\s+/).filter((w) => w.length > 0).length;
399
+ return {
400
+ index,
401
+ content,
402
+ startOffset,
403
+ endOffset,
404
+ wordCount,
405
+ tokenEstimate: Math.ceil(content.length / 4),
406
+ metadata: {
407
+ startsAtSentence: metadata.startsAtSentence ?? false,
408
+ endsAtSentence: metadata.endsAtSentence ?? false,
409
+ hasOverlapFromPrevious: metadata.hasOverlapFromPrevious ?? false,
410
+ hasOverlapToNext: metadata.hasOverlapToNext ?? false,
411
+ sectionHeader: metadata.sectionHeader,
412
+ paragraphNumber: metadata.paragraphNumber
413
+ }
414
+ };
415
+ }
416
+ function estimateTokens(text) {
417
+ return Math.ceil(text.length / 4);
418
+ }
419
+ function mergeSmallChunks(chunks, minSize = 100) {
420
+ if (chunks.length === 0) return [];
421
+ const merged = [];
422
+ let current = null;
423
+ for (const chunk of chunks) {
424
+ if (!current) {
425
+ current = { ...chunk };
426
+ continue;
427
+ }
428
+ if (current.content.length < minSize) {
429
+ current = {
430
+ ...current,
431
+ content: current.content + "\n\n" + chunk.content,
432
+ endOffset: chunk.endOffset,
433
+ wordCount: current.wordCount + chunk.wordCount,
434
+ tokenEstimate: current.tokenEstimate + chunk.tokenEstimate,
435
+ metadata: {
436
+ ...current.metadata,
437
+ endsAtSentence: chunk.metadata.endsAtSentence,
438
+ hasOverlapToNext: chunk.metadata.hasOverlapToNext
439
+ }
440
+ };
441
+ } else {
442
+ merged.push(current);
443
+ current = { ...chunk, index: merged.length };
444
+ }
445
+ }
446
+ if (current) {
447
+ merged.push(current);
448
+ }
449
+ return merged;
450
+ }
451
+
452
+ export {
453
+ chunkText,
454
+ estimateTokens,
455
+ mergeSmallChunks
456
+ };
457
+ //# sourceMappingURL=chunk-ZIYTHUM5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/integrations/documents/chunker.ts"],"sourcesContent":["/**\n * Document Chunker for OpenSentinel Document Ingestion\n *\n * Splits documents into semantic chunks suitable for embedding and retrieval.\n */\n\nexport interface Chunk {\n /** Chunk index within the document */\n index: number;\n /** The text content of the chunk */\n content: string;\n /** Character offset in original document */\n startOffset: number;\n /** Character end offset in original document */\n endOffset: number;\n /** Word count in this chunk */\n wordCount: number;\n /** Token count estimate (using ~4 chars per token heuristic) */\n tokenEstimate: number;\n /** Metadata about the chunk context */\n metadata: ChunkMetadata;\n}\n\nexport interface ChunkMetadata {\n /** Section header if detected */\n sectionHeader?: string;\n /** Paragraph number if applicable */\n paragraphNumber?: number;\n /** Whether chunk starts at a sentence boundary */\n startsAtSentence: boolean;\n /** Whether chunk ends at a sentence boundary */\n endsAtSentence: boolean;\n /** Whether this chunk has overlap from previous */\n hasOverlapFromPrevious: boolean;\n /** Whether this chunk has overlap to next */\n hasOverlapToNext: boolean;\n}\n\nexport interface ChunkerOptions {\n /** Target chunk size in characters (default: 1000) */\n chunkSize?: number;\n /** Overlap between chunks in characters (default: 200) */\n chunkOverlap?: number;\n /** Minimum chunk size in characters (default: 100) */\n minChunkSize?: number;\n /** Maximum chunk size in characters (default: 2000) */\n maxChunkSize?: number;\n /** Prefer splitting at sentence boundaries */\n respectSentences?: boolean;\n /** Prefer splitting at paragraph boundaries */\n respectParagraphs?: boolean;\n /** Keep section headers with their content */\n preserveSections?: boolean;\n /** Split strategy */\n strategy?: ChunkStrategy;\n}\n\nexport type ChunkStrategy =\n | \"fixed\" // Fixed size chunks\n | \"sentence\" // Split on sentence boundaries\n | \"paragraph\" // Split on paragraph boundaries\n | \"semantic\" // Combine strategies for best semantic coherence\n | \"recursive\"; // Recursively split using multiple separators\n\nconst DEFAULT_OPTIONS: Required<ChunkerOptions> = {\n chunkSize: 1000,\n chunkOverlap: 200,\n minChunkSize: 100,\n maxChunkSize: 2000,\n respectSentences: true,\n respectParagraphs: true,\n preserveSections: true,\n strategy: \"semantic\",\n};\n\n/**\n * Split text into semantic chunks\n */\nexport function chunkText(text: string, options: ChunkerOptions = {}): Chunk[] {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n if (!text || text.trim().length === 0) {\n return [];\n }\n\n switch (opts.strategy) {\n case \"fixed\":\n return fixedSizeChunking(text, opts);\n case \"sentence\":\n return sentenceChunking(text, opts);\n case \"paragraph\":\n return paragraphChunking(text, opts);\n case \"recursive\":\n return recursiveChunking(text, opts);\n case \"semantic\":\n default:\n return semanticChunking(text, opts);\n }\n}\n\n/**\n * Fixed-size chunking with overlap\n */\nfunction fixedSizeChunking(\n text: string,\n opts: Required<ChunkerOptions>\n): Chunk[] {\n const chunks: Chunk[] = [];\n let startOffset = 0;\n let index = 0;\n\n while (startOffset < text.length) {\n let endOffset = Math.min(startOffset + opts.chunkSize, text.length);\n\n // Adjust to respect max chunk size\n if (endOffset - startOffset > opts.maxChunkSize) {\n endOffset = startOffset + opts.maxChunkSize;\n }\n\n const content = text.slice(startOffset, endOffset);\n const hasOverlapFromPrevious = index > 0;\n\n chunks.push(createChunk(index, content, startOffset, endOffset, {\n startsAtSentence: false,\n endsAtSentence: false,\n hasOverlapFromPrevious,\n hasOverlapToNext: endOffset < text.length,\n }));\n\n // Move start position with overlap\n const nextStart = endOffset - opts.chunkOverlap;\n startOffset = Math.max(nextStart, startOffset + opts.minChunkSize);\n index++;\n }\n\n return chunks;\n}\n\n/**\n * Sentence-based chunking\n */\nfunction sentenceChunking(\n text: string,\n opts: Required<ChunkerOptions>\n): Chunk[] {\n const sentences = splitIntoSentences(text);\n const chunks: Chunk[] = [];\n let currentChunk = \"\";\n let currentStart = 0;\n let index = 0;\n let textOffset = 0;\n\n for (let i = 0; i < sentences.length; i++) {\n const sentence = sentences[i];\n const potentialChunk = currentChunk + sentence;\n\n if (potentialChunk.length > opts.maxChunkSize && currentChunk.length > 0) {\n // Current chunk is full, save it\n const endOffset = textOffset;\n chunks.push(createChunk(index, currentChunk.trim(), currentStart, endOffset, {\n startsAtSentence: true,\n endsAtSentence: true,\n hasOverlapFromPrevious: index > 0,\n hasOverlapToNext: true,\n }));\n\n // Start new chunk with overlap\n const overlapSentences = getOverlapSentences(\n sentences.slice(0, i),\n opts.chunkOverlap\n );\n currentChunk = overlapSentences + sentence;\n currentStart = endOffset - overlapSentences.length;\n index++;\n } else if (potentialChunk.length >= opts.chunkSize && currentChunk.length >= opts.minChunkSize) {\n // Reached target size\n currentChunk = potentialChunk;\n textOffset += sentence.length;\n\n const endOffset = textOffset;\n chunks.push(createChunk(index, currentChunk.trim(), currentStart, endOffset, {\n startsAtSentence: true,\n endsAtSentence: true,\n hasOverlapFromPrevious: index > 0,\n hasOverlapToNext: i < sentences.length - 1,\n }));\n\n // Start new chunk with overlap\n const overlapSentences = getOverlapSentences(\n sentences.slice(0, i + 1),\n opts.chunkOverlap\n );\n currentChunk = overlapSentences;\n currentStart = endOffset - overlapSentences.length;\n index++;\n } else {\n currentChunk = potentialChunk;\n textOffset += sentence.length;\n }\n }\n\n // Don't forget the last chunk\n if (currentChunk.trim().length > 0) {\n chunks.push(createChunk(index, currentChunk.trim(), currentStart, text.length, {\n startsAtSentence: true,\n endsAtSentence: true,\n hasOverlapFromPrevious: index > 0,\n hasOverlapToNext: false,\n }));\n }\n\n return chunks;\n}\n\n/**\n * Paragraph-based chunking\n */\nfunction paragraphChunking(\n text: string,\n opts: Required<ChunkerOptions>\n): Chunk[] {\n const paragraphs = text.split(/\\n\\s*\\n/).filter((p) => p.trim().length > 0);\n const chunks: Chunk[] = [];\n let currentChunk = \"\";\n let currentStart = 0;\n let index = 0;\n let textOffset = 0;\n let paragraphNumber = 0;\n\n for (let i = 0; i < paragraphs.length; i++) {\n const paragraph = paragraphs[i].trim() + \"\\n\\n\";\n paragraphNumber++;\n const potentialChunk = currentChunk + paragraph;\n\n if (potentialChunk.length > opts.maxChunkSize && currentChunk.length > 0) {\n // Save current chunk\n const endOffset = textOffset;\n chunks.push(createChunk(index, currentChunk.trim(), currentStart, endOffset, {\n paragraphNumber: paragraphNumber - 1,\n startsAtSentence: true,\n endsAtSentence: true,\n hasOverlapFromPrevious: index > 0,\n hasOverlapToNext: true,\n }));\n\n currentChunk = paragraph;\n currentStart = endOffset;\n index++;\n } else if (potentialChunk.length >= opts.chunkSize) {\n currentChunk = potentialChunk;\n textOffset = text.indexOf(paragraph, textOffset) + paragraph.length;\n\n // Save chunk\n chunks.push(createChunk(index, currentChunk.trim(), currentStart, textOffset, {\n paragraphNumber,\n startsAtSentence: true,\n endsAtSentence: true,\n hasOverlapFromPrevious: index > 0,\n hasOverlapToNext: i < paragraphs.length - 1,\n }));\n\n currentChunk = \"\";\n currentStart = textOffset;\n index++;\n } else {\n currentChunk = potentialChunk;\n const idx = text.indexOf(paragraph.trim(), textOffset);\n if (idx >= 0) {\n textOffset = idx + paragraph.trim().length;\n }\n }\n }\n\n // Handle last chunk\n if (currentChunk.trim().length > 0) {\n chunks.push(createChunk(index, currentChunk.trim(), currentStart, text.length, {\n paragraphNumber,\n startsAtSentence: true,\n endsAtSentence: true,\n hasOverlapFromPrevious: index > 0,\n hasOverlapToNext: false,\n }));\n }\n\n return chunks;\n}\n\n/**\n * Recursive chunking using multiple separators\n */\nfunction recursiveChunking(\n text: string,\n opts: Required<ChunkerOptions>\n): Chunk[] {\n const separators = [\n \"\\n\\n\\n\", // Multiple blank lines\n \"\\n\\n\", // Paragraph break\n \"\\n\", // Line break\n \". \", // Sentence break\n \", \", // Clause break\n \" \", // Word break\n \"\", // Character break (fallback)\n ];\n\n return recursiveChunkingSplit(text, separators, opts, 0);\n}\n\nfunction recursiveChunkingSplit(\n text: string,\n separators: string[],\n opts: Required<ChunkerOptions>,\n startOffset: number\n): Chunk[] {\n if (text.length <= opts.chunkSize) {\n return [\n createChunk(0, text, startOffset, startOffset + text.length, {\n startsAtSentence: true,\n endsAtSentence: true,\n hasOverlapFromPrevious: false,\n hasOverlapToNext: false,\n }),\n ];\n }\n\n const separator = separators[0];\n const nextSeparators = separators.slice(1);\n\n if (separator === \"\") {\n // Fallback to fixed size\n return fixedSizeChunking(text, opts);\n }\n\n const splits = text.split(separator);\n const chunks: Chunk[] = [];\n let currentChunk = \"\";\n let currentOffset = startOffset;\n let chunkIndex = 0;\n\n for (let i = 0; i < splits.length; i++) {\n const split = splits[i];\n const withSeparator = i < splits.length - 1 ? split + separator : split;\n const potential = currentChunk + withSeparator;\n\n if (potential.length > opts.chunkSize && currentChunk.length > 0) {\n // Current chunk is ready\n if (currentChunk.length > opts.maxChunkSize) {\n // Too big, recursively split\n const subChunks = recursiveChunkingSplit(\n currentChunk,\n nextSeparators,\n opts,\n currentOffset\n );\n subChunks.forEach((c, idx) => {\n c.index = chunkIndex + idx;\n });\n chunks.push(...subChunks);\n chunkIndex += subChunks.length;\n } else {\n chunks.push(\n createChunk(chunkIndex, currentChunk.trim(), currentOffset, currentOffset + currentChunk.length, {\n startsAtSentence: separator.includes(\".\"),\n endsAtSentence: separator.includes(\".\"),\n hasOverlapFromPrevious: chunkIndex > 0,\n hasOverlapToNext: true,\n })\n );\n chunkIndex++;\n }\n\n currentOffset += currentChunk.length;\n currentChunk = withSeparator;\n } else {\n currentChunk = potential;\n }\n }\n\n // Handle final chunk\n if (currentChunk.trim().length > 0) {\n if (currentChunk.length > opts.maxChunkSize) {\n const subChunks = recursiveChunkingSplit(\n currentChunk,\n nextSeparators,\n opts,\n currentOffset\n );\n subChunks.forEach((c, idx) => {\n c.index = chunkIndex + idx;\n });\n chunks.push(...subChunks);\n } else {\n chunks.push(\n createChunk(chunkIndex, currentChunk.trim(), currentOffset, currentOffset + currentChunk.length, {\n startsAtSentence: true,\n endsAtSentence: true,\n hasOverlapFromPrevious: chunkIndex > 0,\n hasOverlapToNext: false,\n })\n );\n }\n }\n\n return chunks;\n}\n\n/**\n * Semantic chunking - combines strategies for best results\n */\nfunction semanticChunking(\n text: string,\n opts: Required<ChunkerOptions>\n): Chunk[] {\n // First, identify sections by headers\n const sections = opts.preserveSections\n ? splitIntoSections(text)\n : [{ header: undefined, content: text }];\n\n const allChunks: Chunk[] = [];\n let globalIndex = 0;\n let globalOffset = 0;\n\n for (const section of sections) {\n const sectionText = section.content;\n\n // Use paragraph-based chunking within sections\n const paragraphs = sectionText\n .split(/\\n\\s*\\n/)\n .filter((p) => p.trim().length > 0);\n\n let currentChunk = \"\";\n let chunkStart = globalOffset;\n\n for (let i = 0; i < paragraphs.length; i++) {\n const paragraph = paragraphs[i].trim();\n\n // If adding this paragraph exceeds max size\n if (\n currentChunk.length + paragraph.length + 2 > opts.maxChunkSize &&\n currentChunk.length > 0\n ) {\n // Save current chunk\n allChunks.push(\n createChunk(globalIndex, currentChunk.trim(), chunkStart, chunkStart + currentChunk.length, {\n sectionHeader: section.header,\n startsAtSentence: true,\n endsAtSentence: true,\n hasOverlapFromPrevious: globalIndex > 0,\n hasOverlapToNext: true,\n })\n );\n globalIndex++;\n\n // Add overlap\n const overlap = getOverlapText(currentChunk, opts.chunkOverlap);\n chunkStart = chunkStart + currentChunk.length - overlap.length;\n currentChunk = overlap + \"\\n\\n\" + paragraph;\n } else if (\n currentChunk.length + paragraph.length >= opts.chunkSize &&\n currentChunk.length >= opts.minChunkSize\n ) {\n // Target size reached\n currentChunk += (currentChunk ? \"\\n\\n\" : \"\") + paragraph;\n\n allChunks.push(\n createChunk(globalIndex, currentChunk.trim(), chunkStart, chunkStart + currentChunk.length, {\n sectionHeader: section.header,\n startsAtSentence: true,\n endsAtSentence: true,\n hasOverlapFromPrevious: globalIndex > 0,\n hasOverlapToNext: i < paragraphs.length - 1,\n })\n );\n globalIndex++;\n\n // Add overlap for next chunk\n const overlap = getOverlapText(currentChunk, opts.chunkOverlap);\n chunkStart = chunkStart + currentChunk.length - overlap.length;\n currentChunk = overlap;\n } else {\n currentChunk += (currentChunk ? \"\\n\\n\" : \"\") + paragraph;\n }\n }\n\n // Save remaining content\n if (currentChunk.trim().length > 0) {\n allChunks.push(\n createChunk(globalIndex, currentChunk.trim(), chunkStart, chunkStart + currentChunk.length, {\n sectionHeader: section.header,\n startsAtSentence: true,\n endsAtSentence: true,\n hasOverlapFromPrevious: globalIndex > 0,\n hasOverlapToNext: false,\n })\n );\n globalIndex++;\n }\n\n globalOffset += section.content.length;\n }\n\n // Renumber indices\n return allChunks.map((chunk, idx) => ({\n ...chunk,\n index: idx,\n }));\n}\n\n/**\n * Split text into sections by headers\n */\nfunction splitIntoSections(\n text: string\n): Array<{ header: string | undefined; content: string }> {\n // Match markdown headers and other common section patterns\n const headerPattern = /^(#{1,6}\\s+.+|[A-Z][A-Za-z\\s]+:\\s*$|[A-Z][A-Z\\s]{3,}$)/gm;\n\n const sections: Array<{ header: string | undefined; content: string }> = [];\n let lastIndex = 0;\n let lastHeader: string | undefined;\n\n let match;\n while ((match = headerPattern.exec(text)) !== null) {\n // Save previous section\n if (lastIndex < match.index) {\n const content = text.slice(lastIndex, match.index);\n if (content.trim().length > 0) {\n sections.push({ header: lastHeader, content });\n }\n }\n\n lastHeader = match[1].replace(/^#+\\s*/, \"\").trim();\n lastIndex = match.index + match[0].length;\n }\n\n // Don't forget the last section\n if (lastIndex < text.length) {\n const content = text.slice(lastIndex);\n if (content.trim().length > 0) {\n sections.push({ header: lastHeader, content });\n }\n }\n\n // If no sections found, return the whole text\n if (sections.length === 0) {\n return [{ header: undefined, content: text }];\n }\n\n return sections;\n}\n\n/**\n * Split text into sentences\n */\nfunction splitIntoSentences(text: string): string[] {\n // Handle common abbreviations and edge cases\n const sentenceEnders = /([.!?]+)\\s+(?=[A-Z])/g;\n const sentences: string[] = [];\n let lastIndex = 0;\n\n let match;\n while ((match = sentenceEnders.exec(text)) !== null) {\n const endIndex = match.index + match[1].length;\n sentences.push(text.slice(lastIndex, endIndex + 1));\n lastIndex = endIndex + 1;\n }\n\n // Add remaining text\n if (lastIndex < text.length) {\n const remaining = text.slice(lastIndex);\n if (remaining.trim().length > 0) {\n sentences.push(remaining);\n }\n }\n\n return sentences;\n}\n\n/**\n * Get overlap sentences for target character count\n */\nfunction getOverlapSentences(sentences: string[], targetChars: number): string {\n let overlap = \"\";\n\n for (let i = sentences.length - 1; i >= 0 && overlap.length < targetChars; i--) {\n overlap = sentences[i] + overlap;\n }\n\n return overlap;\n}\n\n/**\n * Get overlap text from the end of a chunk\n */\nfunction getOverlapText(text: string, targetChars: number): string {\n if (text.length <= targetChars) {\n return text;\n }\n\n // Try to break at sentence boundary\n const lastPart = text.slice(-targetChars * 1.5);\n const sentenceMatch = lastPart.match(/[.!?]\\s+/);\n\n if (sentenceMatch && sentenceMatch.index) {\n return lastPart.slice(sentenceMatch.index + sentenceMatch[0].length);\n }\n\n // Fall back to word boundary\n const wordMatch = lastPart.match(/\\s+/);\n if (wordMatch && wordMatch.index) {\n return lastPart.slice(wordMatch.index + wordMatch[0].length);\n }\n\n return text.slice(-targetChars);\n}\n\n/**\n * Create a chunk object with metadata\n */\nfunction createChunk(\n index: number,\n content: string,\n startOffset: number,\n endOffset: number,\n metadata: Partial<ChunkMetadata>\n): Chunk {\n const wordCount = content.split(/\\s+/).filter((w) => w.length > 0).length;\n\n return {\n index,\n content,\n startOffset,\n endOffset,\n wordCount,\n tokenEstimate: Math.ceil(content.length / 4),\n metadata: {\n startsAtSentence: metadata.startsAtSentence ?? false,\n endsAtSentence: metadata.endsAtSentence ?? false,\n hasOverlapFromPrevious: metadata.hasOverlapFromPrevious ?? false,\n hasOverlapToNext: metadata.hasOverlapToNext ?? false,\n sectionHeader: metadata.sectionHeader,\n paragraphNumber: metadata.paragraphNumber,\n },\n };\n}\n\n/**\n * Estimate token count for text\n */\nexport function estimateTokens(text: string): number {\n // Rough estimate: ~4 characters per token for English text\n return Math.ceil(text.length / 4);\n}\n\n/**\n * Merge small chunks that are below minimum size\n */\nexport function mergeSmallChunks(\n chunks: Chunk[],\n minSize: number = 100\n): Chunk[] {\n if (chunks.length === 0) return [];\n\n const merged: Chunk[] = [];\n let current: Chunk | null = null;\n\n for (const chunk of chunks) {\n if (!current) {\n current = { ...chunk };\n continue;\n }\n\n if (current.content.length < minSize) {\n // Merge with current\n current = {\n ...current,\n content: current.content + \"\\n\\n\" + chunk.content,\n endOffset: chunk.endOffset,\n wordCount: current.wordCount + chunk.wordCount,\n tokenEstimate: current.tokenEstimate + chunk.tokenEstimate,\n metadata: {\n ...current.metadata,\n endsAtSentence: chunk.metadata.endsAtSentence,\n hasOverlapToNext: chunk.metadata.hasOverlapToNext,\n },\n };\n } else {\n merged.push(current);\n current = { ...chunk, index: merged.length };\n }\n }\n\n if (current) {\n merged.push(current);\n }\n\n return merged;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,12 @@
1
+ import {
2
+ chunkText,
3
+ estimateTokens,
4
+ mergeSmallChunks
5
+ } from "./chunk-ZIYTHUM5.js";
6
+ import "./chunk-UP2VWCW5.js";
7
+ export {
8
+ chunkText,
9
+ estimateTokens,
10
+ mergeSmallChunks
11
+ };
12
+ //# sourceMappingURL=chunker-K6WTR62A.js.map
package/dist/cli.js CHANGED
@@ -16,7 +16,7 @@ switch (command) {
16
16
  import("./commands/status.js").then((m) => m.default());
17
17
  break;
18
18
  case "pair":
19
- import("./pair-JDFTERIK.js").then((m) => m.showPairingInfo());
19
+ import("./pair-YZJFQUU5.js").then((m) => m.showPairingInfo());
20
20
  break;
21
21
  case "version":
22
22
  case "--version":
@@ -1,21 +1,20 @@
1
1
  import {
2
+ Client,
2
3
  getNotionClient,
3
4
  getRootPageId,
4
- import_client,
5
5
  initNotionClient,
6
6
  init_client,
7
7
  isNotionInitialized,
8
8
  resetNotionClient
9
- } from "./chunk-VRD5CYRL.js";
10
- import "./chunk-PLDDJCW6.js";
9
+ } from "./chunk-C6PELIHS.js";
10
+ import "./chunk-UP2VWCW5.js";
11
11
  init_client();
12
- var export_Client = import_client.Client;
13
12
  export {
14
- export_Client as Client,
13
+ Client,
15
14
  getNotionClient,
16
15
  getRootPageId,
17
16
  initNotionClient,
18
17
  isNotionInitialized,
19
18
  resetNotionClient
20
19
  };
21
- //# sourceMappingURL=client-ZQSFPMOB.js.map
20
+ //# sourceMappingURL=client-FOIYPOZQ.js.map
@@ -9,7 +9,7 @@ import {
9
9
  save,
10
10
  search
11
11
  } from "./chunk-MGFBLVR7.js";
12
- import "./chunk-PLDDJCW6.js";
12
+ import "./chunk-UP2VWCW5.js";
13
13
  export {
14
14
  clearAll,
15
15
  clipboardTool,
@@ -21,4 +21,4 @@ export {
21
21
  save,
22
22
  search
23
23
  };
24
- //# sourceMappingURL=clipboard-manager-TEO2GEDN.js.map
24
+ //# sourceMappingURL=clipboard-manager-4SBNESGZ.js.map