@cogitator-ai/channels 0.2.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 (138) hide show
  1. package/README.md +349 -0
  2. package/dist/assistant-config.d.ts +92 -0
  3. package/dist/assistant-config.d.ts.map +1 -0
  4. package/dist/assistant-config.js +89 -0
  5. package/dist/assistant-config.js.map +1 -0
  6. package/dist/capabilities.d.ts +14 -0
  7. package/dist/capabilities.d.ts.map +1 -0
  8. package/dist/capabilities.js +28 -0
  9. package/dist/capabilities.js.map +1 -0
  10. package/dist/channels/discord.d.ts +26 -0
  11. package/dist/channels/discord.d.ts.map +1 -0
  12. package/dist/channels/discord.js +153 -0
  13. package/dist/channels/discord.js.map +1 -0
  14. package/dist/channels/slack.d.ts +23 -0
  15. package/dist/channels/slack.d.ts.map +1 -0
  16. package/dist/channels/slack.js +89 -0
  17. package/dist/channels/slack.js.map +1 -0
  18. package/dist/channels/telegram.d.ts +30 -0
  19. package/dist/channels/telegram.d.ts.map +1 -0
  20. package/dist/channels/telegram.js +236 -0
  21. package/dist/channels/telegram.js.map +1 -0
  22. package/dist/channels/terminal.d.ts +30 -0
  23. package/dist/channels/terminal.d.ts.map +1 -0
  24. package/dist/channels/terminal.js +110 -0
  25. package/dist/channels/terminal.js.map +1 -0
  26. package/dist/channels/webchat.d.ts +24 -0
  27. package/dist/channels/webchat.d.ts.map +1 -0
  28. package/dist/channels/webchat.js +106 -0
  29. package/dist/channels/webchat.js.map +1 -0
  30. package/dist/channels/whatsapp.d.ts +28 -0
  31. package/dist/channels/whatsapp.d.ts.map +1 -0
  32. package/dist/channels/whatsapp.js +117 -0
  33. package/dist/channels/whatsapp.js.map +1 -0
  34. package/dist/envelope.d.ts +4 -0
  35. package/dist/envelope.d.ts.map +1 -0
  36. package/dist/envelope.js +64 -0
  37. package/dist/envelope.js.map +1 -0
  38. package/dist/formatters/discord-chunker.d.ts +6 -0
  39. package/dist/formatters/discord-chunker.d.ts.map +1 -0
  40. package/dist/formatters/discord-chunker.js +169 -0
  41. package/dist/formatters/discord-chunker.js.map +1 -0
  42. package/dist/formatters/markdown.d.ts +5 -0
  43. package/dist/formatters/markdown.d.ts.map +1 -0
  44. package/dist/formatters/markdown.js +59 -0
  45. package/dist/formatters/markdown.js.map +1 -0
  46. package/dist/formatters/whatsapp-markdown.d.ts +2 -0
  47. package/dist/formatters/whatsapp-markdown.d.ts.map +1 -0
  48. package/dist/formatters/whatsapp-markdown.js +26 -0
  49. package/dist/formatters/whatsapp-markdown.js.map +1 -0
  50. package/dist/gateway.d.ts +38 -0
  51. package/dist/gateway.d.ts.map +1 -0
  52. package/dist/gateway.js +347 -0
  53. package/dist/gateway.js.map +1 -0
  54. package/dist/heartbeat.d.ts +28 -0
  55. package/dist/heartbeat.d.ts.map +1 -0
  56. package/dist/heartbeat.js +143 -0
  57. package/dist/heartbeat.js.map +1 -0
  58. package/dist/hooks.d.ts +4 -0
  59. package/dist/hooks.d.ts.map +1 -0
  60. package/dist/hooks.js +30 -0
  61. package/dist/hooks.js.map +1 -0
  62. package/dist/inbound-debounce.d.ts +13 -0
  63. package/dist/inbound-debounce.d.ts.map +1 -0
  64. package/dist/inbound-debounce.js +61 -0
  65. package/dist/inbound-debounce.js.map +1 -0
  66. package/dist/index.d.ts +54 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +33 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/media/deepgram-stt.d.ts +14 -0
  71. package/dist/media/deepgram-stt.d.ts.map +1 -0
  72. package/dist/media/deepgram-stt.js +30 -0
  73. package/dist/media/deepgram-stt.js.map +1 -0
  74. package/dist/media/index.d.ts +7 -0
  75. package/dist/media/index.d.ts.map +1 -0
  76. package/dist/media/index.js +5 -0
  77. package/dist/media/index.js.map +1 -0
  78. package/dist/media/media-processor.d.ts +20 -0
  79. package/dist/media/media-processor.d.ts.map +1 -0
  80. package/dist/media/media-processor.js +80 -0
  81. package/dist/media/media-processor.js.map +1 -0
  82. package/dist/media/whisper-api.d.ts +22 -0
  83. package/dist/media/whisper-api.d.ts.map +1 -0
  84. package/dist/media/whisper-api.js +53 -0
  85. package/dist/media/whisper-api.js.map +1 -0
  86. package/dist/media/whisper-local.d.ts +16 -0
  87. package/dist/media/whisper-local.d.ts.map +1 -0
  88. package/dist/media/whisper-local.js +155 -0
  89. package/dist/media/whisper-local.js.map +1 -0
  90. package/dist/media/whisper-tool.d.ts +4 -0
  91. package/dist/media/whisper-tool.d.ts.map +1 -0
  92. package/dist/media/whisper-tool.js +19 -0
  93. package/dist/media/whisper-tool.js.map +1 -0
  94. package/dist/message-queue.d.ts +17 -0
  95. package/dist/message-queue.d.ts.map +1 -0
  96. package/dist/message-queue.js +115 -0
  97. package/dist/message-queue.js.map +1 -0
  98. package/dist/middleware/auto-extract.d.ts +36 -0
  99. package/dist/middleware/auto-extract.d.ts.map +1 -0
  100. package/dist/middleware/auto-extract.js +73 -0
  101. package/dist/middleware/auto-extract.js.map +1 -0
  102. package/dist/middleware/dm-policy.d.ts +39 -0
  103. package/dist/middleware/dm-policy.d.ts.map +1 -0
  104. package/dist/middleware/dm-policy.js +177 -0
  105. package/dist/middleware/dm-policy.js.map +1 -0
  106. package/dist/middleware/owner-commands.d.ts +25 -0
  107. package/dist/middleware/owner-commands.d.ts.map +1 -0
  108. package/dist/middleware/owner-commands.js +131 -0
  109. package/dist/middleware/owner-commands.js.map +1 -0
  110. package/dist/middleware/pairing.d.ts +20 -0
  111. package/dist/middleware/pairing.d.ts.map +1 -0
  112. package/dist/middleware/pairing.js +70 -0
  113. package/dist/middleware/pairing.js.map +1 -0
  114. package/dist/middleware/rate-limit.d.ts +14 -0
  115. package/dist/middleware/rate-limit.d.ts.map +1 -0
  116. package/dist/middleware/rate-limit.js +31 -0
  117. package/dist/middleware/rate-limit.js.map +1 -0
  118. package/dist/runtime-builder.d.ts +42 -0
  119. package/dist/runtime-builder.d.ts.map +1 -0
  120. package/dist/runtime-builder.js +607 -0
  121. package/dist/runtime-builder.js.map +1 -0
  122. package/dist/simple-timer-store.d.ts +28 -0
  123. package/dist/simple-timer-store.d.ts.map +1 -0
  124. package/dist/simple-timer-store.js +129 -0
  125. package/dist/simple-timer-store.js.map +1 -0
  126. package/dist/status-reactions.d.ts +22 -0
  127. package/dist/status-reactions.d.ts.map +1 -0
  128. package/dist/status-reactions.js +86 -0
  129. package/dist/status-reactions.js.map +1 -0
  130. package/dist/stream-buffer.d.ts +31 -0
  131. package/dist/stream-buffer.d.ts.map +1 -0
  132. package/dist/stream-buffer.js +170 -0
  133. package/dist/stream-buffer.js.map +1 -0
  134. package/dist/tools/self-config.d.ts +9 -0
  135. package/dist/tools/self-config.d.ts.map +1 -0
  136. package/dist/tools/self-config.js +122 -0
  137. package/dist/tools/self-config.js.map +1 -0
  138. package/package.json +102 -0
