opensentinel 2.1.1 → 3.1.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.
- package/README.md +354 -283
- package/dist/archiver-AVNBYCKQ.js +15340 -0
- package/dist/archiver-AVNBYCKQ.js.map +1 -0
- package/dist/audit-logger-OBPR7CRO.js +22 -0
- package/dist/auth-UOX5K2BE.js +18 -0
- package/dist/autonomy-ZXDBDQUJ.js +86 -0
- package/dist/autonomy-ZXDBDQUJ.js.map +1 -0
- package/dist/aws-s3-Q4LLZZPD.js +146 -0
- package/dist/aws-s3-Q4LLZZPD.js.map +1 -0
- package/dist/backup-restore-PZ7CYYB7.js +16 -0
- package/dist/blocks-R3PODY47.js +23 -0
- package/dist/bot-QRARP4UN.js +36 -0
- package/dist/brain-7XLLM3KC.js +56 -0
- package/dist/camera-monitor-M5CYKUU4.js +335 -0
- package/dist/camera-monitor-M5CYKUU4.js.map +1 -0
- package/dist/{charts-MMXM6BWW.js → charts-V7ARZNKF.js} +2 -2
- package/dist/chunk-22VGGA7S.js +330 -0
- package/dist/chunk-22VGGA7S.js.map +1 -0
- package/dist/chunk-35WYTA3C.js +382 -0
- package/dist/chunk-35WYTA3C.js.map +1 -0
- package/dist/chunk-3E2PSU2C.js +146 -0
- package/dist/chunk-3E2PSU2C.js.map +1 -0
- package/dist/{chunk-L3F43VPB.js → chunk-4GLYY4NN.js} +2 -2
- package/dist/{chunk-L3F43VPB.js.map → chunk-4GLYY4NN.js.map} +1 -1
- package/dist/{chunk-L3PDU3XN.js → chunk-4UOE5TUZ.js} +4 -4
- package/dist/{chunk-6SNHU3CY.js → chunk-66OJ3WB4.js} +2 -2
- package/dist/chunk-6KONMXQ6.js +297 -0
- package/dist/chunk-6KONMXQ6.js.map +1 -0
- package/dist/chunk-6PMVAAA7.js +196 -0
- package/dist/chunk-6PMVAAA7.js.map +1 -0
- package/dist/chunk-766ASQWE.js +32620 -0
- package/dist/chunk-766ASQWE.js.map +1 -0
- package/dist/chunk-7WQO5J2M.js +29 -0
- package/dist/chunk-7WQO5J2M.js.map +1 -0
- package/dist/chunk-APHSRMBS.js +148 -0
- package/dist/chunk-APHSRMBS.js.map +1 -0
- package/dist/{chunk-4LVWXUNC.js → chunk-AYUKPTSM.js} +57 -39
- package/dist/chunk-AYUKPTSM.js.map +1 -0
- package/dist/chunk-BIPYADGB.js +84 -0
- package/dist/chunk-BIPYADGB.js.map +1 -0
- package/dist/chunk-BRBWNV65.js +457 -0
- package/dist/chunk-BRBWNV65.js.map +1 -0
- package/dist/chunk-BXZ6EA52.js +382 -0
- package/dist/chunk-BXZ6EA52.js.map +1 -0
- package/dist/chunk-EVE7MIIY.js +290 -0
- package/dist/chunk-EVE7MIIY.js.map +1 -0
- package/dist/chunk-F3TTNID2.js +138 -0
- package/dist/chunk-F3TTNID2.js.map +1 -0
- package/dist/chunk-H5RQOFO2.js +190 -0
- package/dist/chunk-H5RQOFO2.js.map +1 -0
- package/dist/chunk-HN3F4WSW.js +145 -0
- package/dist/chunk-HN3F4WSW.js.map +1 -0
- package/dist/{chunk-6DRDKB45.js → chunk-I6BDYQIG.js} +20 -9
- package/dist/chunk-I6BDYQIG.js.map +1 -0
- package/dist/chunk-IZJMVV7O.js +347 -0
- package/dist/chunk-IZJMVV7O.js.map +1 -0
- package/dist/chunk-KM22GV7G.js +211 -0
- package/dist/chunk-KM22GV7G.js.map +1 -0
- package/dist/chunk-MGFBLVR7.js +103 -0
- package/dist/chunk-MGFBLVR7.js.map +1 -0
- package/dist/chunk-MQJ2ECQT.js +228 -0
- package/dist/chunk-MQJ2ECQT.js.map +1 -0
- package/dist/{chunk-F6QUZQGI.js → chunk-MXAPLSJ5.js} +2 -2
- package/dist/{chunk-GK3E2I7A.js → chunk-NHMBTUMW.js} +2 -2
- package/dist/chunk-NPRTSZIF.js +131 -0
- package/dist/chunk-NPRTSZIF.js.map +1 -0
- package/dist/chunk-O7IH7JTI.js +1898 -0
- package/dist/chunk-O7IH7JTI.js.map +1 -0
- package/dist/chunk-OCVQGBJK.js +293 -0
- package/dist/chunk-OCVQGBJK.js.map +1 -0
- package/dist/chunk-P6QINGFL.js +332 -0
- package/dist/chunk-P6QINGFL.js.map +1 -0
- package/dist/chunk-PHDZKPNE.js +91 -0
- package/dist/chunk-PHDZKPNE.js.map +1 -0
- package/dist/chunk-PLDDJCW6.js +49 -0
- package/dist/chunk-PTGTGXV2.js +164 -0
- package/dist/chunk-PTGTGXV2.js.map +1 -0
- package/dist/chunk-REMIY4U2.js +171 -0
- package/dist/chunk-REMIY4U2.js.map +1 -0
- package/dist/chunk-RZ4YESBG.js +141 -0
- package/dist/chunk-RZ4YESBG.js.map +1 -0
- package/dist/chunk-SAX5MHK4.js +111 -0
- package/dist/chunk-SAX5MHK4.js.map +1 -0
- package/dist/{chunk-GVJVEWHI.js → chunk-SJSUSJ47.js} +2 -2
- package/dist/chunk-SPPMCAKG.js +777 -0
- package/dist/chunk-SPPMCAKG.js.map +1 -0
- package/dist/chunk-SVAPX2XN.js +2441 -0
- package/dist/chunk-SVAPX2XN.js.map +1 -0
- package/dist/chunk-TVEWKIK3.js +452 -0
- package/dist/chunk-TVEWKIK3.js.map +1 -0
- package/dist/{chunk-HH2HBTQM.js → chunk-TYAGMJNV.js} +5 -5
- package/dist/{chunk-JXUP2X7V.js → chunk-VEHFVBLI.js} +2 -2
- package/dist/chunk-VNX5GMTN.js +128 -0
- package/dist/chunk-VNX5GMTN.js.map +1 -0
- package/dist/chunk-VRD5CYRL.js +1568 -0
- package/dist/chunk-VRD5CYRL.js.map +1 -0
- package/dist/chunk-WLUHNG6X.js +122 -0
- package/dist/chunk-WLUHNG6X.js.map +1 -0
- package/dist/chunk-WRAKK6K6.js +265 -0
- package/dist/chunk-WRAKK6K6.js.map +1 -0
- package/dist/chunk-XKYRH4FM.js +681 -0
- package/dist/chunk-XKYRH4FM.js.map +1 -0
- package/dist/{chunk-GUBEEYDW.js → chunk-XMCVRVTF.js} +2 -2
- package/dist/{chunk-GUBEEYDW.js.map → chunk-XMCVRVTF.js.map} +1 -1
- package/dist/chunk-ZLZKF2PM.js +310 -0
- package/dist/chunk-ZLZKF2PM.js.map +1 -0
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/client-ZQSFPMOB.js +21 -0
- package/dist/clipboard-manager-TEO2GEDN.js +24 -0
- package/dist/commands/setup.js +3 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/start.js +3 -3
- package/dist/commands/status.js +2 -2
- package/dist/commands/stop.js +2 -2
- package/dist/commands/utils.js +2 -2
- package/dist/cron-explain-HHQKPD3M.js +16 -0
- package/dist/crypto-4AP47IKC.js +14 -0
- package/dist/crypto-4AP47IKC.js.map +1 -0
- package/dist/databases-37X4CI2Y.js +21 -0
- package/dist/databases-37X4CI2Y.js.map +1 -0
- package/dist/discord-B3HUPGQ6.js +70 -0
- package/dist/discord-B3HUPGQ6.js.map +1 -0
- package/dist/dist-UISMLMFN.js +21847 -0
- package/dist/dist-UISMLMFN.js.map +1 -0
- package/dist/email-K7LO2IPB.js +268 -0
- package/dist/email-K7LO2IPB.js.map +1 -0
- package/dist/enhanced-retrieval-DNLLEM4Z.js +753 -0
- package/dist/enhanced-retrieval-DNLLEM4Z.js.map +1 -0
- package/dist/enrichment-pipeline-MNHNW65K.js +13 -0
- package/dist/enrichment-pipeline-MNHNW65K.js.map +1 -0
- package/dist/entity-resolution-Y3IUWEAT.js +24 -0
- package/dist/entity-resolution-Y3IUWEAT.js.map +1 -0
- package/dist/env-IWXUVTCB.js +12 -0
- package/dist/env-IWXUVTCB.js.map +1 -0
- package/dist/google-workspace-DKWUVNGC.js +169 -0
- package/dist/google-workspace-DKWUVNGC.js.map +1 -0
- package/dist/hash-tool-ULQYD7B5.js +22 -0
- package/dist/hash-tool-ULQYD7B5.js.map +1 -0
- package/dist/heartbeat-monitor-GCISLXI3.js +22 -0
- package/dist/heartbeat-monitor-GCISLXI3.js.map +1 -0
- package/dist/image-generation-OSU7FP6F.js +486 -0
- package/dist/image-generation-OSU7FP6F.js.map +1 -0
- package/dist/imessage-NGA2XF2V.js +35 -0
- package/dist/imessage-NGA2XF2V.js.map +1 -0
- package/dist/inbox-summarizer-NRI4S7IF.js +47 -0
- package/dist/inbox-summarizer-NRI4S7IF.js.map +1 -0
- package/dist/incident-response-C5J7Q6DT.js +244 -0
- package/dist/incident-response-C5J7Q6DT.js.map +1 -0
- package/dist/inventory-manager-352OHXWD.js +24 -0
- package/dist/inventory-manager-352OHXWD.js.map +1 -0
- package/dist/jira-GSGDBMIG.js +199 -0
- package/dist/jira-GSGDBMIG.js.map +1 -0
- package/dist/json-tool-QE2SYHEG.js +26 -0
- package/dist/json-tool-QE2SYHEG.js.map +1 -0
- package/dist/key-rotation-DPHU4ZTB.js +18 -0
- package/dist/key-rotation-DPHU4ZTB.js.map +1 -0
- package/dist/lib.d.ts +603 -11
- package/dist/lib.js +161 -35
- package/dist/lib.js.map +1 -1
- package/dist/mailchimp-KKNF6QJ7.js +152 -0
- package/dist/mailchimp-KKNF6QJ7.js.map +1 -0
- package/dist/matrix-QVHG76I7.js +279 -0
- package/dist/matrix-QVHG76I7.js.map +1 -0
- package/dist/{mcp-LS7Q3Z5W.js → mcp-3JI6W7ZE.js} +3 -3
- package/dist/mcp-3JI6W7ZE.js.map +1 -0
- package/dist/microsoft365-UCBKJHNX.js +164 -0
- package/dist/microsoft365-UCBKJHNX.js.map +1 -0
- package/dist/ocr-AC7NPX33.js +22 -0
- package/dist/ocr-AC7NPX33.js.map +1 -0
- package/dist/ollama-BOAMSPLJ.js +8 -0
- package/dist/ollama-BOAMSPLJ.js.map +1 -0
- package/dist/pages-MI523RB7.js +26 -0
- package/dist/pages-MI523RB7.js.map +1 -0
- package/dist/pair-JDFTERIK.js +24 -0
- package/dist/pair-JDFTERIK.js.map +1 -0
- package/dist/pairing-IFQYCPNS.js +10 -0
- package/dist/pairing-IFQYCPNS.js.map +1 -0
- package/dist/pdf-ALQVOEJR.js +17 -0
- package/dist/pdf-ALQVOEJR.js.map +1 -0
- package/dist/presentations-DSV5IHG5.js +1002 -0
- package/dist/presentations-DSV5IHG5.js.map +1 -0
- package/dist/prometheus-JNT2BD4L.js +10 -0
- package/dist/prometheus-JNT2BD4L.js.map +1 -0
- package/dist/providers-J4LYPHDR.js +19 -0
- package/dist/providers-J4LYPHDR.js.map +1 -0
- package/dist/qr-code-WIX4PB4U.js +16 -0
- package/dist/qr-code-WIX4PB4U.js.map +1 -0
- package/dist/quickbooks-XB4NII2S.js +190 -0
- package/dist/quickbooks-XB4NII2S.js.map +1 -0
- package/dist/regex-tool-W4ABRKGK.js +24 -0
- package/dist/regex-tool-W4ABRKGK.js.map +1 -0
- package/dist/scheduler-VK4WFERV.js +63 -0
- package/dist/scheduler-VK4WFERV.js.map +1 -0
- package/dist/search-BCLBO5E3.js +25 -0
- package/dist/search-BCLBO5E3.js.map +1 -0
- package/dist/sendgrid-RNXCAFKM.js +152 -0
- package/dist/sendgrid-RNXCAFKM.js.map +1 -0
- package/dist/shopify-NCXYJB4R.js +171 -0
- package/dist/shopify-NCXYJB4R.js.map +1 -0
- package/dist/signal-6CGDFYL2.js +35 -0
- package/dist/signal-6CGDFYL2.js.map +1 -0
- package/dist/slack-IZQWIKOH.js +75 -0
- package/dist/slack-IZQWIKOH.js.map +1 -0
- package/dist/sms-M3JIOTCW.js +23 -0
- package/dist/sms-M3JIOTCW.js.map +1 -0
- package/dist/{src-K7GASHRH.js → src-VYUE6LRA.js} +138 -32
- package/dist/src-VYUE6LRA.js.map +1 -0
- package/dist/stocks-XXWBPOCU.js +14 -0
- package/dist/stocks-XXWBPOCU.js.map +1 -0
- package/dist/text-transform-6SGUA5Z4.js +22 -0
- package/dist/text-transform-6SGUA5Z4.js.map +1 -0
- package/dist/tools-2RLEI2N6.js +38 -0
- package/dist/tools-2RLEI2N6.js.map +1 -0
- package/dist/tunnel-IWMXUML4.js +301 -0
- package/dist/tunnel-IWMXUML4.js.map +1 -0
- package/dist/twilio-53GEW5JT.js +139 -0
- package/dist/twilio-53GEW5JT.js.map +1 -0
- package/dist/unit-converter-ZYXMEZOE.js +14 -0
- package/dist/unit-converter-ZYXMEZOE.js.map +1 -0
- package/dist/whatsapp-LFX6YKCM.js +35 -0
- package/dist/whatsapp-LFX6YKCM.js.map +1 -0
- package/dist/word-document-7B6SJMAY.js +902 -0
- package/dist/word-document-7B6SJMAY.js.map +1 -0
- package/dist/xero-QYO66D45.js +162 -0
- package/dist/xero-QYO66D45.js.map +1 -0
- package/dist/zapier-webhook-TBZ5YF2A.js +106 -0
- package/dist/zapier-webhook-TBZ5YF2A.js.map +1 -0
- package/drizzle/0002_mushy_master_mold.sql +140 -0
- package/drizzle/meta/0002_snapshot.json +3637 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +100 -98
- package/dist/bot-KJ26BG56.js +0 -15
- package/dist/chunk-4LVWXUNC.js.map +0 -1
- package/dist/chunk-4TG2IG5K.js +0 -5249
- package/dist/chunk-4TG2IG5K.js.map +0 -1
- package/dist/chunk-6DRDKB45.js.map +0 -1
- package/dist/chunk-CI6Q63MM.js +0 -1613
- package/dist/chunk-CI6Q63MM.js.map +0 -1
- package/dist/chunk-KHNYJY2Z.js +0 -178
- package/dist/chunk-KHNYJY2Z.js.map +0 -1
- package/dist/chunk-NSBPE2FW.js +0 -17
- package/dist/discord-ZOJFTVTB.js +0 -49
- package/dist/imessage-JFRB6EJ7.js +0 -14
- package/dist/scheduler-EZ7CZMCS.js +0 -42
- package/dist/signal-T3MCSULM.js +0 -14
- package/dist/slack-N2M4FHAJ.js +0 -54
- package/dist/src-K7GASHRH.js.map +0 -1
- package/dist/tools-24GZHYRF.js +0 -16
- package/dist/whatsapp-VCRUPAO5.js +0 -14
- /package/dist/{bot-KJ26BG56.js.map → audit-logger-OBPR7CRO.js.map} +0 -0
- /package/dist/{chunk-NSBPE2FW.js.map → auth-UOX5K2BE.js.map} +0 -0
- /package/dist/{discord-ZOJFTVTB.js.map → backup-restore-PZ7CYYB7.js.map} +0 -0
- /package/dist/{imessage-JFRB6EJ7.js.map → blocks-R3PODY47.js.map} +0 -0
- /package/dist/{mcp-LS7Q3Z5W.js.map → bot-QRARP4UN.js.map} +0 -0
- /package/dist/{scheduler-EZ7CZMCS.js.map → brain-7XLLM3KC.js.map} +0 -0
- /package/dist/{charts-MMXM6BWW.js.map → charts-V7ARZNKF.js.map} +0 -0
- /package/dist/{chunk-L3PDU3XN.js.map → chunk-4UOE5TUZ.js.map} +0 -0
- /package/dist/{chunk-6SNHU3CY.js.map → chunk-66OJ3WB4.js.map} +0 -0
- /package/dist/{chunk-F6QUZQGI.js.map → chunk-MXAPLSJ5.js.map} +0 -0
- /package/dist/{chunk-GK3E2I7A.js.map → chunk-NHMBTUMW.js.map} +0 -0
- /package/dist/{signal-T3MCSULM.js.map → chunk-PLDDJCW6.js.map} +0 -0
- /package/dist/{chunk-GVJVEWHI.js.map → chunk-SJSUSJ47.js.map} +0 -0
- /package/dist/{chunk-HH2HBTQM.js.map → chunk-TYAGMJNV.js.map} +0 -0
- /package/dist/{chunk-JXUP2X7V.js.map → chunk-VEHFVBLI.js.map} +0 -0
- /package/dist/{slack-N2M4FHAJ.js.map → client-ZQSFPMOB.js.map} +0 -0
- /package/dist/{tools-24GZHYRF.js.map → clipboard-manager-TEO2GEDN.js.map} +0 -0
- /package/dist/{whatsapp-VCRUPAO5.js.map → cron-explain-HHQKPD3M.js.map} +0 -0
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import {
|
|
2
|
+
chatWithTools
|
|
3
|
+
} from "./chunk-766ASQWE.js";
|
|
4
|
+
import "./chunk-IZJMVV7O.js";
|
|
5
|
+
import "./chunk-6PMVAAA7.js";
|
|
6
|
+
import "./chunk-MQJ2ECQT.js";
|
|
7
|
+
import "./chunk-TVEWKIK3.js";
|
|
8
|
+
import "./chunk-BRBWNV65.js";
|
|
9
|
+
import "./chunk-H5RQOFO2.js";
|
|
10
|
+
import "./chunk-VRD5CYRL.js";
|
|
11
|
+
import "./chunk-KM22GV7G.js";
|
|
12
|
+
import "./chunk-P6QINGFL.js";
|
|
13
|
+
import "./chunk-HN3F4WSW.js";
|
|
14
|
+
import "./chunk-SVAPX2XN.js";
|
|
15
|
+
import "./chunk-WRAKK6K6.js";
|
|
16
|
+
import "./chunk-7WQO5J2M.js";
|
|
17
|
+
import "./chunk-BXZ6EA52.js";
|
|
18
|
+
import "./chunk-4GLYY4NN.js";
|
|
19
|
+
import "./chunk-EVE7MIIY.js";
|
|
20
|
+
import "./chunk-RZ4YESBG.js";
|
|
21
|
+
import "./chunk-CQ4JURG7.js";
|
|
22
|
+
import "./chunk-OCVQGBJK.js";
|
|
23
|
+
import "./chunk-XKYRH4FM.js";
|
|
24
|
+
import "./chunk-ZLZKF2PM.js";
|
|
25
|
+
import "./chunk-6KONMXQ6.js";
|
|
26
|
+
import "./chunk-22VGGA7S.js";
|
|
27
|
+
import "./chunk-35WYTA3C.js";
|
|
28
|
+
import "./chunk-PLDDJCW6.js";
|
|
29
|
+
|
|
30
|
+
// src/inputs/matrix/index.ts
|
|
31
|
+
import sdk from "matrix-js-sdk";
|
|
32
|
+
var MatrixBot = class {
|
|
33
|
+
client;
|
|
34
|
+
sessions = /* @__PURE__ */ new Map();
|
|
35
|
+
maxSessionMessages = 20;
|
|
36
|
+
homeserverUrl;
|
|
37
|
+
accessToken;
|
|
38
|
+
userId;
|
|
39
|
+
allowedRoomIds;
|
|
40
|
+
autoJoin;
|
|
41
|
+
e2eEnabled;
|
|
42
|
+
constructor(config) {
|
|
43
|
+
this.homeserverUrl = config.homeserverUrl;
|
|
44
|
+
this.accessToken = config.accessToken;
|
|
45
|
+
this.userId = config.userId;
|
|
46
|
+
this.allowedRoomIds = config.allowedRoomIds;
|
|
47
|
+
this.autoJoin = config.autoJoin ?? false;
|
|
48
|
+
this.e2eEnabled = config.e2eEnabled ?? false;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Start the Matrix bot — creates the client, registers event listeners,
|
|
52
|
+
* and begins syncing with the homeserver.
|
|
53
|
+
*/
|
|
54
|
+
async start() {
|
|
55
|
+
console.log("[Matrix] Starting bot...");
|
|
56
|
+
this.client = sdk.createClient({
|
|
57
|
+
baseUrl: this.homeserverUrl,
|
|
58
|
+
accessToken: this.accessToken,
|
|
59
|
+
userId: this.userId
|
|
60
|
+
});
|
|
61
|
+
this.client.on("Room.timeline", async (event, room) => {
|
|
62
|
+
try {
|
|
63
|
+
if (event.getType() !== "m.room.message") return;
|
|
64
|
+
const sender = event.getSender();
|
|
65
|
+
const roomId = room.roomId;
|
|
66
|
+
if (sender === this.userId) return;
|
|
67
|
+
const content = event.getContent();
|
|
68
|
+
if (!content || content.msgtype !== "m.text") return;
|
|
69
|
+
const body = content.body;
|
|
70
|
+
if (!body || !body.trim()) return;
|
|
71
|
+
if (this.allowedRoomIds && this.allowedRoomIds.length > 0 && !this.allowedRoomIds.includes(roomId)) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const mentioned = this.isMentioned(body);
|
|
75
|
+
const dm = this.isDM(roomId);
|
|
76
|
+
if (!mentioned && !dm) return;
|
|
77
|
+
try {
|
|
78
|
+
await this.client.sendTyping(roomId, true, 3e4);
|
|
79
|
+
} catch (err) {
|
|
80
|
+
console.warn("[Matrix] Failed to set typing indicator:", err);
|
|
81
|
+
}
|
|
82
|
+
const response = await this.processMessage(roomId, sender, body);
|
|
83
|
+
try {
|
|
84
|
+
await this.client.sendTyping(roomId, false, 0);
|
|
85
|
+
} catch (err) {
|
|
86
|
+
console.warn("[Matrix] Failed to clear typing indicator:", err);
|
|
87
|
+
}
|
|
88
|
+
await this.sendMessage(roomId, response);
|
|
89
|
+
console.log(
|
|
90
|
+
`[Matrix] Processed message from ${sender} in room ${roomId}`
|
|
91
|
+
);
|
|
92
|
+
} catch (error) {
|
|
93
|
+
console.error("[Matrix] Error handling Room.timeline event:", error);
|
|
94
|
+
try {
|
|
95
|
+
await this.client.sendTyping(room.roomId, false, 0);
|
|
96
|
+
} catch {
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
await this.client.sendEvent(
|
|
100
|
+
room.roomId,
|
|
101
|
+
"m.room.message",
|
|
102
|
+
{
|
|
103
|
+
msgtype: "m.text",
|
|
104
|
+
body: "Sorry, I encountered an error processing your message. Please try again."
|
|
105
|
+
},
|
|
106
|
+
""
|
|
107
|
+
);
|
|
108
|
+
} catch (sendError) {
|
|
109
|
+
console.error("[Matrix] Failed to send error message:", sendError);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
this.client.on(
|
|
114
|
+
"RoomMember.membership",
|
|
115
|
+
async (event, member) => {
|
|
116
|
+
try {
|
|
117
|
+
if (this.autoJoin && member.membership === "invite" && member.userId === this.userId) {
|
|
118
|
+
const roomId = member.roomId;
|
|
119
|
+
console.log(`[Matrix] Auto-joining room: ${roomId}`);
|
|
120
|
+
await this.client.joinRoom(roomId);
|
|
121
|
+
console.log(`[Matrix] Successfully joined room: ${roomId}`);
|
|
122
|
+
}
|
|
123
|
+
} catch (error) {
|
|
124
|
+
console.error("[Matrix] Error handling membership event:", error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
await this.client.startClient({ initialSyncLimit: 10 });
|
|
129
|
+
console.log(`[Matrix] Bot started as ${this.userId}`);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Stop the Matrix bot and disconnect from the homeserver.
|
|
133
|
+
*/
|
|
134
|
+
async stop() {
|
|
135
|
+
console.log("[Matrix] Stopping bot...");
|
|
136
|
+
if (this.client) {
|
|
137
|
+
this.client.stopClient();
|
|
138
|
+
}
|
|
139
|
+
console.log("[Matrix] Bot stopped");
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Process an incoming message: manage session history, call chatWithTools,
|
|
143
|
+
* and return the response text.
|
|
144
|
+
*/
|
|
145
|
+
async processMessage(roomId, sender, body) {
|
|
146
|
+
let session = this.sessions.get(roomId);
|
|
147
|
+
if (!session) {
|
|
148
|
+
session = [];
|
|
149
|
+
this.sessions.set(roomId, session);
|
|
150
|
+
}
|
|
151
|
+
session.push({ role: "user", content: body });
|
|
152
|
+
if (session.length > this.maxSessionMessages) {
|
|
153
|
+
session.splice(0, session.length - this.maxSessionMessages);
|
|
154
|
+
}
|
|
155
|
+
try {
|
|
156
|
+
const response = await chatWithTools(
|
|
157
|
+
session,
|
|
158
|
+
`matrix:${sender}`,
|
|
159
|
+
async () => {
|
|
160
|
+
try {
|
|
161
|
+
await this.client.sendTyping(roomId, true, 3e4);
|
|
162
|
+
} catch {
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
);
|
|
166
|
+
session.push({ role: "assistant", content: response.content });
|
|
167
|
+
if (session.length > this.maxSessionMessages) {
|
|
168
|
+
session.splice(0, session.length - this.maxSessionMessages);
|
|
169
|
+
}
|
|
170
|
+
let finalResponse = response.content;
|
|
171
|
+
if (response.toolsUsed && response.toolsUsed.length > 0) {
|
|
172
|
+
const toolList = [...new Set(response.toolsUsed)].join(", ");
|
|
173
|
+
finalResponse = `[Used: ${toolList}]
|
|
174
|
+
|
|
175
|
+
${response.content}`;
|
|
176
|
+
}
|
|
177
|
+
console.log(
|
|
178
|
+
`[Matrix] Response generated. Tokens: ${response.inputTokens}/${response.outputTokens}` + (response.toolsUsed ? ` Tools: ${response.toolsUsed.join(", ")}` : "")
|
|
179
|
+
);
|
|
180
|
+
return finalResponse;
|
|
181
|
+
} catch (error) {
|
|
182
|
+
console.error("[Matrix] Error calling chatWithTools:", error);
|
|
183
|
+
return "Sorry, I encountered an error processing your message. Please try again.";
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Send a message to a room, splitting into multiple messages if the text
|
|
188
|
+
* exceeds 4000 characters.
|
|
189
|
+
*/
|
|
190
|
+
async sendMessage(roomId, text) {
|
|
191
|
+
const MAX_LENGTH = 4e3;
|
|
192
|
+
if (text.length <= MAX_LENGTH) {
|
|
193
|
+
await this.client.sendEvent(
|
|
194
|
+
roomId,
|
|
195
|
+
"m.room.message",
|
|
196
|
+
{
|
|
197
|
+
msgtype: "m.text",
|
|
198
|
+
body: text
|
|
199
|
+
},
|
|
200
|
+
""
|
|
201
|
+
);
|
|
202
|
+
} else {
|
|
203
|
+
const chunks = [];
|
|
204
|
+
let remaining = text;
|
|
205
|
+
while (remaining.length > 0) {
|
|
206
|
+
if (remaining.length <= MAX_LENGTH) {
|
|
207
|
+
chunks.push(remaining);
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
let splitIndex = remaining.lastIndexOf("\n", MAX_LENGTH);
|
|
211
|
+
if (splitIndex === -1 || splitIndex < MAX_LENGTH * 0.5) {
|
|
212
|
+
splitIndex = remaining.lastIndexOf(" ", MAX_LENGTH);
|
|
213
|
+
}
|
|
214
|
+
if (splitIndex === -1 || splitIndex < MAX_LENGTH * 0.5) {
|
|
215
|
+
splitIndex = MAX_LENGTH;
|
|
216
|
+
}
|
|
217
|
+
chunks.push(remaining.substring(0, splitIndex));
|
|
218
|
+
remaining = remaining.substring(splitIndex).trimStart();
|
|
219
|
+
}
|
|
220
|
+
for (const chunk of chunks) {
|
|
221
|
+
await this.client.sendEvent(
|
|
222
|
+
roomId,
|
|
223
|
+
"m.room.message",
|
|
224
|
+
{
|
|
225
|
+
msgtype: "m.text",
|
|
226
|
+
body: chunk
|
|
227
|
+
},
|
|
228
|
+
""
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
console.log(
|
|
232
|
+
`[Matrix] Split long message into ${chunks.length} chunks for room ${roomId}`
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Check if the bot is mentioned in the message body.
|
|
238
|
+
* Looks for the bot's full userId (e.g. @bot:matrix.org) or the localpart
|
|
239
|
+
* (e.g. bot).
|
|
240
|
+
*/
|
|
241
|
+
isMentioned(body) {
|
|
242
|
+
const lowerBody = body.toLowerCase();
|
|
243
|
+
if (lowerBody.includes(this.userId.toLowerCase())) {
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
const localpart = this.userId.split(":")[0]?.replace("@", "");
|
|
247
|
+
if (localpart && lowerBody.includes(localpart.toLowerCase())) {
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Check if a room is a direct message (has exactly 2 joined members).
|
|
254
|
+
*/
|
|
255
|
+
isDM(roomId) {
|
|
256
|
+
try {
|
|
257
|
+
const room = this.client.getRoom(roomId);
|
|
258
|
+
if (!room) return false;
|
|
259
|
+
const members = room.getJoinedMembers();
|
|
260
|
+
return members && members.length === 2;
|
|
261
|
+
} catch (error) {
|
|
262
|
+
console.error("[Matrix] Error checking if room is DM:", error);
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
function createMatrixBot(config) {
|
|
268
|
+
return new MatrixBot(config);
|
|
269
|
+
}
|
|
270
|
+
var matrix_default = {
|
|
271
|
+
createMatrixBot,
|
|
272
|
+
MatrixBot
|
|
273
|
+
};
|
|
274
|
+
export {
|
|
275
|
+
MatrixBot,
|
|
276
|
+
createMatrixBot,
|
|
277
|
+
matrix_default as default
|
|
278
|
+
};
|
|
279
|
+
//# sourceMappingURL=matrix-QVHG76I7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/inputs/matrix/index.ts"],"sourcesContent":["import sdk from \"matrix-js-sdk\";\nimport { chatWithTools, type Message } from \"../../core/brain\";\n\n/**\n * Matrix bot configuration\n */\nexport interface MatrixBotConfig {\n homeserverUrl: string;\n accessToken: string;\n userId: string;\n allowedRoomIds?: string[];\n autoJoin?: boolean;\n e2eEnabled?: boolean;\n}\n\n/**\n * Matrix bot class — connects to a Matrix homeserver and responds to messages\n * using the OpenSentinel brain (chatWithTools).\n */\nexport class MatrixBot {\n private client: any;\n private sessions: Map<string, Array<{ role: string; content: string }>> =\n new Map();\n private maxSessionMessages: number = 20;\n\n private homeserverUrl: string;\n private accessToken: string;\n private userId: string;\n private allowedRoomIds?: string[];\n private autoJoin: boolean;\n private e2eEnabled: boolean;\n\n constructor(config: MatrixBotConfig) {\n this.homeserverUrl = config.homeserverUrl;\n this.accessToken = config.accessToken;\n this.userId = config.userId;\n this.allowedRoomIds = config.allowedRoomIds;\n this.autoJoin = config.autoJoin ?? false;\n this.e2eEnabled = config.e2eEnabled ?? false;\n }\n\n /**\n * Start the Matrix bot — creates the client, registers event listeners,\n * and begins syncing with the homeserver.\n */\n async start(): Promise<void> {\n console.log(\"[Matrix] Starting bot...\");\n\n this.client = sdk.createClient({\n baseUrl: this.homeserverUrl,\n accessToken: this.accessToken,\n userId: this.userId,\n });\n\n // Handle incoming room timeline events (messages)\n this.client.on(\"Room.timeline\", async (event: any, room: any) => {\n try {\n // Only handle m.room.message events\n if (event.getType() !== \"m.room.message\") return;\n\n const sender: string = event.getSender();\n const roomId: string = room.roomId;\n\n // Ignore our own messages\n if (sender === this.userId) return;\n\n const content = event.getContent();\n\n // Ignore non-text messages (images, files, etc.)\n if (!content || content.msgtype !== \"m.text\") return;\n\n const body: string = content.body;\n if (!body || !body.trim()) return;\n\n // Check if room is in the allowed list (if configured)\n if (\n this.allowedRoomIds &&\n this.allowedRoomIds.length > 0 &&\n !this.allowedRoomIds.includes(roomId)\n ) {\n return;\n }\n\n // Only respond if the bot is mentioned or if it's a DM\n const mentioned = this.isMentioned(body);\n const dm = this.isDM(roomId);\n\n if (!mentioned && !dm) return;\n\n // Set typing indicator to show we're processing\n try {\n await this.client.sendTyping(roomId, true, 30000);\n } catch (err) {\n console.warn(\"[Matrix] Failed to set typing indicator:\", err);\n }\n\n // Process the message and get a response\n const response = await this.processMessage(roomId, sender, body);\n\n // Clear typing indicator\n try {\n await this.client.sendTyping(roomId, false, 0);\n } catch (err) {\n console.warn(\"[Matrix] Failed to clear typing indicator:\", err);\n }\n\n // Send the response, splitting if necessary\n await this.sendMessage(roomId, response);\n\n console.log(\n `[Matrix] Processed message from ${sender} in room ${roomId}`\n );\n } catch (error) {\n console.error(\"[Matrix] Error handling Room.timeline event:\", error);\n\n // Attempt to clear typing indicator on error\n try {\n await this.client.sendTyping(room.roomId, false, 0);\n } catch {\n // Ignore typing indicator cleanup errors\n }\n\n // Attempt to send error message to the room\n try {\n await this.client.sendEvent(\n room.roomId,\n \"m.room.message\",\n {\n msgtype: \"m.text\",\n body: \"Sorry, I encountered an error processing your message. Please try again.\",\n },\n \"\"\n );\n } catch (sendError) {\n console.error(\"[Matrix] Failed to send error message:\", sendError);\n }\n }\n });\n\n // Handle room membership events (auto-join invites)\n this.client.on(\n \"RoomMember.membership\",\n async (event: any, member: any) => {\n try {\n if (\n this.autoJoin &&\n member.membership === \"invite\" &&\n member.userId === this.userId\n ) {\n const roomId = member.roomId;\n console.log(`[Matrix] Auto-joining room: ${roomId}`);\n\n await this.client.joinRoom(roomId);\n console.log(`[Matrix] Successfully joined room: ${roomId}`);\n }\n } catch (error) {\n console.error(\"[Matrix] Error handling membership event:\", error);\n }\n }\n );\n\n // Start the client with a limited initial sync\n await this.client.startClient({ initialSyncLimit: 10 });\n\n console.log(`[Matrix] Bot started as ${this.userId}`);\n }\n\n /**\n * Stop the Matrix bot and disconnect from the homeserver.\n */\n async stop(): Promise<void> {\n console.log(\"[Matrix] Stopping bot...\");\n\n if (this.client) {\n this.client.stopClient();\n }\n\n console.log(\"[Matrix] Bot stopped\");\n }\n\n /**\n * Process an incoming message: manage session history, call chatWithTools,\n * and return the response text.\n */\n private async processMessage(\n roomId: string,\n sender: string,\n body: string\n ): Promise<string> {\n // Get or create the session for this room\n let session = this.sessions.get(roomId);\n if (!session) {\n session = [];\n this.sessions.set(roomId, session);\n }\n\n // Add the user message to the session\n session.push({ role: \"user\", content: body });\n\n // Trim session to the max allowed messages\n if (session.length > this.maxSessionMessages) {\n session.splice(0, session.length - this.maxSessionMessages);\n }\n\n try {\n // Call chatWithTools with the session messages\n const response = await chatWithTools(\n session as Message[],\n `matrix:${sender}`,\n async () => {\n // Refresh typing indicator during tool use\n try {\n await this.client.sendTyping(roomId, true, 30000);\n } catch {\n // Ignore typing indicator errors during tool use\n }\n }\n );\n\n // Add the assistant response to the session\n session.push({ role: \"assistant\", content: response.content });\n\n // Trim session again if needed\n if (session.length > this.maxSessionMessages) {\n session.splice(0, session.length - this.maxSessionMessages);\n }\n\n // Build response with tool usage info\n let finalResponse = response.content;\n if (response.toolsUsed && response.toolsUsed.length > 0) {\n const toolList = [...new Set(response.toolsUsed)].join(\", \");\n finalResponse = `[Used: ${toolList}]\\n\\n${response.content}`;\n }\n\n console.log(\n `[Matrix] Response generated. Tokens: ${response.inputTokens}/${response.outputTokens}` +\n (response.toolsUsed\n ? ` Tools: ${response.toolsUsed.join(\", \")}`\n : \"\")\n );\n\n return finalResponse;\n } catch (error) {\n console.error(\"[Matrix] Error calling chatWithTools:\", error);\n return \"Sorry, I encountered an error processing your message. Please try again.\";\n }\n }\n\n /**\n * Send a message to a room, splitting into multiple messages if the text\n * exceeds 4000 characters.\n */\n private async sendMessage(roomId: string, text: string): Promise<void> {\n const MAX_LENGTH = 4000;\n\n if (text.length <= MAX_LENGTH) {\n await this.client.sendEvent(\n roomId,\n \"m.room.message\",\n {\n msgtype: \"m.text\",\n body: text,\n },\n \"\"\n );\n } else {\n // Split into chunks at line boundaries when possible\n const chunks: string[] = [];\n let remaining = text;\n\n while (remaining.length > 0) {\n if (remaining.length <= MAX_LENGTH) {\n chunks.push(remaining);\n break;\n }\n\n // Try to split at a newline near the limit\n let splitIndex = remaining.lastIndexOf(\"\\n\", MAX_LENGTH);\n if (splitIndex === -1 || splitIndex < MAX_LENGTH * 0.5) {\n // If no good newline break, try a space\n splitIndex = remaining.lastIndexOf(\" \", MAX_LENGTH);\n }\n if (splitIndex === -1 || splitIndex < MAX_LENGTH * 0.5) {\n // Hard split as a last resort\n splitIndex = MAX_LENGTH;\n }\n\n chunks.push(remaining.substring(0, splitIndex));\n remaining = remaining.substring(splitIndex).trimStart();\n }\n\n for (const chunk of chunks) {\n await this.client.sendEvent(\n roomId,\n \"m.room.message\",\n {\n msgtype: \"m.text\",\n body: chunk,\n },\n \"\"\n );\n }\n\n console.log(\n `[Matrix] Split long message into ${chunks.length} chunks for room ${roomId}`\n );\n }\n }\n\n /**\n * Check if the bot is mentioned in the message body.\n * Looks for the bot's full userId (e.g. @bot:matrix.org) or the localpart\n * (e.g. bot).\n */\n private isMentioned(body: string): boolean {\n const lowerBody = body.toLowerCase();\n\n // Check for full userId mention (e.g. @opensentinel:matrix.org)\n if (lowerBody.includes(this.userId.toLowerCase())) {\n return true;\n }\n\n // Check for localpart mention (e.g. opensentinel)\n // userId format is @localpart:server\n const localpart = this.userId.split(\":\")[0]?.replace(\"@\", \"\");\n if (localpart && lowerBody.includes(localpart.toLowerCase())) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Check if a room is a direct message (has exactly 2 joined members).\n */\n private isDM(roomId: string): boolean {\n try {\n const room = this.client.getRoom(roomId);\n if (!room) return false;\n\n const members = room.getJoinedMembers();\n return members && members.length === 2;\n } catch (error) {\n console.error(\"[Matrix] Error checking if room is DM:\", error);\n return false;\n }\n }\n}\n\n/**\n * Create and configure a Matrix bot\n */\nexport function createMatrixBot(config: MatrixBotConfig): MatrixBot {\n return new MatrixBot(config);\n}\n\n/**\n * Default export\n */\nexport default {\n createMatrixBot,\n MatrixBot,\n};\n"],"mappings":"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","names":[]}
|
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
mcpToolToAnthropicTool,
|
|
12
12
|
mcpToolsToAnthropicTools,
|
|
13
13
|
parseMCPToolName
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-4GLYY4NN.js";
|
|
15
|
+
import "./chunk-PLDDJCW6.js";
|
|
16
16
|
export {
|
|
17
17
|
MCPClient,
|
|
18
18
|
MCPRegistry,
|
|
@@ -27,4 +27,4 @@ export {
|
|
|
27
27
|
mcpToolsToAnthropicTools,
|
|
28
28
|
parseMCPToolName
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=mcp-
|
|
30
|
+
//# sourceMappingURL=mcp-3JI6W7ZE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BaseAdapter
|
|
3
|
+
} from "./chunk-7WQO5J2M.js";
|
|
4
|
+
import "./chunk-PLDDJCW6.js";
|
|
5
|
+
|
|
6
|
+
// src/core/adapters/adapters/microsoft365.ts
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
var Microsoft365Adapter = class extends BaseAdapter {
|
|
9
|
+
metadata = {
|
|
10
|
+
name: "Microsoft365",
|
|
11
|
+
slug: "microsoft365",
|
|
12
|
+
displayName: "Microsoft 365",
|
|
13
|
+
description: "Send emails, manage calendar, post Teams messages, and access OneDrive files with Microsoft 365",
|
|
14
|
+
category: "productivity",
|
|
15
|
+
authType: "oauth2"
|
|
16
|
+
};
|
|
17
|
+
async authenticate(credentials) {
|
|
18
|
+
return {
|
|
19
|
+
accessToken: credentials.accessToken || "",
|
|
20
|
+
refreshToken: credentials.refreshToken,
|
|
21
|
+
metadata: {
|
|
22
|
+
tenantId: credentials.tenantId,
|
|
23
|
+
email: credentials.email
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async refreshAuth(auth) {
|
|
28
|
+
return {
|
|
29
|
+
...auth,
|
|
30
|
+
accessToken: `refreshed_${auth.accessToken}`,
|
|
31
|
+
expiresAt: new Date(Date.now() + 3600 * 1e3)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
actions = {
|
|
35
|
+
sendEmail: {
|
|
36
|
+
name: "Send Email",
|
|
37
|
+
description: "Send an email via Microsoft Outlook",
|
|
38
|
+
inputSchema: z.object({
|
|
39
|
+
to: z.string().email(),
|
|
40
|
+
subject: z.string(),
|
|
41
|
+
body: z.string(),
|
|
42
|
+
cc: z.string().email().optional(),
|
|
43
|
+
importance: z.enum(["low", "normal", "high"]).optional().default("normal")
|
|
44
|
+
}),
|
|
45
|
+
outputSchema: z.object({ id: z.string(), status: z.string() }),
|
|
46
|
+
execute: async (input, auth) => {
|
|
47
|
+
const { to, subject, body, cc, importance } = input;
|
|
48
|
+
const message = {
|
|
49
|
+
message: {
|
|
50
|
+
subject,
|
|
51
|
+
body: { contentType: "HTML", content: body },
|
|
52
|
+
toRecipients: [{ emailAddress: { address: to } }],
|
|
53
|
+
importance
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
if (cc) {
|
|
57
|
+
message.message.ccRecipients = [{ emailAddress: { address: cc } }];
|
|
58
|
+
}
|
|
59
|
+
const response = await this.makeRequest(
|
|
60
|
+
"https://graph.microsoft.com/v1.0/me/sendMail",
|
|
61
|
+
{ method: "POST", body: JSON.stringify(message), auth }
|
|
62
|
+
);
|
|
63
|
+
return { id: response.headers.get("request-id") || "", status: "sent" };
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
createEvent: {
|
|
67
|
+
name: "Create Calendar Event",
|
|
68
|
+
description: "Create a new event in Outlook Calendar",
|
|
69
|
+
inputSchema: z.object({
|
|
70
|
+
subject: z.string(),
|
|
71
|
+
body: z.string().optional(),
|
|
72
|
+
startDateTime: z.string(),
|
|
73
|
+
endDateTime: z.string(),
|
|
74
|
+
timeZone: z.string().optional().default("UTC"),
|
|
75
|
+
location: z.string().optional(),
|
|
76
|
+
attendees: z.array(z.string().email()).optional()
|
|
77
|
+
}),
|
|
78
|
+
outputSchema: z.object({ id: z.string(), webLink: z.string(), subject: z.string() }),
|
|
79
|
+
execute: async (input, auth) => {
|
|
80
|
+
const { subject, body, startDateTime, endDateTime, timeZone, location, attendees } = input;
|
|
81
|
+
const event = {
|
|
82
|
+
subject,
|
|
83
|
+
body: body ? { contentType: "HTML", content: body } : void 0,
|
|
84
|
+
start: { dateTime: startDateTime, timeZone },
|
|
85
|
+
end: { dateTime: endDateTime, timeZone }
|
|
86
|
+
};
|
|
87
|
+
if (location) event.location = { displayName: location };
|
|
88
|
+
if (attendees) {
|
|
89
|
+
event.attendees = attendees.map((email) => ({
|
|
90
|
+
emailAddress: { address: email },
|
|
91
|
+
type: "required"
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
const response = await this.makeRequest(
|
|
95
|
+
"https://graph.microsoft.com/v1.0/me/events",
|
|
96
|
+
{ method: "POST", body: JSON.stringify(event), auth }
|
|
97
|
+
);
|
|
98
|
+
return response.json();
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
createTeamsMessage: {
|
|
102
|
+
name: "Send Teams Message",
|
|
103
|
+
description: "Send a message to a Microsoft Teams channel",
|
|
104
|
+
inputSchema: z.object({
|
|
105
|
+
teamId: z.string(),
|
|
106
|
+
channelId: z.string(),
|
|
107
|
+
content: z.string(),
|
|
108
|
+
contentType: z.enum(["text", "html"]).optional().default("text")
|
|
109
|
+
}),
|
|
110
|
+
outputSchema: z.object({ id: z.string(), createdDateTime: z.string() }),
|
|
111
|
+
execute: async (input, auth) => {
|
|
112
|
+
const { teamId, channelId, content, contentType } = input;
|
|
113
|
+
const response = await this.makeRequest(
|
|
114
|
+
`https://graph.microsoft.com/v1.0/teams/${teamId}/channels/${channelId}/messages`,
|
|
115
|
+
{
|
|
116
|
+
method: "POST",
|
|
117
|
+
body: JSON.stringify({ body: { contentType, content } }),
|
|
118
|
+
auth
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
return response.json();
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
listOneDriveFiles: {
|
|
125
|
+
name: "List OneDrive Files",
|
|
126
|
+
description: "List files in OneDrive",
|
|
127
|
+
inputSchema: z.object({
|
|
128
|
+
path: z.string().optional().default("/"),
|
|
129
|
+
top: z.number().optional().default(20)
|
|
130
|
+
}),
|
|
131
|
+
outputSchema: z.object({ value: z.array(z.object({ id: z.string(), name: z.string(), size: z.number() })) }),
|
|
132
|
+
execute: async (input, auth) => {
|
|
133
|
+
const { path, top } = input;
|
|
134
|
+
const endpoint = path === "/" ? `https://graph.microsoft.com/v1.0/me/drive/root/children?$top=${top}` : `https://graph.microsoft.com/v1.0/me/drive/root:/${encodeURIComponent(path)}:/children?$top=${top}`;
|
|
135
|
+
const response = await this.makeRequest(endpoint, { auth });
|
|
136
|
+
return response.json();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
triggers = {
|
|
141
|
+
onNewEmail: {
|
|
142
|
+
name: "New Email Received",
|
|
143
|
+
description: "Triggered when a new email is received in Outlook",
|
|
144
|
+
outputSchema: z.object({ messageId: z.string(), from: z.string(), subject: z.string(), preview: z.string() }),
|
|
145
|
+
subscribe: async (_config, _auth) => {
|
|
146
|
+
},
|
|
147
|
+
unsubscribe: async (_config, _auth) => {
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
onNewTeamsMessage: {
|
|
151
|
+
name: "New Teams Message",
|
|
152
|
+
description: "Triggered when a new message is posted in a Teams channel",
|
|
153
|
+
outputSchema: z.object({ messageId: z.string(), teamId: z.string(), channelId: z.string(), content: z.string(), from: z.string() }),
|
|
154
|
+
subscribe: async (_config, _auth) => {
|
|
155
|
+
},
|
|
156
|
+
unsubscribe: async (_config, _auth) => {
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
export {
|
|
162
|
+
Microsoft365Adapter
|
|
163
|
+
};
|
|
164
|
+
//# sourceMappingURL=microsoft365-UCBKJHNX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/adapters/adapters/microsoft365.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { BaseAdapter } from \"../base-adapter\";\nimport type { AuthResult, ActionDefinition, TriggerDefinition, TriggerConfig } from \"../types\";\n\nexport class Microsoft365Adapter extends BaseAdapter {\n metadata = {\n name: \"Microsoft365\",\n slug: \"microsoft365\",\n displayName: \"Microsoft 365\",\n description: \"Send emails, manage calendar, post Teams messages, and access OneDrive files with Microsoft 365\",\n category: \"productivity\",\n authType: \"oauth2\" as const,\n };\n\n async authenticate(credentials: Record<string, string>): Promise<AuthResult> {\n return {\n accessToken: credentials.accessToken || \"\",\n refreshToken: credentials.refreshToken,\n metadata: {\n tenantId: credentials.tenantId,\n email: credentials.email,\n },\n };\n }\n\n async refreshAuth(auth: AuthResult): Promise<AuthResult> {\n return {\n ...auth,\n accessToken: `refreshed_${auth.accessToken}`,\n expiresAt: new Date(Date.now() + 3600 * 1000),\n };\n }\n\n actions: Record<string, ActionDefinition> = {\n sendEmail: {\n name: \"Send Email\",\n description: \"Send an email via Microsoft Outlook\",\n inputSchema: z.object({\n to: z.string().email(),\n subject: z.string(),\n body: z.string(),\n cc: z.string().email().optional(),\n importance: z.enum([\"low\", \"normal\", \"high\"]).optional().default(\"normal\"),\n }),\n outputSchema: z.object({ id: z.string(), status: z.string() }),\n execute: async (input: unknown, auth: AuthResult) => {\n const { to, subject, body, cc, importance } = input as {\n to: string; subject: string; body: string; cc?: string; importance: string;\n };\n const message: Record<string, unknown> = {\n message: {\n subject,\n body: { contentType: \"HTML\", content: body },\n toRecipients: [{ emailAddress: { address: to } }],\n importance,\n },\n };\n if (cc) {\n (message.message as Record<string, unknown>).ccRecipients = [{ emailAddress: { address: cc } }];\n }\n const response = await this.makeRequest(\n \"https://graph.microsoft.com/v1.0/me/sendMail\",\n { method: \"POST\", body: JSON.stringify(message), auth }\n );\n return { id: response.headers.get(\"request-id\") || \"\", status: \"sent\" };\n },\n },\n createEvent: {\n name: \"Create Calendar Event\",\n description: \"Create a new event in Outlook Calendar\",\n inputSchema: z.object({\n subject: z.string(),\n body: z.string().optional(),\n startDateTime: z.string(),\n endDateTime: z.string(),\n timeZone: z.string().optional().default(\"UTC\"),\n location: z.string().optional(),\n attendees: z.array(z.string().email()).optional(),\n }),\n outputSchema: z.object({ id: z.string(), webLink: z.string(), subject: z.string() }),\n execute: async (input: unknown, auth: AuthResult) => {\n const { subject, body, startDateTime, endDateTime, timeZone, location, attendees } = input as {\n subject: string; body?: string; startDateTime: string; endDateTime: string; timeZone: string; location?: string; attendees?: string[];\n };\n const event: Record<string, unknown> = {\n subject,\n body: body ? { contentType: \"HTML\", content: body } : undefined,\n start: { dateTime: startDateTime, timeZone },\n end: { dateTime: endDateTime, timeZone },\n };\n if (location) event.location = { displayName: location };\n if (attendees) {\n event.attendees = attendees.map((email) => ({\n emailAddress: { address: email },\n type: \"required\",\n }));\n }\n const response = await this.makeRequest(\n \"https://graph.microsoft.com/v1.0/me/events\",\n { method: \"POST\", body: JSON.stringify(event), auth }\n );\n return response.json();\n },\n },\n createTeamsMessage: {\n name: \"Send Teams Message\",\n description: \"Send a message to a Microsoft Teams channel\",\n inputSchema: z.object({\n teamId: z.string(),\n channelId: z.string(),\n content: z.string(),\n contentType: z.enum([\"text\", \"html\"]).optional().default(\"text\"),\n }),\n outputSchema: z.object({ id: z.string(), createdDateTime: z.string() }),\n execute: async (input: unknown, auth: AuthResult) => {\n const { teamId, channelId, content, contentType } = input as {\n teamId: string; channelId: string; content: string; contentType: string;\n };\n const response = await this.makeRequest(\n `https://graph.microsoft.com/v1.0/teams/${teamId}/channels/${channelId}/messages`,\n {\n method: \"POST\",\n body: JSON.stringify({ body: { contentType, content } }),\n auth,\n }\n );\n return response.json();\n },\n },\n listOneDriveFiles: {\n name: \"List OneDrive Files\",\n description: \"List files in OneDrive\",\n inputSchema: z.object({\n path: z.string().optional().default(\"/\"),\n top: z.number().optional().default(20),\n }),\n outputSchema: z.object({ value: z.array(z.object({ id: z.string(), name: z.string(), size: z.number() })) }),\n execute: async (input: unknown, auth: AuthResult) => {\n const { path, top } = input as { path: string; top: number };\n const endpoint = path === \"/\"\n ? `https://graph.microsoft.com/v1.0/me/drive/root/children?$top=${top}`\n : `https://graph.microsoft.com/v1.0/me/drive/root:/${encodeURIComponent(path)}:/children?$top=${top}`;\n const response = await this.makeRequest(endpoint, { auth });\n return response.json();\n },\n },\n };\n\n triggers: Record<string, TriggerDefinition> = {\n onNewEmail: {\n name: \"New Email Received\",\n description: \"Triggered when a new email is received in Outlook\",\n outputSchema: z.object({ messageId: z.string(), from: z.string(), subject: z.string(), preview: z.string() }),\n subscribe: async (_config: TriggerConfig, _auth: AuthResult) => {},\n unsubscribe: async (_config: TriggerConfig, _auth: AuthResult) => {},\n },\n onNewTeamsMessage: {\n name: \"New Teams Message\",\n description: \"Triggered when a new message is posted in a Teams channel\",\n outputSchema: z.object({ messageId: z.string(), teamId: z.string(), channelId: z.string(), content: z.string(), from: z.string() }),\n subscribe: async (_config: TriggerConfig, _auth: AuthResult) => {},\n unsubscribe: async (_config: TriggerConfig, _auth: AuthResult) => {},\n },\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
extractStructuredData,
|
|
3
|
+
ocrPdf,
|
|
4
|
+
ocrSimple,
|
|
5
|
+
ocrWithTesseract,
|
|
6
|
+
ocrWithVision,
|
|
7
|
+
ocr_default,
|
|
8
|
+
performOCR
|
|
9
|
+
} from "./chunk-EVE7MIIY.js";
|
|
10
|
+
import "./chunk-CQ4JURG7.js";
|
|
11
|
+
import "./chunk-ZLZKF2PM.js";
|
|
12
|
+
import "./chunk-PLDDJCW6.js";
|
|
13
|
+
export {
|
|
14
|
+
ocr_default as default,
|
|
15
|
+
extractStructuredData,
|
|
16
|
+
ocrPdf,
|
|
17
|
+
ocrSimple,
|
|
18
|
+
ocrWithTesseract,
|
|
19
|
+
ocrWithVision,
|
|
20
|
+
performOCR
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=ocr-AC7NPX33.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import {
|
|
2
|
+
appendToPage,
|
|
3
|
+
archivePage,
|
|
4
|
+
createPage,
|
|
5
|
+
deletePage,
|
|
6
|
+
duplicatePage,
|
|
7
|
+
getPage,
|
|
8
|
+
replacePageContent,
|
|
9
|
+
restorePage,
|
|
10
|
+
updatePage
|
|
11
|
+
} from "./chunk-MQJ2ECQT.js";
|
|
12
|
+
import "./chunk-TVEWKIK3.js";
|
|
13
|
+
import "./chunk-VRD5CYRL.js";
|
|
14
|
+
import "./chunk-PLDDJCW6.js";
|
|
15
|
+
export {
|
|
16
|
+
appendToPage,
|
|
17
|
+
archivePage,
|
|
18
|
+
createPage,
|
|
19
|
+
deletePage,
|
|
20
|
+
duplicatePage,
|
|
21
|
+
getPage,
|
|
22
|
+
replacePageContent,
|
|
23
|
+
restorePage,
|
|
24
|
+
updatePage
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=pages-MI523RB7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {
|
|
2
|
+
pairingManager
|
|
3
|
+
} from "./chunk-3E2PSU2C.js";
|
|
4
|
+
import "./chunk-PLDDJCW6.js";
|
|
5
|
+
|
|
6
|
+
// src/commands/pair.ts
|
|
7
|
+
function showPairingInfo() {
|
|
8
|
+
const code = pairingManager.getActiveCode() || pairingManager.generateCode();
|
|
9
|
+
const stats = pairingManager.getStats();
|
|
10
|
+
console.log("\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
|
|
11
|
+
console.log("\u2551 DEVICE PAIRING \u2551");
|
|
12
|
+
console.log("\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563");
|
|
13
|
+
console.log(`\u2551 Code: ${code} \u2551`);
|
|
14
|
+
console.log(`\u2551 Devices: ${String(stats.deviceCount).padEnd(17)}\u2551`);
|
|
15
|
+
console.log("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n");
|
|
16
|
+
}
|
|
17
|
+
function regeneratePairingCode() {
|
|
18
|
+
return pairingManager.generateCode();
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
regeneratePairingCode,
|
|
22
|
+
showPairingInfo
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=pair-JDFTERIK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/pair.ts"],"sourcesContent":["/**\n * CLI command to display/regenerate pairing code\n */\nimport { pairingManager } from \"../core/security/pairing\";\n\nexport function showPairingInfo(): void {\n const code = pairingManager.getActiveCode() || pairingManager.generateCode();\n const stats = pairingManager.getStats();\n\n console.log(\"\\n╔══════════════════════════════╗\");\n console.log(\"║ DEVICE PAIRING ║\");\n console.log(\"╠══════════════════════════════╣\");\n console.log(`║ Code: ${code} ║`);\n console.log(`║ Devices: ${String(stats.deviceCount).padEnd(17)}║`);\n console.log(\"╚══════════════════════════════╝\\n\");\n}\n\nexport function regeneratePairingCode(): string {\n return pairingManager.generateCode();\n}\n"],"mappings":";;;;;;AAKO,SAAS,kBAAwB;AACtC,QAAM,OAAO,eAAe,cAAc,KAAK,eAAe,aAAa;AAC3E,QAAM,QAAQ,eAAe,SAAS;AAEtC,UAAQ,IAAI,oMAAoC;AAChD,UAAQ,IAAI,4CAAkC;AAC9C,UAAQ,IAAI,kMAAkC;AAC9C,UAAQ,IAAI,iBAAY,IAAI,wBAAmB;AAC/C,UAAQ,IAAI,oBAAe,OAAO,MAAM,WAAW,EAAE,OAAO,EAAE,CAAC,QAAG;AAClE,UAAQ,IAAI,oMAAoC;AAClD;AAEO,SAAS,wBAAgC;AAC9C,SAAO,eAAe,aAAa;AACrC;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
generatePDF,
|
|
3
|
+
generatePDFFromHTML,
|
|
4
|
+
generatePDFFromMarkdown,
|
|
5
|
+
generatePDFNative,
|
|
6
|
+
pdf_default
|
|
7
|
+
} from "./chunk-RZ4YESBG.js";
|
|
8
|
+
import "./chunk-CQ4JURG7.js";
|
|
9
|
+
import "./chunk-PLDDJCW6.js";
|
|
10
|
+
export {
|
|
11
|
+
pdf_default as default,
|
|
12
|
+
generatePDF,
|
|
13
|
+
generatePDFFromHTML,
|
|
14
|
+
generatePDFFromMarkdown,
|
|
15
|
+
generatePDFNative
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=pdf-ALQVOEJR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|