@cogitator-ai/channels 0.15.12 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +129 -23
  2. package/dist/assistant-config.d.ts +78 -0
  3. package/dist/assistant-config.d.ts.map +1 -1
  4. package/dist/assistant-config.js +127 -0
  5. package/dist/assistant-config.js.map +1 -1
  6. package/dist/channels/bluesky/channel.d.ts.map +1 -1
  7. package/dist/channels/bluesky/channel.js +1 -0
  8. package/dist/channels/bluesky/channel.js.map +1 -1
  9. package/dist/channels/email/address.d.ts +44 -0
  10. package/dist/channels/email/address.d.ts.map +1 -0
  11. package/dist/channels/email/address.js +211 -0
  12. package/dist/channels/email/address.js.map +1 -0
  13. package/dist/channels/email/auth.d.ts +59 -0
  14. package/dist/channels/email/auth.d.ts.map +1 -0
  15. package/dist/channels/email/auth.js +212 -0
  16. package/dist/channels/email/auth.js.map +1 -0
  17. package/dist/channels/email/channel.d.ts +256 -0
  18. package/dist/channels/email/channel.d.ts.map +1 -0
  19. package/dist/channels/email/channel.js +701 -0
  20. package/dist/channels/email/channel.js.map +1 -0
  21. package/dist/channels/email/errors.d.ts +11 -0
  22. package/dist/channels/email/errors.d.ts.map +1 -0
  23. package/dist/channels/email/errors.js +13 -0
  24. package/dist/channels/email/errors.js.map +1 -0
  25. package/dist/channels/email/imap.d.ts +125 -0
  26. package/dist/channels/email/imap.d.ts.map +1 -0
  27. package/dist/channels/email/imap.js +309 -0
  28. package/dist/channels/email/imap.js.map +1 -0
  29. package/dist/channels/email/index.d.ts +7 -0
  30. package/dist/channels/email/index.d.ts.map +1 -0
  31. package/dist/channels/email/index.js +3 -0
  32. package/dist/channels/email/index.js.map +1 -0
  33. package/dist/channels/email/mime.d.ts +71 -0
  34. package/dist/channels/email/mime.d.ts.map +1 -0
  35. package/dist/channels/email/mime.js +83 -0
  36. package/dist/channels/email/mime.js.map +1 -0
  37. package/dist/channels/email/multipart.d.ts +28 -0
  38. package/dist/channels/email/multipart.d.ts.map +1 -0
  39. package/dist/channels/email/multipart.js +102 -0
  40. package/dist/channels/email/multipart.js.map +1 -0
  41. package/dist/channels/email/providers.d.ts +49 -0
  42. package/dist/channels/email/providers.d.ts.map +1 -0
  43. package/dist/channels/email/providers.js +292 -0
  44. package/dist/channels/email/providers.js.map +1 -0
  45. package/dist/channels/email/reply.d.ts +9 -0
  46. package/dist/channels/email/reply.d.ts.map +1 -0
  47. package/dist/channels/email/reply.js +122 -0
  48. package/dist/channels/email/reply.js.map +1 -0
  49. package/dist/channels/github/channel.d.ts +222 -0
  50. package/dist/channels/github/channel.d.ts.map +1 -0
  51. package/dist/channels/github/channel.js +736 -0
  52. package/dist/channels/github/channel.js.map +1 -0
  53. package/dist/channels/github/client.d.ts +45 -0
  54. package/dist/channels/github/client.d.ts.map +1 -0
  55. package/dist/channels/github/client.js +119 -0
  56. package/dist/channels/github/client.js.map +1 -0
  57. package/dist/channels/github/events.d.ts +49 -0
  58. package/dist/channels/github/events.d.ts.map +1 -0
  59. package/dist/channels/github/events.js +147 -0
  60. package/dist/channels/github/events.js.map +1 -0
  61. package/dist/channels/github/index.d.ts +4 -0
  62. package/dist/channels/github/index.d.ts.map +1 -0
  63. package/dist/channels/github/index.js +4 -0
  64. package/dist/channels/github/index.js.map +1 -0
  65. package/dist/channels/slack.d.ts.map +1 -1
  66. package/dist/channels/slack.js +2 -1
  67. package/dist/channels/slack.js.map +1 -1
  68. package/dist/channels/telegram.d.ts.map +1 -1
  69. package/dist/channels/telegram.js +14 -6
  70. package/dist/channels/telegram.js.map +1 -1
  71. package/dist/channels/threads/channel.d.ts.map +1 -1
  72. package/dist/channels/threads/channel.js +1 -0
  73. package/dist/channels/threads/channel.js.map +1 -1
  74. package/dist/channels/webchat.d.ts +8 -0
  75. package/dist/channels/webchat.d.ts.map +1 -1
  76. package/dist/channels/webchat.js +54 -15
  77. package/dist/channels/webchat.js.map +1 -1
  78. package/dist/channels/whatsapp.d.ts.map +1 -1
  79. package/dist/channels/whatsapp.js +13 -0
  80. package/dist/channels/whatsapp.js.map +1 -1
  81. package/dist/formatters/html.d.ts +16 -0
  82. package/dist/formatters/html.d.ts.map +1 -0
  83. package/dist/formatters/html.js +535 -0
  84. package/dist/formatters/html.js.map +1 -0
  85. package/dist/formatters/markdown.d.ts.map +1 -1
  86. package/dist/formatters/markdown.js +2 -0
  87. package/dist/formatters/markdown.js.map +1 -1
  88. package/dist/gateway.d.ts +91 -1
  89. package/dist/gateway.d.ts.map +1 -1
  90. package/dist/gateway.js +345 -46
  91. package/dist/gateway.js.map +1 -1
  92. package/dist/heartbeat.d.ts +5 -1
  93. package/dist/heartbeat.d.ts.map +1 -1
  94. package/dist/heartbeat.js +13 -3
  95. package/dist/heartbeat.js.map +1 -1
  96. package/dist/inbound-debounce.d.ts +4 -1
  97. package/dist/inbound-debounce.d.ts.map +1 -1
  98. package/dist/inbound-debounce.js +4 -2
  99. package/dist/inbound-debounce.js.map +1 -1
  100. package/dist/index.d.ts +8 -2
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +6 -2
  103. package/dist/index.js.map +1 -1
  104. package/dist/merge-messages.d.ts +3 -2
  105. package/dist/merge-messages.d.ts.map +1 -1
  106. package/dist/merge-messages.js +4 -2
  107. package/dist/merge-messages.js.map +1 -1
  108. package/dist/message-queue.d.ts +14 -4
  109. package/dist/message-queue.d.ts.map +1 -1
  110. package/dist/message-queue.js +36 -35
  111. package/dist/message-queue.js.map +1 -1
  112. package/dist/runtime-builder.d.ts +9 -0
  113. package/dist/runtime-builder.d.ts.map +1 -1
  114. package/dist/runtime-builder.js +149 -5
  115. package/dist/runtime-builder.js.map +1 -1
  116. package/dist/thread-key.d.ts +50 -0
  117. package/dist/thread-key.d.ts.map +1 -0
  118. package/dist/thread-key.js +82 -0
  119. package/dist/thread-key.js.map +1 -0
  120. package/package.json +26 -8