@@ -0,0 +1,169 @@
1
+ const DEFAULT_MAX_CHARS = 2000;
2
+ const DEFAULT_MAX_LINES = 17;
3
+ const FENCE_RE = /^( {0,3})(`{3,}|~{3,})(.*)$/;
4
+ function countLines(text) {
5
+ if (!text)
6
+ return 0;
7
+ return text.split('\n').length;
8
+ }
9
+ function parseFenceLine(line) {
10
+ const match = FENCE_RE.exec(line);
11
+ if (!match)
12
+ return null;
13
+ const indent = match[1] ?? '';
14
+ const marker = match[2] ?? '';
15
+ return {
16
+ indent,
17
+ markerChar: marker[0] ?? '`',
18
+ markerLen: marker.length,
19
+ openLine: line,
20
+ };
21
+ }
22
+ function closeFenceLine(fence) {
23
+ return `${fence.indent}${fence.markerChar.repeat(fence.markerLen)}`;
24
+ }
25
+ function closeFenceIfNeeded(text, fence) {
26
+ if (!fence)
27
+ return text;
28
+ const close = closeFenceLine(fence);
29
+ if (!text)
30
+ return close;
31
+ if (!text.endsWith('\n'))
32
+ return `${text}\n${close}`;
33
+ return `${text}${close}`;
34
+ }
35
+ function splitLongLine(line, maxChars, preserveWhitespace) {
36
+ const limit = Math.max(1, Math.floor(maxChars));
37
+ if (line.length <= limit)
38
+ return [line];
39
+ const out = [];
40
+ let remaining = line;
41
+ while (remaining.length > limit) {
42
+ if (preserveWhitespace) {
43
+ out.push(remaining.slice(0, limit));
44
+ remaining = remaining.slice(limit);
45
+ continue;
46
+ }
47
+ const window = remaining.slice(0, limit);
48
+ let breakIdx = -1;
49
+ for (let i = window.length - 1; i >= 0; i--) {
50
+ if (/\s/.test(window[i])) {
51
+ breakIdx = i;
52
+ break;
53
+ }
54
+ }
55
+ if (breakIdx <= 0)
56
+ breakIdx = limit;
57
+ out.push(remaining.slice(0, breakIdx));
58
+ remaining = remaining.slice(breakIdx);
59
+ }
60
+ if (remaining.length)
61
+ out.push(remaining);
62
+ return out;
63
+ }
64
+ function rebalanceReasoningItalics(source, chunks) {
65
+ if (chunks.length <= 1)
66
+ return chunks;
67
+ const opensWithReasoningItalics = source.startsWith('Reasoning:\n_') && source.trimEnd().endsWith('_');
68
+ if (!opensWithReasoningItalics)
69
+ return chunks;
70
+ const adjusted = [...chunks];
71
+ for (let i = 0; i < adjusted.length; i++) {
72
+ const isLast = i === adjusted.length - 1;
73
+ const current = adjusted[i];
74
+ if (!current.trimEnd().endsWith('_')) {
75
+ adjusted[i] = `${current}_`;
76
+ }
77
+ if (isLast)
78
+ break;
79
+ const next = adjusted[i + 1];
80
+ const leadingLen = next.length - next.trimStart().length;
81
+ const leading = next.slice(0, leadingLen);
82
+ const body = next.slice(leadingLen);
83
+ if (!body.startsWith('_')) {
84
+ adjusted[i + 1] = `${leading}_${body}`;
85
+ }
86
+ }
87
+ return adjusted;
88
+ }
89
+ export function chunkDiscordText(text, opts = {}) {
90
+ const maxChars = Math.max(1, Math.floor(opts.maxChars ?? DEFAULT_MAX_CHARS));
91
+ const maxLines = Math.max(1, Math.floor(opts.maxLines ?? DEFAULT_MAX_LINES));
92
+ const body = text ?? '';
93
+ if (!body)
94
+ return [];
95
+ if (body.length <= maxChars && countLines(body) <= maxLines) {
96
+ return [body];
97
+ }
98
+ const lines = body.split('\n');
99
+ const chunks = [];
100
+ let current = '';
101
+ let currentLines = 0;
102
+ let openFence = null;
103
+ const flush = () => {
104
+ if (!current)
105
+ return;
106
+ const payload = closeFenceIfNeeded(current, openFence);
107
+ if (payload.trim().length)
108
+ chunks.push(payload);
109
+ current = '';
110
+ currentLines = 0;
111
+ if (openFence) {
112
+ current = openFence.openLine;
113
+ currentLines = 1;
114
+ }
115
+ };
116
+ for (const originalLine of lines) {
117
+ const fenceInfo = parseFenceLine(originalLine);
118
+ let nextOpenFence = openFence;
119
+ if (fenceInfo) {
120
+ if (!openFence) {
121
+ nextOpenFence = fenceInfo;
122
+ }
123
+ else if (openFence.markerChar === fenceInfo.markerChar &&
124
+ fenceInfo.markerLen >= openFence.markerLen) {
125
+ nextOpenFence = null;
126
+ }
127
+ }
128
+ const reserveChars = nextOpenFence ? closeFenceLine(nextOpenFence).length + 1 : 0;
129
+ const reserveLines = nextOpenFence ? 1 : 0;
130
+ const effectiveMaxChars = maxChars - reserveChars;
131
+ const effectiveMaxLines = maxLines - reserveLines;
132
+ const charLimit = effectiveMaxChars > 0 ? effectiveMaxChars : maxChars;
133
+ const lineLimit = effectiveMaxLines > 0 ? effectiveMaxLines : maxLines;
134
+ const prefixLen = current.length > 0 ? current.length + 1 : 0;
135
+ const segmentLimit = Math.max(1, charLimit - prefixLen);
136
+ const wasInsideFence = openFence !== null;
137
+ const segments = splitLongLine(originalLine, segmentLimit, wasInsideFence);
138
+ for (let segIndex = 0; segIndex < segments.length; segIndex++) {
139
+ const segment = segments[segIndex];
140
+ const isLineContinuation = segIndex > 0;
141
+ const delimiter = isLineContinuation ? '' : current.length > 0 ? '\n' : '';
142
+ const addition = `${delimiter}${segment}`;
143
+ const nextLen = current.length + addition.length;
144
+ const nextLines = currentLines + (isLineContinuation ? 0 : 1);
145
+ const wouldExceedChars = nextLen > charLimit;
146
+ const wouldExceedLines = nextLines > lineLimit;
147
+ if ((wouldExceedChars || wouldExceedLines) && current.length > 0) {
148
+ flush();
149
+ }
150
+ if (current.length > 0) {
151
+ current += addition;
152
+ if (!isLineContinuation)
153
+ currentLines += 1;
154
+ }
155
+ else {
156
+ current = segment;
157
+ currentLines = 1;
158
+ }
159
+ }
160
+ openFence = nextOpenFence;
161
+ }
162
+ if (current.length) {
163
+ const payload = closeFenceIfNeeded(current, openFence);
164
+ if (payload.trim().length)
165
+ chunks.push(payload);
166
+ }
167
+ return rebalanceReasoningItalics(text, chunks);
168
+ }
169
+ //# sourceMappingURL=discord-chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-chunker.js","sourceRoot":"","sources":["../../src/formatters/discord-chunker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ChannelType } from '@cogitator-ai/types';
2
+ export declare function getPlatformLimit(channelType: ChannelType): number;
3
+ export declare function adaptMarkdown(text: string, channelType: ChannelType): string;
4
+ export declare function chunkMessage(text: string, maxLength: number): string[];
5
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAWvD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAEjE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAW5E;AAiBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBtE"}
@@ -0,0 +1,59 @@
1
+ import { markdownToWhatsApp } from './whatsapp-markdown';
2
+ const PLATFORM_LIMITS = {
3
+ telegram: 4096,
4
+ discord: 2000,
5
+ slack: 40000,
6
+ whatsapp: 65536,
7
+ webchat: Infinity,
8
+ };
9
+ export function getPlatformLimit(channelType) {
10
+ return PLATFORM_LIMITS[channelType] ?? 4096;
11
+ }
12
+ export function adaptMarkdown(text, channelType) {
13
+ switch (channelType) {
14
+ case 'telegram':
15
+ return toTelegramMarkdown(text);
16
+ case 'slack':
17
+ return toSlackMarkdown(text);
18
+ case 'whatsapp':
19
+ return markdownToWhatsApp(text);
20
+ default:
21
+ return text;
22
+ }
23
+ }
24
+ function toTelegramMarkdown(text) {
25
+ return text
26
+ .replace(/^### (.+)$/gm, '*$1*')
27
+ .replace(/^## (.+)$/gm, '*$1*')
28
+ .replace(/^# (.+)$/gm, '*$1*');
29
+ }
30
+ function toSlackMarkdown(text) {
31
+ return text
32
+ .replace(/\*\*(.+?)\*\*/g, '*$1*')
33
+ .replace(/^### (.+)$/gm, '*$1*')
34
+ .replace(/^## (.+)$/gm, '*$1*')
35
+ .replace(/^# (.+)$/gm, '*$1*');
36
+ }
37
+ export function chunkMessage(text, maxLength) {
38
+ if (text.length <= maxLength)
39
+ return [text];
40
+ const chunks = [];
41
+ let remaining = text;
42
+ while (remaining.length > 0) {
43
+ if (remaining.length <= maxLength) {
44
+ chunks.push(remaining);
45
+ break;
46
+ }
47
+ let splitAt = remaining.lastIndexOf('\n\n', maxLength);
48
+ if (splitAt <= 0)
49
+ splitAt = remaining.lastIndexOf('\n', maxLength);
50
+ if (splitAt <= 0)
51
+ splitAt = remaining.lastIndexOf(' ', maxLength);
52
+ if (splitAt <= 0)
53
+ splitAt = maxLength;
54
+ chunks.push(remaining.slice(0, splitAt));
55
+ remaining = remaining.slice(splitAt).trimStart();
56
+ }
57
+ return chunks;
58
+ }
59
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,eAAe,GAA2B;IAC9C,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,QAAQ;CAClB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,WAAwB;IACvD,OAAO,eAAe,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,WAAwB;IAClE,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,OAAO;YACV,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,UAAU;YACb,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,IAAI;SACR,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;SAC/B,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;SAC9B,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI;SACR,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC;SACjC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;SAC/B,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;SAC9B,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,SAAiB;IAC1D,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,MAAM;QACR,CAAC;QAED,IAAI,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACvD,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnE,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAClE,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,GAAG,SAAS,CAAC;QAEtC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACzC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;IACnD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function markdownToWhatsApp(text: string): string;
2
+ //# sourceMappingURL=whatsapp-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/whatsapp-markdown.ts"],"names":[],"mappings":"AAOA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA+BvD"}
@@ -0,0 +1,26 @@
1
+ const FENCE_PLACEHOLDER = '\x00FENCE';
2
+ const INLINE_CODE_PLACEHOLDER = '\x00CODE';
3
+ function escapeRegExp(str) {
4
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
5
+ }
6
+ export function markdownToWhatsApp(text) {
7
+ if (!text)
8
+ return text;
9
+ const fences = [];
10
+ let result = text.replace(/```[\s\S]*?```/g, (match) => {
11
+ fences.push(match);
12
+ return `${FENCE_PLACEHOLDER}${fences.length - 1}`;
13
+ });
14
+ const inlineCodes = [];
15
+ result = result.replace(/`[^`\n]+`/g, (match) => {
16
+ inlineCodes.push(match);
17
+ return `${INLINE_CODE_PLACEHOLDER}${inlineCodes.length - 1}`;
18
+ });
19
+ result = result.replace(/\*\*(.+?)\*\*/g, '*$1*');
20
+ result = result.replace(/__(.+?)__/g, '*$1*');
21
+ result = result.replace(/~~(.+?)~~/g, '~$1~');
22
+ result = result.replace(new RegExp(`${escapeRegExp(INLINE_CODE_PLACEHOLDER)}(\\d+)`, 'g'), (_, idx) => inlineCodes[Number(idx)] ?? '');
23
+ result = result.replace(new RegExp(`${escapeRegExp(FENCE_PLACEHOLDER)}(\\d+)`, 'g'), (_, idx) => fences[Number(idx)] ?? '');
24
+ return result;
25
+ }
26
+ //# sourceMappingURL=whatsapp-markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-markdown.js","sourceRoot":"","sources":["../../src/formatters/whatsapp-markdown.ts"],"names":[],"mappings":"AAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC;AACtC,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAE3C,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;QACrD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,GAAG,iBAAiB,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;QAC9C,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,GAAG,uBAAuB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAE9C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAE9C,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,uBAAuB,CAAC,QAAQ,EAAE,GAAG,CAAC,EACjE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAC3C,CAAC;IAEF,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,EAC3D,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CACtC,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { GatewayConfig, GatewayStats, ChannelMessage } from '@cogitator-ai/types';
2
+ import type { Cogitator } from '@cogitator-ai/core';
3
+ import type { MediaProcessor } from './media/media-processor';
4
+ export interface GatewayFullConfig extends GatewayConfig {
5
+ cogitator: Cogitator;
6
+ mediaProcessor?: MediaProcessor;
7
+ }
8
+ export declare class Gateway {
9
+ private readonly config;
10
+ private readonly channels;
11
+ private readonly sessionManager;
12
+ private readonly compactionService;
13
+ private readonly middlewares;
14
+ private readonly streamConfig;
15
+ private readonly debouncer;
16
+ private readonly messageQueue;
17
+ private readonly hooks;
18
+ private readonly lastMessageTime;
19
+ private running;
20
+ private startedAt;
21
+ private messageCount;
22
+ constructor(config: GatewayFullConfig);
23
+ start(): Promise<void>;
24
+ stop(): Promise<void>;
25
+ get stats(): GatewayStats;
26
+ injectMessage(msg: ChannelMessage): Promise<void>;
27
+ private handleIncoming;
28
+ private processMessage;
29
+ private extractMedia;
30
+ private runDirect;
31
+ private runStreaming;
32
+ private getThreadId;
33
+ private resolveAgent;
34
+ private getAgentName;
35
+ private createMiddlewareContext;
36
+ private createSummarizeFn;
37
+ }
38
+ //# sourceMappingURL=gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAEZ,cAAc,EAOf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAM9D,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAC7D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,YAAY,CAAK;gBAEb,MAAM,EAAE,iBAAiB;IAmC/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,IAAI,KAAK,IAAI,YAAY,CAQxB;IAEK,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;YAIzC,cAAc;YAWd,cAAc;YAiGd,YAAY;YAgCZ,SAAS;YAyDT,YAAY;IA6E1B,OAAO,CAAC,WAAW;YAOL,YAAY;IAQ1B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,iBAAiB;CAW1B"}