@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 @@
1
+ {"version":3,"file":"whisper-local.js","sourceRoot":"","sources":["../../src/media/whisper-local.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Tool } from '@cogitator-ai/types';
2
+ import type { LocalWhisper } from './whisper-local';
3
+ export declare function createWhisperDownloadTool(whisper: LocalWhisper): Tool;
4
+ //# sourceMappingURL=whisper-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whisper-tool.d.ts","sourceRoot":"","sources":["../../src/media/whisper-tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAgBrE"}
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ import { tool } from '@cogitator-ai/core';
3
+ export function createWhisperDownloadTool(whisper) {
4
+ return tool({
5
+ name: 'download_stt_model',
6
+ description: 'Download speech recognition model (~75MB) for offline voice message transcription. ' +
7
+ 'Call this when the user confirms they want voice message support. ' +
8
+ 'Downloads once, works offline after that.',
9
+ parameters: z.object({}),
10
+ execute: async () => {
11
+ if (whisper.isModelDownloaded()) {
12
+ return { success: true, message: 'Model already downloaded' };
13
+ }
14
+ await whisper.download();
15
+ return { success: true, message: 'Whisper model downloaded', modelDir: whisper.modelDir };
16
+ },
17
+ });
18
+ }
19
+ //# sourceMappingURL=whisper-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whisper-tool.js","sourceRoot":"","sources":["../../src/media/whisper-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAI1C,MAAM,UAAU,yBAAyB,CAAC,OAAqB;IAC7D,OAAO,IAAI,CAAC;QACV,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,qFAAqF;YACrF,oEAAoE;YACpE,2CAA2C;QAC7C,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;gBAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;YAChE,CAAC;YACD,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC5F,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ChannelMessage, QueueMode } from '@cogitator-ai/types';
2
+ export declare class MessageQueue {
3
+ private readonly mode;
4
+ private readonly processor;
5
+ private threads;
6
+ constructor(mode: QueueMode, processor: (msg: ChannelMessage, signal?: AbortSignal) => Promise<void>);
7
+ push(msg: ChannelMessage, threadId: string): void;
8
+ dispose(): void;
9
+ private getThread;
10
+ private pushSequential;
11
+ private drainSequential;
12
+ private pushInterrupt;
13
+ private pushCollect;
14
+ private drainCollect;
15
+ private mergeMessages;
16
+ }
17
+ //# sourceMappingURL=message-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../src/message-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAQrE,qBAAa,YAAY;IAIrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAJ5B,OAAO,CAAC,OAAO,CAAkC;gBAG9B,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC;IAG1F,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAiBjD,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,cAAc;YAQR,eAAe;IAW7B,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,WAAW;YASL,YAAY;IAc1B,OAAO,CAAC,aAAa;CAiBtB"}
@@ -0,0 +1,115 @@
1
+ export class MessageQueue {
2
+ mode;
3
+ processor;
4
+ threads = new Map();
5
+ constructor(mode, processor) {
6
+ this.mode = mode;
7
+ this.processor = processor;
8
+ }
9
+ push(msg, threadId) {
10
+ switch (this.mode) {
11
+ case 'parallel':
12
+ void this.processor(msg);
13
+ break;
14
+ case 'sequential':
15
+ this.pushSequential(msg, threadId);
16
+ break;
17
+ case 'interrupt':
18
+ this.pushInterrupt(msg, threadId);
19
+ break;
20
+ case 'collect':
21
+ this.pushCollect(msg, threadId);
22
+ break;
23
+ }
24
+ }
25
+ dispose() {
26
+ for (const state of this.threads.values()) {
27
+ state.abortController?.abort();
28
+ state.queue.length = 0;
29
+ }
30
+ this.threads.clear();
31
+ }
32
+ getThread(threadId) {
33
+ let state = this.threads.get(threadId);
34
+ if (!state) {
35
+ state = { processing: false, queue: [] };
36
+ this.threads.set(threadId, state);
37
+ }
38
+ return state;
39
+ }
40
+ pushSequential(msg, threadId) {
41
+ const state = this.getThread(threadId);
42
+ state.queue.push(msg);
43
+ if (!state.processing) {
44
+ void this.drainSequential(state);
45
+ }
46
+ }
47
+ async drainSequential(state) {
48
+ state.processing = true;
49
+ while (state.queue.length > 0) {
50
+ const next = state.queue.shift();
51
+ try {
52
+ await this.processor(next);
53
+ }
54
+ catch { }
55
+ }
56
+ state.processing = false;
57
+ }
58
+ pushInterrupt(msg, threadId) {
59
+ const state = this.getThread(threadId);
60
+ if (state.processing && state.abortController) {
61
+ state.abortController.abort();
62
+ }
63
+ state.queue.length = 0;
64
+ const ac = new AbortController();
65
+ state.abortController = ac;
66
+ state.processing = true;
67
+ void this.processor(msg, ac.signal)
68
+ .catch(() => { })
69
+ .finally(() => {
70
+ if (state.abortController === ac) {
71
+ state.processing = false;
72
+ state.abortController = undefined;
73
+ }
74
+ });
75
+ }
76
+ pushCollect(msg, threadId) {
77
+ const state = this.getThread(threadId);
78
+ state.queue.push(msg);
79
+ if (!state.processing) {
80
+ void this.drainCollect(state);
81
+ }
82
+ }
83
+ async drainCollect(state) {
84
+ state.processing = true;
85
+ while (state.queue.length > 0) {
86
+ const batch = state.queue.splice(0, state.queue.length);
87
+ const merged = this.mergeMessages(batch);
88
+ try {
89
+ await this.processor(merged);
90
+ }
91
+ catch { }
92
+ }
93
+ state.processing = false;
94
+ }
95
+ mergeMessages(msgs) {
96
+ if (msgs.length === 1)
97
+ return msgs[0];
98
+ const first = msgs[0];
99
+ const joined = {
100
+ id: first.id,
101
+ channelType: first.channelType,
102
+ channelId: first.channelId,
103
+ userId: first.userId,
104
+ userName: first.userName,
105
+ groupId: first.groupId,
106
+ text: msgs.map((m) => m.text).join('\n'),
107
+ raw: msgs[msgs.length - 1].raw,
108
+ };
109
+ const allAttachments = msgs.flatMap((m) => m.attachments ?? []);
110
+ if (allAttachments.length > 0)
111
+ joined.attachments = allAttachments;
112
+ return joined;
113
+ }
114
+ }
115
+ //# sourceMappingURL=message-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-queue.js","sourceRoot":"","sources":["../src/message-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { GatewayMiddleware, ChannelMessage, MiddlewareContext, GraphAdapter } from '@cogitator-ai/types';
2
+ export interface ExtractedEntities {
3
+ entities: Array<{
4
+ name: string;
5
+ type: string;
6
+ confidence: number;
7
+ description?: string;
8
+ }>;
9
+ relations: Array<{
10
+ from: string;
11
+ to: string;
12
+ type: string;
13
+ confidence: number;
14
+ }>;
15
+ }
16
+ export interface EntityExtractor {
17
+ extract(text: string, context?: string): Promise<ExtractedEntities>;
18
+ }
19
+ export interface AutoExtractConfig {
20
+ extractor: EntityExtractor;
21
+ graphAdapter: GraphAdapter;
22
+ agentId: string;
23
+ coreFacts?: {
24
+ set(key: string, value: string): Promise<void>;
25
+ };
26
+ coreFactPatterns?: Record<string, RegExp>;
27
+ }
28
+ export declare class AutoExtractMiddleware implements GatewayMiddleware {
29
+ private config;
30
+ readonly name = "auto-extract";
31
+ constructor(config: AutoExtractConfig);
32
+ handle(msg: ChannelMessage, _ctx: MiddlewareContext, next: () => Promise<void>): Promise<void>;
33
+ private extractAndStore;
34
+ }
35
+ export declare function autoExtract(config: AutoExtractConfig): GatewayMiddleware;
36
+ //# sourceMappingURL=auto-extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-extract.d.ts","sourceRoot":"","sources":["../../src/middleware/auto-extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,YAAY,EAGb,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE;QAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,qBAAa,qBAAsB,YAAW,iBAAiB;IAGjD,OAAO,CAAC,MAAM;IAF1B,QAAQ,CAAC,IAAI,kBAAkB;gBAEX,MAAM,EAAE,iBAAiB;IAEvC,MAAM,CACV,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC;YAUF,eAAe;CAwD9B;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAExE"}
@@ -0,0 +1,73 @@
1
+ export class AutoExtractMiddleware {
2
+ config;
3
+ name = 'auto-extract';
4
+ constructor(config) {
5
+ this.config = config;
6
+ }
7
+ async handle(msg, _ctx, next) {
8
+ await next();
9
+ if (msg.text) {
10
+ void this.extractAndStore(msg.text).catch((err) => {
11
+ console.error('[auto-extract] Error:', err);
12
+ });
13
+ }
14
+ }
15
+ async extractAndStore(text) {
16
+ const { extractor, graphAdapter, agentId } = this.config;
17
+ const result = await extractor.extract(text);
18
+ for (const entity of result.entities) {
19
+ const existing = await graphAdapter.getNodeByName(agentId, entity.name);
20
+ if (existing.success && existing.data) {
21
+ if (entity.confidence > existing.data.confidence) {
22
+ await graphAdapter.updateNode(existing.data.id, {
23
+ confidence: entity.confidence,
24
+ description: entity.description,
25
+ });
26
+ }
27
+ }
28
+ else {
29
+ await graphAdapter.addNode({
30
+ agentId,
31
+ name: entity.name,
32
+ type: entity.type,
33
+ description: entity.description,
34
+ confidence: entity.confidence,
35
+ source: 'extracted',
36
+ aliases: [],
37
+ properties: {},
38
+ metadata: {},
39
+ });
40
+ }
41
+ }
42
+ for (const relation of result.relations) {
43
+ const fromNode = await graphAdapter.getNodeByName(agentId, relation.from);
44
+ const toNode = await graphAdapter.getNodeByName(agentId, relation.to);
45
+ if (fromNode.success && fromNode.data && toNode.success && toNode.data) {
46
+ await graphAdapter.addEdge({
47
+ agentId,
48
+ sourceNodeId: fromNode.data.id,
49
+ targetNodeId: toNode.data.id,
50
+ type: relation.type,
51
+ confidence: relation.confidence,
52
+ source: 'extracted',
53
+ weight: 1.0,
54
+ bidirectional: false,
55
+ properties: {},
56
+ metadata: {},
57
+ });
58
+ }
59
+ }
60
+ if (this.config.coreFacts && this.config.coreFactPatterns) {
61
+ for (const [key, pattern] of Object.entries(this.config.coreFactPatterns)) {
62
+ const match = pattern.exec(text);
63
+ if (match?.[1]) {
64
+ await this.config.coreFacts.set(key, match[1].trim());
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
70
+ export function autoExtract(config) {
71
+ return new AutoExtractMiddleware(config);
72
+ }
73
+ //# sourceMappingURL=auto-extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-extract.js","sourceRoot":"","sources":["../../src/middleware/auto-extract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { GatewayMiddleware, ChannelMessage, MiddlewareContext } from '@cogitator-ai/types';
2
+ export type DmPolicyMode = 'open' | 'allowlist' | 'pairing' | 'disabled';
3
+ export interface DmPolicyConfig {
4
+ mode: DmPolicyMode;
5
+ allowlist?: string[];
6
+ storePath?: string;
7
+ pairingCodeLength?: number;
8
+ pairingExpiresMs?: number;
9
+ groupPolicy?: 'open' | 'allowlist' | 'disabled';
10
+ groupAllowlist?: string[];
11
+ ownerIds?: Record<string, string>;
12
+ onPairingRequest?: (userId: string, code: string) => void;
13
+ }
14
+ export declare class DmPolicyMiddleware implements GatewayMiddleware {
15
+ readonly name = "dm-policy";
16
+ private readonly mode;
17
+ private readonly approved;
18
+ private readonly pending;
19
+ private readonly storePath;
20
+ private readonly codeLength;
21
+ private readonly expiresMs;
22
+ private readonly groupPolicy;
23
+ private readonly groupAllowlist;
24
+ private readonly ownerKeys;
25
+ private readonly onPairingRequest?;
26
+ constructor(config: DmPolicyConfig);
27
+ handle(msg: ChannelMessage, ctx: MiddlewareContext, next: () => Promise<void>): Promise<void>;
28
+ isApproved(channelType: string, userId: string): boolean;
29
+ getApprovedUsers(): readonly string[];
30
+ private isAllowed;
31
+ private checkGroupAccess;
32
+ private handlePairingRequest;
33
+ private handleApproval;
34
+ private findPendingByUser;
35
+ private loadStore;
36
+ private saveStore;
37
+ }
38
+ export declare function dmPolicy(config: DmPolicyConfig): GatewayMiddleware;
39
+ //# sourceMappingURL=dm-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dm-policy.d.ts","sourceRoot":"","sources":["../../src/middleware/dm-policy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGhG,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IAChD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D;AAkBD,qBAAa,kBAAmB,YAAW,iBAAiB;IAC1D,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoC;IAChE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAyC;gBAE/D,MAAM,EAAE,cAAc;IAyB5B,MAAM,CACV,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC;IA8ChB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAKxD,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAIrC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,gBAAgB;YAWV,oBAAoB;YA+BpB,cAAc;IAuB5B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;CAalB;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,iBAAiB,CAElE"}
@@ -0,0 +1,177 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
2
+ import { dirname } from 'node:path';
3
+ import { join } from 'node:path';
4
+ import { homedir } from 'node:os';
5
+ import { customAlphabet } from 'nanoid';
6
+ const DEFAULT_STORE_PATH = join(homedir(), '.cogitator', 'dm-allowlist.json');
7
+ const DEFAULT_PAIRING_CODE_LENGTH = 6;
8
+ const DEFAULT_PAIRING_EXPIRES_MS = 300_000;
9
+ export class DmPolicyMiddleware {
10
+ name = 'dm-policy';
11
+ mode;
12
+ approved = new Set();
13
+ pending = new Map();
14
+ storePath;
15
+ codeLength;
16
+ expiresMs;
17
+ groupPolicy;
18
+ groupAllowlist;
19
+ ownerKeys = new Set();
20
+ onPairingRequest;
21
+ constructor(config) {
22
+ this.mode = config.mode;
23
+ this.storePath = config.storePath ?? DEFAULT_STORE_PATH;
24
+ this.codeLength = config.pairingCodeLength ?? DEFAULT_PAIRING_CODE_LENGTH;
25
+ this.expiresMs = config.pairingExpiresMs ?? DEFAULT_PAIRING_EXPIRES_MS;
26
+ this.groupPolicy = config.groupPolicy ?? 'open';
27
+ this.groupAllowlist = new Set(config.groupAllowlist ?? []);
28
+ this.onPairingRequest = config.onPairingRequest;
29
+ if (config.ownerIds) {
30
+ for (const [channelType, ownerId] of Object.entries(config.ownerIds)) {
31
+ this.ownerKeys.add(`${channelType}:${ownerId}`);
32
+ this.approved.add(`${channelType}:${ownerId}`);
33
+ }
34
+ }
35
+ if (config.allowlist) {
36
+ for (const userId of config.allowlist) {
37
+ this.approved.add(userId);
38
+ }
39
+ }
40
+ this.loadStore();
41
+ }
42
+ async handle(msg, ctx, next) {
43
+ const isGroup = !!msg.groupId;
44
+ const userKey = `${msg.channelType}:${msg.userId}`;
45
+ const isOwner = this.ownerKeys.has(userKey);
46
+ if (isGroup) {
47
+ if (!this.checkGroupAccess(msg, isOwner))
48
+ return;
49
+ await next();
50
+ return;
51
+ }
52
+ if (isOwner) {
53
+ if (this.mode === 'pairing' && msg.text.startsWith('/pair ')) {
54
+ await this.handleApproval(msg, ctx);
55
+ return;
56
+ }
57
+ await next();
58
+ return;
59
+ }
60
+ switch (this.mode) {
61
+ case 'open':
62
+ await next();
63
+ return;
64
+ case 'disabled':
65
+ return;
66
+ case 'allowlist':
67
+ if (this.isAllowed(userKey, msg.userId)) {
68
+ await next();
69
+ }
70
+ else {
71
+ await ctx.channel.sendText(msg.channelId, 'Not authorized.');
72
+ }
73
+ return;
74
+ case 'pairing':
75
+ if (this.isAllowed(userKey, msg.userId)) {
76
+ await next();
77
+ return;
78
+ }
79
+ await this.handlePairingRequest(msg, ctx, userKey);
80
+ return;
81
+ }
82
+ }
83
+ isApproved(channelType, userId) {
84
+ const userKey = `${channelType}:${userId}`;
85
+ return this.isAllowed(userKey, userId);
86
+ }
87
+ getApprovedUsers() {
88
+ return [...this.approved];
89
+ }
90
+ isAllowed(userKey, userId) {
91
+ return this.approved.has(userKey) || this.approved.has(userId);
92
+ }
93
+ checkGroupAccess(msg, isOwner) {
94
+ switch (this.groupPolicy) {
95
+ case 'open':
96
+ return true;
97
+ case 'disabled':
98
+ return false;
99
+ case 'allowlist':
100
+ return isOwner || this.groupAllowlist.has(msg.groupId);
101
+ }
102
+ }
103
+ async handlePairingRequest(msg, ctx, userKey) {
104
+ const existing = this.findPendingByUser(userKey);
105
+ if (existing && existing.expiresAt > Date.now()) {
106
+ await ctx.channel.sendText(msg.channelId, `Waiting for approval. Your code: \`${existing.code}\``);
107
+ return;
108
+ }
109
+ const genCode = customAlphabet('ABCDEFGHJKLMNPQRSTUVWXYZ23456789');
110
+ const code = genCode(this.codeLength);
111
+ this.pending.set(code, {
112
+ code,
113
+ userId: msg.userId,
114
+ channelType: msg.channelType,
115
+ expiresAt: Date.now() + this.expiresMs,
116
+ });
117
+ this.onPairingRequest?.(msg.userId, code);
118
+ await ctx.channel.sendText(msg.channelId, `Hi! Ask the bot owner to approve you with: \`/pair ${code}\``);
119
+ }
120
+ async handleApproval(msg, ctx) {
121
+ const code = msg.text.replace('/pair ', '').trim().toUpperCase();
122
+ const pairing = this.pending.get(code);
123
+ if (!pairing) {
124
+ await ctx.channel.sendText(msg.channelId, 'Invalid or expired pairing code.');
125
+ return;
126
+ }
127
+ if (pairing.expiresAt < Date.now()) {
128
+ this.pending.delete(code);
129
+ await ctx.channel.sendText(msg.channelId, 'Pairing code expired.');
130
+ return;
131
+ }
132
+ const userKey = `${pairing.channelType}:${pairing.userId}`;
133
+ this.approved.add(userKey);
134
+ this.pending.delete(code);
135
+ this.saveStore();
136
+ await ctx.channel.sendText(msg.channelId, `User approved (${userKey}).`);
137
+ }
138
+ findPendingByUser(userKey) {
139
+ for (const p of this.pending.values()) {
140
+ if (`${p.channelType}:${p.userId}` === userKey)
141
+ return p;
142
+ }
143
+ return undefined;
144
+ }
145
+ loadStore() {
146
+ try {
147
+ if (!existsSync(this.storePath))
148
+ return;
149
+ const raw = readFileSync(this.storePath, 'utf-8');
150
+ const data = JSON.parse(raw);
151
+ if (data.version === 1 && Array.isArray(data.users)) {
152
+ for (const userId of data.users) {
153
+ this.approved.add(userId);
154
+ }
155
+ }
156
+ }
157
+ catch { }
158
+ }
159
+ saveStore() {
160
+ const store = {
161
+ version: 1,
162
+ users: [...this.approved].filter((key) => !this.ownerKeys.has(key)),
163
+ };
164
+ try {
165
+ const dir = dirname(this.storePath);
166
+ if (!existsSync(dir)) {
167
+ mkdirSync(dir, { recursive: true });
168
+ }
169
+ writeFileSync(this.storePath, JSON.stringify(store, null, 2));
170
+ }
171
+ catch { }
172
+ }
173
+ }
174
+ export function dmPolicy(config) {
175
+ return new DmPolicyMiddleware(config);
176
+ }
177
+ //# sourceMappingURL=dm-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dm-policy.js","sourceRoot":"","sources":["../../src/middleware/dm-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { GatewayMiddleware, ChannelMessage, MiddlewareContext } from '@cogitator-ai/types';
2
+ export type CommandLevel = 'owner' | 'authorized' | 'public';
3
+ export interface OwnerCommandsConfig {
4
+ ownerIds: Record<string, string>;
5
+ authorizedUserIds?: string[];
6
+ publicCommands?: string[];
7
+ onStatus?: () => string;
8
+ onSessions?: () => string;
9
+ onUsers?: () => string;
10
+ onCompact?: (target: string) => Promise<string>;
11
+ onModel?: (model: string, forUser?: string) => string;
12
+ onRestart?: () => Promise<void>;
13
+ }
14
+ export declare class OwnerCommandsMiddleware implements GatewayMiddleware {
15
+ private readonly config;
16
+ readonly name = "owner-commands";
17
+ private readonly ownerKeys;
18
+ private readonly authorizedKeys;
19
+ private readonly publicCommands;
20
+ constructor(config: OwnerCommandsConfig);
21
+ handle(msg: ChannelMessage, ctx: MiddlewareContext, next: () => Promise<void>): Promise<void>;
22
+ private getUserLevel;
23
+ }
24
+ export declare function ownerCommands(config: OwnerCommandsConfig): GatewayMiddleware;
25
+ //# sourceMappingURL=owner-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-commands.d.ts","sourceRoot":"","sources":["../../src/middleware/owner-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEhG,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AA4FD,qBAAa,uBAAwB,YAAW,iBAAiB;IAMnD,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,QAAQ,CAAC,IAAI,oBAAoB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAc;gBAEhB,MAAM,EAAE,mBAAmB;IAkBlD,MAAM,CACV,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC;IA8BhB,OAAO,CAAC,YAAY;CAQrB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,iBAAiB,CAE5E"}