@@ -0,0 +1,82 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * The conversation of a message inside its channel: its `conversationId` when the channel names
4
+ * one, otherwise its chat (`channelId`) and, when it has one, the topic inside it (`topicId`).
5
+ */
6
+ export function conversationOf(msg) {
7
+ if (msg.conversationId)
8
+ return msg.conversationId;
9
+ return msg.topicId ? `${msg.channelId}:${msg.topicId}` : msg.channelId;
10
+ }
11
+ /**
12
+ * The gateway's default thread key: one thread per user per conversation,
13
+ * `channelType:conversation:userId` (see {@link conversationOf}). A user's private chat, each
14
+ * group chat and each forum topic or Slack thread they write in is a thread of its own.
15
+ */
16
+ export function defaultThreadKey(msg) {
17
+ return `${msg.channelType}:${conversationOf(msg)}:${msg.userId}`;
18
+ }
19
+ /**
20
+ * The thread key of earlier versions: one thread per user per channel type,
21
+ * `channelType:userId`, whatever chat or topic the message comes from. Pass it as
22
+ * `session.threadKey` to keep the threads a gateway stored before the default changed.
23
+ */
24
+ export function legacyThreadKey(msg) {
25
+ return `${msg.channelType}:${msg.userId}`;
26
+ }
27
+ /** The session metadata key that holds a user's conversations, most recent first */
28
+ export const CONVERSATIONS_KEY = 'conversations';
29
+ /** Conversations kept per session, past it the least recently used one goes */
30
+ export const MAX_STORED_CONVERSATIONS = 50;
31
+ const StoredConversationSchema = z.object({
32
+ channelId: z.string().min(1),
33
+ topicId: z.string().min(1).optional(),
34
+ conversationId: z.string().min(1).optional(),
35
+ });
36
+ /**
37
+ * The conversations stored in a session's metadata, skipping entries that are not one. Metadata
38
+ * a session store left out reads as none.
39
+ */
40
+ export function readConversations(metadata) {
41
+ const stored = metadata?.[CONVERSATIONS_KEY];
42
+ if (!Array.isArray(stored))
43
+ return [];
44
+ const conversations = [];
45
+ for (const entry of stored) {
46
+ const parsed = StoredConversationSchema.safeParse(entry);
47
+ if (parsed.success)
48
+ conversations.push(parsed.data);
49
+ }
50
+ return conversations;
51
+ }
52
+ function toStored(msg) {
53
+ return {
54
+ channelId: msg.channelId,
55
+ ...(msg.topicId && { topicId: msg.topicId }),
56
+ ...(msg.conversationId && { conversationId: msg.conversationId }),
57
+ };
58
+ }
59
+ function sameEntry(a, b) {
60
+ return (a.channelId === b.channelId && a.topicId === b.topicId && a.conversationId === b.conversationId);
61
+ }
62
+ /**
63
+ * The conversations with the message's own moved to the front, or `null` when it is already
64
+ * there as it is, so nothing needs to be written. On Bluesky and Threads the entry keeps the
65
+ * conversation's latest post as its `channelId`.
66
+ */
67
+ export function rememberConversation(conversations, msg) {
68
+ const entry = toStored(msg);
69
+ const head = conversations[0];
70
+ if (head && sameEntry(head, entry))
71
+ return null;
72
+ const key = conversationOf(entry);
73
+ return [entry, ...conversations.filter((c) => conversationOf(c) !== key)].slice(0, MAX_STORED_CONVERSATIONS);
74
+ }
75
+ /**
76
+ * The stored conversation a message sent to `channelId` without a topic most likely continues:
77
+ * the most recent one in that chat.
78
+ */
79
+ export function findConversation(conversations, channelId) {
80
+ return conversations.find((c) => c.channelId === channelId);
81
+ }
82
+ //# sourceMappingURL=thread-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-key.js","sourceRoot":"","sources":["../src/thread-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAoD;IACjF,IAAI,GAAG,CAAC,cAAc;QAAE,OAAO,GAAG,CAAC,cAAc,CAAC;IAClD,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAoB;IACnD,OAAO,GAAG,GAAG,CAAC,WAAW,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAmD;IACjF,OAAO,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;AAC5C,CAAC;AAYD,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEjD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA6C;IAE7C,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,aAAa,GAAyB,EAAE,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,OAAO;YAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAoD;IACpE,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC5C,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,CAAqB,EAAE,CAAqB;IAC7D,OAAO,CACL,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,cAAc,CAChG,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,aAA4C,EAC5C,GAAoD;IAEpD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAC7E,CAAC,EACD,wBAAwB,CACzB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,aAA4C,EAC5C,SAAiB;IAEjB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;AAC9D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogitator-ai/channels",
3
- "version": "0.15.12",
3
+ "version": "0.17.0",
4
4
  "description": "Messaging channel connectors and Gateway for Cogitator AI agents",
5
5
  "keywords": [
6
6
  "cogitator",
@@ -17,6 +17,8 @@
17
17
  "streaming",
18
18
  "bluesky",
19
19
  "threads",
20
+ "github",
21
+ "email",
20
22
  "social"
21
23
  ],
22
24
  "type": "module",
@@ -34,9 +36,9 @@
34
36
  "dist"
35
37
  ],
36
38
  "dependencies": {
37
- "@cogitator-ai/core": "0.59.0",
38
- "@cogitator-ai/memory": "0.25.0",
39
- "@cogitator-ai/types": "0.64.0",
39
+ "@cogitator-ai/core": "0.60.1",
40
+ "@cogitator-ai/memory": "0.25.2",
41
+ "@cogitator-ai/types": "0.66.0",
40
42
  "cron-parser": "^5.10.1",
41
43
  "nanoid": "^6.0.1",
42
44
  "zod": "^4.6.5"
@@ -44,18 +46,22 @@
44
46
  "devDependencies": {
45
47
  "@atproto/api": "0.24.0",
46
48
  "@types/node": "^22.20.4",
49
+ "@types/nodemailer": "^8.0.2",
47
50
  "@types/ws": "^8.18.2",
48
51
  "@whiskeysockets/baileys": "7.0.0-rc14",
49
52
  "better-sqlite3": "^13.0.3",
53
+ "imapflow": "^2.7.0",
54
+ "nodemailer": "^10.0.13",
55
+ "postal-mime": "^4.1.2",
50
56
  "typescript": "^6.0.3",
51
57
  "vitest": "^5.0.3",
52
58
  "ws": "^8.22.0"
53
59
  },
54
60
  "peerDependencies": {
55
- "@cogitator-ai/browser": ">=0.4.40",
56
- "@cogitator-ai/mcp": "^19.5.22",
61
+ "@cogitator-ai/browser": ">=0.4.42",
62
+ "@cogitator-ai/mcp": "^19.5.24",
57
63
  "@cogitator-ai/models": "^18.5.0",
58
- "@cogitator-ai/rag": ">=0.8.14",
64
+ "@cogitator-ai/rag": ">=0.8.16",
59
65
  "@huggingface/transformers": ">=3.0.0",
60
66
  "@slack/bolt": ">=3.0.0",
61
67
  "@whiskeysockets/baileys": "^6.0.0 || >=7.0.0-0",
@@ -66,7 +72,10 @@
66
72
  "pg": ">=8.0.0",
67
73
  "qrcode-terminal": ">=0.12.0",
68
74
  "ws": ">=8.0.0",
69
- "@atproto/api": ">=0.24.0"
75
+ "@atproto/api": ">=0.24.0",
76
+ "imapflow": ">=2.0.0",
77
+ "nodemailer": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0",
78
+ "postal-mime": ">=4.0.0"
70
79
  },
71
80
  "peerDependenciesMeta": {
72
81
  "grammy": {
@@ -113,6 +122,15 @@
113
122
  },
114
123
  "@atproto/api": {
115
124
  "optional": true
125
+ },
126
+ "imapflow": {
127
+ "optional": true
128
+ },
129
+ "nodemailer": {
130
+ "optional": true
131
+ },
132
+ "postal-mime": {
133
+ "optional": true
116
134
  }
117
135
  },
118
136
  "engines": {